Zum Inhalt springen

howto: Newloginbox und mehrere Sysordner / Sysfolder bzw. storagePid

Erstellt am 5. Oktober 2007 · 1 Antwort · letzte Antwort am 8. Dezember 2008

Tags: felogin, Frontend-Benutzer, Frage

lamina ·

Hallo zusammen!

Problematik:
Man stelle sich vor, man betreibt eine Seite für zwei Gruppen von Benutzern, welche verschiedene Rechte auf der Seite haben. Die Frontend-Benutzer müssen in verschiedenen Sysfoldern per sr_feuser_register abgelegt werden. Jedoch sollen beide Gruppen sich an einem zentralen Loginscript auf jeder Seite anmelden können (newloginbox).

Konkret: eine Homepage für eine Musikkapelle (Jugend- und Seniorenkapelle) soll in einem internen Bereich, die Daten der Kollegen nach erfolgreichem Login, ausgeben können (Telefonnummer, Email, etc.) Was mit der Userlist-Funktion der newloginbox realisierbar ist. Jedoch sollen die Mitglieder der Seniorenkapelle nicht die Daten der Jugendkapellmitglieder einsehen können und umgekehrt.

Lösung:

Extensions:

  • newloginbox
    sr_feuser_register

###### L O G I N ######

plugin.tx_newloginbox_pi1 {
  templateFile = fileadmin/templates/newloginbox.html <-- !!! 
 
  domains = harmoniemusik-fuessen.de <-- !!! 
  showForgotPassword = 0 <-- !!! 
  showPermaLogin = 0 <-- !!! 
  storagePid=61,98 <-- !!! 
  _LOCAL_LANG.default.login = GO
  _LOCAL_LANG.de.login = Anmelden
}

[usergroup = *]
temp.loginBox = COA
temp.loginBox {
  10 < plugin.tx_newloginbox_pi1
 
  #20 = TEXT
  #20.value = <a href="index.php?id=11" target="_top">Klicken Sie hier, um Ihre Benutzerdaten zu bearbeiten oder um Ihr Konto zu löschen.</a>
}
[else]
temp.loginBox = COA
temp.loginBox {
  10 < plugin.tx_newloginbox_pi1
   
  #20 = TEXT
  #20.value = <a href="index.php?id=9" target="_top">Zum ersten mal hier? Hier können Sie sich anmelden.</a>
}
[global]
page.10.marks.USER < temp.loginBox

Erläuterung:
Alle Größen die angepasst werden können, sind im TS mit einem Pfeil und 3 Ausrufezeichen markiert. Diese müssen Sie natürlich für eine korrekte Funktion entfernen (<-- !!! )
Dieses Script bindet die Newloginbox auf die Seite an Stelle des Markers ###USER### siehe letzte Zeile.
In Zeile 4 ist es möglich ein eigenes Template für die Newloginbox einzubinden. Dieses sieht bei mir wie folgt aus:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Templates 00 for Newloginbox plugin</title>
	<meta name="author" content="Brice Bernard http://www.brikou.com" />
	<meta name="date" content="2006-01-26" />
	<style type="text/css">
	body { margin:1em; padding:1em; }
	p.separator { padding:1em; border:2px solid gray; }
	</style>
</head>
<body>

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a></p>
<!--=========================================================-->

<h1>Common markers</h1>
<p>These are substituted in all newloginbox item displaying templates.</p>

<h2>Markers</h2>
<ul>
	<li>###ACTION_URI###     - URI of the request for the login/logout form</li>
	<li>###EXTRA_HIDDEN###   - Hook required (additionnal hidden field used by kb_md5fepw extension by Kraft Bernhard)</li>
	<li>###ON_SUBMIT###      - Hook required (used by kb_md5fepw extension by Kraft Bernhard)</li>
	<li>###PREFIXID###       - Same as class name ('tx_newloginbox_pi1') usefull to get a unique classname prefix</li>
	<li>###REDIRECT_URL###   - URL of redirection upon login</li>
	<li>###STORAGE_PID###    - explicit enough I guess (if not : id of the page where user are stored)</li>
	<li>###STATUS_HEADER###  - depends of the template</li>
	<li>###STATUS_MESSAGE### - depends of the template</li>
</ul>

<h2>Wrap parts</h2>
<ul>
	<li>###HEADER_VALID###  - usefull to define what to show/hide</li>
	<li>###MESSAGE_VALID### - usefull to define what to show/hide</li>
	<li>###FORGOTP_VALID### - usefull to define what to show/hide</li>
	<li>###PERMALOGIN_VALID### - usefull to define what to show/hide</li>
</ul>

<h2>Newloginbox Language Markers (see pi/locallang.php)</h2>
<ul>
	<li>###EMAIL_LABEL###                 - corresponding to 'your_email'</li>
	<li>###FORGOT_PASSWORD###             - corresponding to 'forgot_password'</li>
	<li>###FORGOT_PASSWORD_BACKTOLOGIN### - corresponding to 'forgot_password_backToLogin'</li>
	<li>###FORGOT_PASSWORD_ENTEREMAIL###  - corresponding to 'forgot_password_enterEmail'</li>
	<li>###LOGIN_LABEL###                 - corresponding to 'login'</li>
	<li>###PASSWORD_LABEL###              - corresponding to 'password'</li>
	<li>###SEND_PASSWORD###               - corresponding to 'send_password'</li>
	<li>###USERNAME_LABEL###              - corresponding to 'username'</li>
</ul>

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<h1>Newloginbox templates - example</h1>

<a name="navigation"></a><h2>Navigation</h2>
<ul>
	<li><a href="#template_login">TEMPLATE_LOGIN</a></li>
	<li><a href="#template_logout">TEMPLATE_LOGOUT</a></li>
	<li><a href="#template_success">TEMPLATE_SUCCESS</a></li>
	<li><a href="#template_forgot">TEMPLATE_FORGOT</a></li>
	<li><a href="#template_forgot_sent">TEMPLATE_FORGOT_SENT</a></li>
</ul>

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<a name="template_login"></a><h1>TEMPLATE_LOGIN</h1>
<p>This is the template for the login form with/without the 'forgot password' link.</p>

<!--###TEMPLATE_LOGIN###-->

<!--###HEADER_VALID###-->
<h3>###STATUS_HEADER###</h3>
<!--###HEADER_VALID###-->

<!--###MESSAGE_VALID###-->
<p>###STATUS_MESSAGE###</p>
<!--###MESSAGE_VALID###-->

<form action="###ACTION_URI###" target="_top" method="post" onsubmit="###ON_SUBMIT###">
	<table>
		<tbody>
			<tr>
				<th><label for="user">###USERNAME_LABEL###</label></th>
			</tr>
			<tr>
				<td><input type="text" id="user" name="user" value="" /></td>
			</tr>
			<tr>
				<th><label for="pass">###PASSWORD_LABEL###</label></th>
			</tr>
			<tr>
				<td><input type="password" id="pass" name="pass" value="" /></td>
			</tr>
			<!--###PERMALOGIN_VALID###-->
			<tr>
				<th><label for="permalogin">###PERMALOGIN###</label></th>
				<td>
					<input name="permalogin" value="0" type="hidden" permalogin_hiddenfield_attributes="" id="permaloginHiddenField" />
					<input name="permalogin" value="1" type="checkbox" permalogin_checkbox_attributes="" id="permalogin" onclick="document.getElementById('permaloginHiddenField').disabled = this.checked;" />
				</td>
			</tr>
			<!--###PERMALOGIN_VALID###-->
		</tbody>
		<tfoot>
	 		<tr>
	 			<td>
	 				<input type="submit" name="submit" value="###LOGIN_LABEL###" />
	 			</td>
	 		</tr>
		</tfoot>
	</table>
	<input type="hidden" name="logintype" value="login" />
	<input type="hidden" name="pid" value="###STORAGE_PID###" />
	<input type="hidden" name="redirect_url" value="###REDIRECT_URL###" />
	###EXTRA_HIDDEN###
</form>

<!--###FORGOTP_VALID###-->
<p><!--###FORGOTP_LINK###-->###FORGOT_PASSWORD###<!--###FORGOTP_LINK###--></p>
<!--###FORGOTP_VALID###-->

<!--###TEMPLATE_LOGIN###-->

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<a name="template_logout"></a><h1>TEMPLATE_LOGOUT</h1>
<p>This is the template shown after you logged in or displaying the status of current connection.</p>

<!--###TEMPLATE_LOGOUT###-->

<!--###HEADER_VALID###-->
<h3>###STATUS_HEADER###</h3>
<!--###HEADER_VALID###-->

<!--###MESSAGE_VALID###-->
<p>###STATUS_MESSAGE###</p>
<!--###MESSAGE_VALID###-->

<form action="###ACTION_URI###" target="_top" method="post">
	<table>
		<thead>
	 		<tr>
	 			<th>###USERNAME_LABEL###</th>
	 			<td>###USERNAME###</td>
	 		</tr>
		</thead>
		<tbody>
	 		<tr>
	 			<td></td>
	 			<td>
	 				<input type="submit" name="submit" value="###LOGOUT_LABEL###" />
	 			</td>
	 		</tr>
		</tbody>
	</table>
	<input type="hidden" name="logintype" value="logout" />
	<input type="hidden" name="pid" value="###STORAGE_PID###" />
</form>

<!--###TEMPLATE_LOGOUT###-->

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<a name="template_success"></a><h1>TEMPLATE_SUCCESS</h1>
<p>This is the template displayed when successfull login.</p>

<!--###TEMPLATE_SUCCESS###-->

<h3>###STATUS_HEADER###</h3>
<p>###STATUS_MESSAGE###</p>

<!--###TEMPLATE_SUCCESS###-->

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<a name="template_forgot"></a><h1>TEMPLATE_FORGOT</h1>
<p>This is the template made to mail you back your password to the adress you've registered.</p>

<!--###TEMPLATE_FORGOT###-->

<h3>###STATUS_HEADER###</h3>
<p>###FORGOT_PASSWORD_ENTEREMAIL###</p>
<form action="###ACTION_URI###" method="post">
	<table>
		<tfoot>
	 		<tr>
	 			<td></td>
	 			<td><input type="submit" name="submit" value="###SEND_PASSWORD###" /></td>
	 		</tr>
		</tfoot>
		<tbody>
			<tr>
				<th><label for="###PREFIXID###[DATA][forgot_email]">###EMAIL_LABEL###</label></th>
				<td><input type="text" name="###PREFIXID###[DATA][forgot_email]" /></td>
			</tr>
		</tbody>
	</table>
</form>

<!--###TEMPLATE_FORGOT###-->

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

<a name="template_forgot_sent"></a><h1>TEMPLATE_FORGOT_SENT</h1>
<p>This is the template shown when password has been mailed back.</p>

<!--###TEMPLATE_FORGOT_SENT###-->

<h3>###STATUS_HEADER###</h3>
<p>###STATUS_MESSAGE###</p>
<p>###FORGOT_PASSWORD_BACKTOLOGIN###</p>

<!--###TEMPLATE_FORGOT_SENT###-->

<!--=========================================================-->
<p class="separator"><a href="#navigation">Navigation</a> | <a href="#">To top</a></p>
<!--=========================================================-->

</body>
</html>

In Zeile 6 des TS ist es möglich die eigene betroffene domain einzutragen.
In Zeile 7 & 8 ist es möglich den permanenten Login und den Link für das vergessene Passwort freizuschalten.
In Zeile 9 kann man die verschiedenen Sysfolder angeben, in welchen die FE-Benutzer abgelegt sind.
In Zeile 19 und 20 könnte man einen Link für die Benutzerdatenbearbeitung freischalten, dazu bitte die id angeben auf welche die entsprechende sr_feuser_register Extension eingebunden ist. Bei mir ist dies nicht möglich, weil ich für jede Gruppe also Jugendkapelle und Seniorenkapelle eine eigene Seite für die Begistrierung und Kontenbearbeitung angelegt habe.
Zeile 27 und 28 das gleiche wie 19 und 20 nur für die Benutzerregistrierung.

Sind die Schritte vollzogen und alles konfiguriert muss man noch zwei oder mehrere sr_feuser_register Formulare einbinden, jeweils eine für jede Gruppe. Das macht man im Backend und ist in der hier beschireben:
http://typo3.org/documentation/document-library/extension-manuals/sr_feuser_register/2.5.7/view/

Nun kommt der Schritt wo man die Loginbox bzw. Typo3 für mehrer Sysfolder konfigurieren muss... damit sich alle abgelegten User am eingebundenen Script anmelden können.
Das geht wie folgt:
Ihr müsst ins "Install Tool" über den Link Installation in der Rubrik Tools im Backend. Wenn ihr euer Passwort eingegeben habt klickt ihr auf "5: All Configuration" dann sucht ihr nach der Zeile [FE][checkFeUserPid]=1 (Ich empfehle euch die Suchfunktion des Browsers zu verwenden meist mit dem Shortcut Strg+F)
Bei [FE][checkFeUserPid]müsst ihr das Häkchen entfernen, somit wird der Wert auf 0 gesetzt.
Am Ende der Seite mit Klick auf "Write to localconf.php" bestätigen.
Danach überprüft ihr die Eingabe geht zum gleichen Eintrag, dort müsste jetzt stehen:
[FE][checkFeUserPid]=0
und außerdem:
$TCA['fe_users']['columns']['username']['config']['eval']='nospace,lower,required,unique';
sollte die Zeile mit $TCA fehlen oder abweichen müsst ihr diese in der localconf.php eintragen!
Hierbei ist immer Vorsicht geboten keine leichtfertigen zusätzlichen Änderungen vornehmen, das könnte eure Typo3-Installation funktionsunfähig machen.

Nun sollte der Login mit mehreren Sysfoldern klappen.

Nur noch ein Hinweis auf eine Alternative, der Vollständigkeit halber. Diese Funktion ist meiner Recherche nach auch mit der Extension newloginbox_linkfactory möglich. Ich konnte diese leider nicht in Betrieb nehmen und weiß auch nichts weiteres, vielleicht könnte einer oder eine von Euch eine Anleitung hier posten, um den Eintrag zu vervollständigen.

Für Verbesserungen und Anmerkungen so wie Fragen bin ich Dankbar.

Lieben Dank und viel Spaß
Lamina

andimohr ·

@lamina - auch ich habe mehrere User Verzeichnisse. Die Erweiterung newloginbox_linkfactory kann als "Typo3 - Wiedrigkeit" abgehakt werden. Ich habe schon Stunden damit verbracht das Ding einzubinden, es ist mir nicht gelungen.

Vielen Dank für deine ausführliche Beschreibung. Ich werde nun newloginbox_linkfactory aus meinem Typo3 System verbannen und die NewLoginbox wie hier beschrieben für Multiple Storage PIDs aufpeppen.

So weit ich recherchiert habe ist ab Typo3 4.2. die Newloginbox integriert und dort sind dann eventuell auch mehrere PIDs möglich - ich kann aber leider (NOCH) nicht migrieren. Eventuell kann sich ja noch mal jemand hier bestätigen kann, dass ab 4.2. mehrere PIDs "Out of the Box" möglich sind.

Den Typo3 Admins, die TemplaVoila einsetzen sei gesagt: am besten das Typoscript per externe Template Extension einbinden (z.B. personalisierung.ts.php) und die letzte Zeile im Typoscript von lamina durch

lib.loginBox < temp.loginBox

ersetzen. Dann in TemplaVoila ein neues DS/TO Paar anlegen (als Flexibles Inhaltselement kann es flexibel verwenden) und lib.loginBox an ein Element mit vom Typ TypoScript Object Path binden.