Für die Benutzerregistrierung nutze ich die Extension femanager, die sich hervorragend konfigurieren lässt.
Im Extension Manual ist beschrieben, wie man die static_info_tables Tabellen als Quelle für die Länderauswahl einsetzen kann. Das funktioniert erstmal nur im Frontend. Wenn man die Templates so anpasst, wie im Manual beschrieben, dann landet der 3-stellige Iso Code des Landes in der Datenbank.
Nun fände ich es auch schön, wenn die entsprechende Auswahl auch im Backend benutzt werden würde. Und so kann man es konfigurieren:
Als erstes muss das TCA der fe_users Tabelle entsprechend umkonfiguriert werden. Dazu in einer eigenen Extension entweder in ext_tables.php oder (besser) in Configuration/Tca/Overrides/fe_users.php folgenden Code einfügen. Damit wird die Länderauswahl mittels itemProcFunc erstellt. In diesem Fall kann man leider nicht einfach ‚foreign_table‘ verwenden, da als Key automatisch die uid verwendet wird.
$GLOBALS['TCA']['fe_users']['columns']['country']['config'] = [ 'type' => 'select', 'renderType' => 'selectSingle', 'itemsProcFunc' => 'My\Extension\UserFunc\TcaProcFunc->staticInfoTablesItems', 'maxitems' => 1 ];
Dann legt man die Klasse TcaProcFunc in Classes/UserFunc an mit folgendem Inhalt:
<?php namespace My\Extension\UserFunc; use TYPO3\CMS\Extbase\Reflection\ObjectAccess; class TcaProcFunc { /** * @param array $config * @return array */ public function staticInfoTablesItems($config) { $key = 'isoCodeA3'; $value = 'shortNameLocal'; $sortbyField = 'isoCodeA3'; $sorting = 'asc'; $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager'); $countryRepository = $objectManager->get('SJBR\StaticInfoTables\Domain\Repository\CountryRepository'); $countries = $countryRepository->findAllOrderedBy($sortbyField, $sorting); $countryList = []; $countryList[] = ["", ""]; foreach ($countries as $country) { /** @var $country \SJBR\StaticInfoTables\Domain\Model\Country */ $countryList[] = [ObjectAccess::getProperty($country, $value), ObjectAccess::getProperty($country, $key)]; } $config['items'] = $countryList; return $config; } }
Der Code der Function ist aus dem ViewHelper GetCountriesFromStaticInfoTablesViewHelper aus der Extension femanager geklaut 🙂
Neueste Kommentare