.. include:: ../../Includes.rst.txt .. include:: Images.txt .. _newfields: Adding new fields to fe_users with your own extension ----------------------------------------------------- Picture ^^^^^^^ |extendFields| Add new Fields to the Registration-/Editform Basics ^^^^^^ - Create a new extension for the new fields - Create ext_tables.sql and Configuration/TCA/Overrides/fe_users.php for adding one or more new fields to fe_users - Add TSConfig file to add one or more fields to the field selection in femanager flexform and include it - Use TypoScript to add your own partials folder and add the templates for your new fields - Create your own user model with getter/setter for your new fields that extends the user model from femanager - Override the user model in your ext_localconf.php See https://github.com/in2code-de/femanagerextended for an example extension how to extend femanager with new fields and validation methods Step by Step ^^^^^^^^^^^^ Add new fields to the flexform """""""""""""""""""""""""""""" |newFields| Extend Fieldselection in Flexform Add some Page-TSConfig to extend the selection: .. code-block:: typoscript tx_femanager { flexForm { new { addFieldOptions { twitterId = Twitter ID skypeId = Skype ID somethingElse = LLL:EXT:yourextension/Resources/Private/Language/locallang_be.xlf:custom } } edit < tx_femanager.flexForm.new } } Modify the partial folder """"""""""""""""""""""""" “twitterId” (see TSConfig) means that femanager searches for a partial TwitterId.html to render the field in the form. So you have to copy the folder EXT:femanager/Resources/Private/Partials (e.g.) to fileadmin/Partials and set the new partial path via TypoScript Constants (see exmple below). In addition you have to add the new Partials files. .. code-block:: typoscript plugin.tx_femanager.view.partialRootPaths.100 = EXT:yourextension/Resources/Private/Partials/ Example file fileadmin/Partials/Fields/TwitterId.html: .. code-block:: html
ext_tables.sql """""""""""""" Example SQL file in your extension which extends fe_users with your new fields: .. code-block:: sql CREATE TABLE fe_users ( twitter_id varchar(255) DEFAULT '' NOT NULL, skype_id varchar(255) DEFAULT '' NOT NULL ); Configuration/TCA/Overrides/fe_users.php """""""""""""""""""""""""""""""""""""""" Example Configuration/TCA/Overrides/fe_users.php file: .. code-block:: php $GLOBALS['TCA']['fe_users']['ctrl']['type'] = 'tx_extbase_type'; $tmpFeUsersColumns = [ 'twitter_id' => [ 'exclude' => 1, 'label' => 'LLL:EXT:yourextension/Resources/Private/Language/locallang_db.xlf:' . 'tx_yourextension_domain_model_user.twitter_id', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim', ], ], 'skype_id' => [ 'exclude' => 1, 'label' => 'LLL:EXT:yourextension/Resources/Private/Language/locallang_db.xlf:' . 'tx_yourextension_domain_model_user.skype_id', 'config' => [ 'type' => 'input', 'size' => 30, 'eval' => 'trim', ], ], 'tx_extbase_type' => [ 'config' => [ 'type' => 'input', 'default' => '0', ], ], ]; \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $tmpFeUsersColumns); \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'twitter_id, skype_id'); Own User Model """""""""""""" Example Model User.php which extends to the default femanager Model: .. code-block:: php namespace YourVendor\YourExtension\Domain\Model; use TYPO3\CMS\Extbase\Domain\Model\Category; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; use In2code\Femanager\Domain\Model\User as FemanagerUser; class User extends FemanagerUser { /** * twitterId */ protected string $twitterId; /** * skypeId */ protected string $skypeId; /** * Returns the twitterId */ public function getTwitterId(): string { return $this->twitterId; } /** * Sets the twitterId */ public function setTwitterId(string $twitterId): void { $this->twitterId = $twitterId; } /** * Returns the skypeId */ public function getSkypeId(): string { return $this->skypeId; } /** * Sets the skypeId */ public function setSkypeId(string $skypeId): void { $this->skypeId = $skypeId; } } Include model with TYPO3 12.4.x """"""""""""""""""""""""""""""""""""""""""""""""""" Configuration/Extbase/Persistence/Classes.php: .. code-block:: php return [ \YourVendor\YourExtension\Domain\Model\User::class => [ 'tableName' => 'fe_users', 'recordType' => 0, ], ]; ext_localconf.php: .. code-block:: php $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\In2code\Femanager\Domain\Model\User::class] = [ 'className' => \YourVendor\YourExtension\Domain\Model\User::class, ]; Include own controllers with TYPO3 12.4.x (with XCLASS) """"""""""""""""""""""""""""""""""""""""""""""""""""""" You can override the whole controller with XCLASS. This is not the best solution but it works. XCLASS Limitations: https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/Xclasses/Index.html#xclasses-limitations ext_localconf.php: .. code-block:: php $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][\In2code\Femanager\Controller\NewController::class] = [ 'className' => \YourVendor\YourExtension\Controller\NewController::class, ];