Danke ich werde das einmal so testen ...
YES! Das funktioniert perfekt so. Jetzt ist es eine runde Sache.
Vielen Dank für den Code, Tim
Ankündigung
Einklappen
Keine Ankündigung bisher.
Geographische Daten in tl_member bei der registrierung erzeugen
Einklappen
X
-
Mein Feld heisst "geolocation"
dcaconfig.php: Die optionalen Felder für das Reg.Modul freischalten und den normalen save_callback des Feldes im Frontend unterbinden. -> würde nur Fehler produzieren, weil das Reg. Modul nicht ausreichend Daten übergibt an den Hook.
Code:$strField = 'geolocation'; foreach(array('city','street','country','zipcode') as $k) { $GLOBALS['TL_DCA']['tl_member']['fields'][$strField.'_'.$k]['eval']['feEditable'] = true; $GLOBALS['TL_DCA']['tl_member']['fields'][$strField.'_'.$k]['eval']['feViewable'] = true; $GLOBALS['TL_DCA']['tl_member']['fields'][$strField.'_'.$k]['eval']['feGroup'] = 'personal'; } if (\TL_MODE == 'FE') { unset($GLOBALS['TL_DCA']['tl_member']['fields'][$strField]['save_callback']); }
Code:// createNewUser Hook $GLOBALS['TL_HOOKS']['createNewUser'][] = array('myClass','createNewUserCallback'); if( !class_exists('myClass') ) { class myClass { public function createNewUserCallback($intUser, $arrData) { $strField = 'geolocation'; // Adressdaten aus Reg.Formular $arrAddress = array(); $arrAddress[] = $arrData[$strField.'_street'] ?? ''; $arrAddress[] = $arrData[$strField.'_zipcode'] ?? ''; $arrAddress[] = $arrData[$strField.'_city'] ?? ''; $arrAddress[] = $arrData[$strField.'_country'] ?? ''; // Geo attribute $objGeolocationAttributes = new \PCT\CustomElements\Attributes\Geolocation(); // Koordinaten ermitteln aus Adressdaten $arrCoords = $objGeolocationAttributes->findCoordinates( implode(',', \array_filter($arrAddress) )); if( !empty($arrCoords) ) { \Contao\Database::getInstance()->prepare("UPDATE tl_member %s WHERE id=?")->set( array($strField=> implode(',',$arrCoords) ) )->execute($intUser); } } } }
Einen Kommentar schreiben:
-
Moin Tim,
wenn du dafür Zeit hättest wäre ich dir sehr dankbar. Ich versuche das dann einmal nachzuvollziehen. Könnte mir vorstellen das sich der ein oder andere Nutzer dieser Forums auch darüber freuen würde und das nicht nur für mich eingesetzt würde. Danke!
Gruß Burkhard
Einen Kommentar schreiben:
-
Zitat von Burkhard Beitrag anzeigenHallo,
ich meine tl_member mit einem Feld vom Attributtyp "Geographische Daten" erweitert.
Wenn ich nun neue Mitglieder im Backend anlege und Straße, ZIP und City eingebe, werden die Geo-Koordinaten beim Mitglied im neu angelegten Feld beim Speichern erzeugt. So weit läuft alles perfekt.
Anders ist es, wenn das neue Mitglied nicht im Backend angelegt wird, sondern über das Registrieren Modul im Frontend der Website. Hier werden alle Daten sauber erfasst, jedoch werden die Geo-Koordinaten nicht erzeugt (erst dann, wenn das Mitglied einmal im Backend geöffnet und gespeichert wird).
Frage:
kann man die Erzeugung der Geo-Koordinaten auch mit dem Absenden des Registrierungsformulars "anstoßen"?
Wenn ja, wie geht das?
Falls jemand einen Hinweis hat ...
Du kannst den createNewUser Hook nutzen. Der übergibt alle übermittelten Informationen und den Datensatz des frischen Mitglieds. Die Koordinaten-Ermittlung kannst du direkt aus dem save_callbacks im Geolocation Attribut nutzen bzw. die öffentliche Methode findCoordinates des Geolocation Attributs.
Nach der Ermittlung das Feld für den jeweiligen Mitglieder-Datensatz speichern.
Ich kann da morgen was basteln. Heute schaffe ich es nicht mehr.Zuletzt geändert von Tim; 23.05.2023, 14:39.
Einen Kommentar schreiben:
-
Geographische Daten in tl_member bei der registrierung erzeugen
Hallo,
ich meine tl_member mit einem Feld vom Attributtyp "Geographische Daten" erweitert.
Wenn ich nun neue Mitglieder im Backend anlege und Straße, ZIP und City eingebe, werden die Geo-Koordinaten beim Mitglied im neu angelegten Feld beim Speichern erzeugt. So weit läuft alles perfekt.
Anders ist es, wenn das neue Mitglied nicht im Backend angelegt wird, sondern über das Registrieren Modul im Frontend der Website. Hier werden alle Daten sauber erfasst, jedoch werden die Geo-Koordinaten nicht erzeugt (erst dann, wenn das Mitglied einmal im Backend geöffnet und gespeichert wird).
Frage:
kann man die Erzeugung der Geo-Koordinaten auch mit dem Absenden des Registrierungsformulars "anstoßen"?
Wenn ja, wie geht das?
Falls jemand einen Hinweis hat ...Stichworte: -
Einen Kommentar schreiben: