Mitgliederfelder automatisch öffentlich setzen
Aus Contao Community Documentation
betrifft | |
---|---|
Contao Version | ab 2.2 |
Unvollständiger Artikel: dieser Artikel ist noch nicht sauber bearbeitet.
Bitte erweitere ihn und entferne erst anschliessend diesen Hinweis. |
Inhaltsverzeichnis
Einleitung
Wenn man als Administrator die Mitgliederdaten in irgendeiner Weise auf seiner Seite ausgeben will, taucht schnell das Problem auf, dass man nicht vorbestimmen kann, dass bestimmte Felder (z.B. Vorname, Nachname) immer öffentlich sind. Das kann zum Nachteil werden, wenn die registrierten Mitglieder in den Personendaten die Felder nicht selbst öffentlich stellen können oder dürfen.
Mit diesem Hook lassen sich bestimmte (oder auch alle) Felder eines neuen Mitglieds nach der Registrierung automatisch auf öffentlich setzen.
Vorgehen
Um diese Funktion zu implementieren, gibt es folgendes Vorgehen.
Beispielmitglied
Um den später benötigten Code für die öffentlichen Felder herausfinden zu können, muss man ein Beispielmitglied erstellen, das später wieder gelöscht werden kann.
- Zunächst legt man im Backend ein neues Mitglied an, das als Beispiel für die öffentlichen Felder dient.
- Für dieses Mitglied setzt man nun die gewünschten Felder auf öffentlich.
Diese Einstellungen werden später für jedes neue Mitglied angewendet.
Ordnerstruktur
Dieser Lösungsansatz wurde durch den Hook createNewUser verwirklicht. Hierfür muss man im contao-Ordner neue Ordner anlegen.
- [contaoordner]/system/modules/myNewUserHook
- [contaoordner]/system/modules/myNewUserHook/config
In diese Ordner werden auch die folgenen Dateien angelegt.
Dateien und Code
- In dem eben angelegten Ordner config muss eine .php-Datei erstellt werden die config.php heißt und folgenen Code enthält:
<?php $GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyNewUserClass', 'myCreateNewUser'); ?>
Dieser Skript ruft die Klasse 'MyNewUserClass' und in dieser die Methode 'myCreateNewUser' auf. Diese muss nun erstellt werden.
- Im übergeordneten Ordner [contaoordner]/system/modules/myNewUserHook wird die Klasse angelegt, die später aufgerufen wird. Hierfür erstellt man die Datei MyNewUserClass.php-Datei mit folgenem Code:
<?php class MyNewUserClass extends Frontend { public function myCreateNewUser($intId, $arrData) { $sql = "UPDATE `[Datenbankname]`.`tl_member` SET `publicFields` = [Platzhalter] WHERE `tl_member`.`id` = $intId;"; mysql_query($sql); } } ?>
- Hierbei muss jetzt noch der [Datenbankname] an die entsprechende Datenbank angepasst werden.
- Außerdem muss noch der [Platzhalter] ersetzt werden. Den Wert hierfür muss jeder selber über den phpmyadmin herausfinden. Es handelt sich hierbei nämlich um einen binär-Code, der je nach gewählten öffentlichen Feldern (beim Beispielmitglied) erzeugt wird.
Code aus phpmyadmin holen
Vorgehen:
- Man öffnet den phpmyadmin, navigiert in die entsprechende Datenbank und sucht in der Tabelle tl_member
das Feld publicFields für das Beispielmitglied.
___________________________________
- Dort sollte ein BLOB-Wert zu finden sein. Diesen kann man als .bin-Datei auf dem lokalen Computer speichern.
Er enthält, welche Felder für dieses Mitglied öffentlich sind.
___________________________________
- Wenn man jetzt im phpmyadmin in der Tabelle tl_member auf "Bearbeiten" für das Beispielmitglied klickt,
kann man dort für das Feld publicFields diese eben gespeicherte Datei auswählen und ganz unten auf Speichern klicken.
Der phpmyadmin führt nun diesen Befehl aus und zeigt diesen auf der nächsten Seite oben an.
___________________________________
- Den kryptischen Code hinter `publicFields` = bis vor dem WHERE kopiert man nun.
- Diesen Code setzt man dann für [Platzhalter] ein.
Beispielcode
Ein Beispielcode, bei dem die Felder Vorname und Nachname auf öffentlich gesetzt werden:
//config.php <?php $GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyNewUserClass', 'myCreateNewUser'); ?>
//MyNewUserClass.php <?php class MyNewUserClass extends Frontend { public function myCreateNewUser($intId, $arrData) { $sql = "UPDATE `[Datenbankname]`.`tl_member` SET `publicFields` = 0x613a323a7b693a303b733a393a2266697273746e616d65223b693a313b733a383a226c6173746e616d65223b7d WHERE `tl_member`.`id` = $intId;"; mysql_query($sql); } } ?>
Anmerkung
- Diese Lösung wurde auf der contao-Version 2.11 erfolgreich getestet, sollte aber ab der Version 2.2 funktionieren, weil seit dieser Version der ceateNewUser-Hook Bestandteil des cores ist.