Hallo zusammen,
Ich habe genau das selbe Problem gehabt und nach reichlicher Recherche und ausprobieren es jetzt mal durch einen Hook realisiert. Allerdings bin ich doch noch sehr frisch in dieser Richtung und es könnte sicherlich besser gehen ;-) Also Kommentare gerne immer.
Ich habe im Modul-Ordner (Pfad: [contaoordner]/system/modules) einen neuen Ordner erstellt (myNewUserHook). In diesem Ordner habe ich einen neuen Ordner (config) erstellt und in diesem Ordner ein .php-Skript mit dem Namen config.php (Pfad: [contaoordner]/system/modules/myNewUserHook/config/config.php) hinterlegt.
Code:
<?php
$GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyNewUserClass', 'myCreateNewUser');
?>
In dem übergeordnetem Ordner (Pfad: [contaoordner]/system/modules/myNewUserHook) habe ich dann ein weiteres .php-Skript erstellt. Der Name lautet hier wie der Klassenname (wird aufgerufen) im obigen Code "MyNewUserClass" (MyNewUserClass.php).
Code:
<?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);
}
}
?>
Dieser Code stellt bisher nur die Felder Vorname und Nachname auf öffentlich. Ich habe diesen binär-Code über den phpmyadmin aus einem bereitsbestehendes Mitglied aus dem Feld "publicFields" ausgelesen und hier eingebaut. Ich weiß jetzt nicht, ob dieser binär-Code zufällig für jede Datenbank neu erstellt wird, oder ob er für jede beliebige Datenbank diese Felder öffentlich setzt.
Also wäre der Weg zum eigenen Hook:
1.) Man erstellt ein Testmitglied.
2.) Man stellt im Backend für dieses Mitglied die gewünschten öffentlichen Felder ein.
3.) Man öffnet den phpmyadmin und sucht in der Tabelle "tl_member" das Feld "publicFields" für dieses Testmitglied.
- Dort sollte ein BLOB-Wert zu finden sein. Diesen kann man als .bin Datei auf dem lokalen Computer speichern und diese dann mit einem Texteditor auslesen.
4.) [Datenbankname] natürlich für die eigene Datenbank anpassen.
5.) Den ausgelesen binär-Code in den folgenden Code für [Platzhalter] einfügen und alles speichern.
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);
}
}
?>
Dieser Hook wird nach dem Anlegen eines neuen Mitglieds ausgelöst und setzt automatisch für dieses neue Mitglied (wegen $intID) die gewünschten Felder auf öffentlich.
Ich hoffe, diese Lösung passt für euch.
Lieben Gruß,
Sebi
Lesezeichen