TYPO3.CMS 6.2 Extension entwickeln
Inhaltsverzeichnis
extension sf_register um eine Spalte erweitern
Aufgabe ist sf_register zu erweitern, so das es eine weitere Spalte in der Tabelle fe_users gibt, die im Frontend (Beim Registrieurungsprozess) und im Backend angezeigt wird
Achtung
- um hier nicht zu viel zu dokumentieren ist ausschließlich der Registrierungsprozess abgebildet, nicht das Bearbeiten eines Users, dies muss analog umgesetzt werden
- _source muss natürlich source heißen!!!!!
Grundlage ist typo362 [6.2.15] mit Distribution Aimeos web shop distribution
- TYPO3.CMS_6.2_Extensions#sf_register installieren
ext_emconf.php
Das Übliche, wichtig ist natürlich hier anzugeben das sf_register Voraussetzung ist
<?php
$EM_CONF[$_EXTKEY] = array(
'title' => 'registerplus',
'description' => '',
'category' => 'plugin',
'author' => 'netz.coop eG',
'author_email' => 'code[at]netz.coop',
'state' => 'alpha',
'internal' => '',
'uploadfolder' => '0',
'createDirs' => '',
'clearCacheOnLoad' => 0,
'version' => '0.0.1',
'constraints' => array(
'depends' => array(
'typo3' => '6.2',
'sf_register' => '6.2.7'
),
'conflicts' => array(
),
'suggests' => array(
),
),
);
ext_tables.sql
Die Spalte als Sql
#
# Table structure for table 'fe_users'
#
CREATE TABLE fe_users (
agency varchar(50) DEFAULT '',
);
ext_tables.php
hier dem TCA mitteilen das es eine neue Spalte zu zeigen gibt
<?php
if (!defined('TYPO3_MODE')) {
die('Access denied.');
}
$TCA['fe_users']['interface']['showRecordFieldList'] .= ',agency';
Configuration/TCA/Overrides/fe_users.php
mit TCA Typo3 mitteilen um was es sich für eine Spalte handelt, zusätzlich schon mal die Backend Sprachdatei (locallang_be.xml) angeben, damit ist für die Backendansicht eigentlich auch schon alles getan und siehe da wenn mensch sich nun ein Frontend Benutzer im Backend anschaut, gibts schon unser neues Feld
<?php
defined('TYPO3_MODE') or die();
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
$temporaryColumns = array(
'agency' => array(
'exclude' => 0,
'label' => 'LLL:EXT:ncregisterplus/Resources/Private/Language/locallang_be.xml:fe_users.agency',
'config' => array(
'type' => 'input',
'size' => '20',
'max' => '50',
'eval' => 'trim',
)
),
);
ExtensionManagementUtility::addTCAcolumns('fe_users', $temporaryColumns);
ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'agency', '', 'after:username');
ExtensionManagementUtility::addToAllTCAtypes(
'fe_users', '--div--;LLL:EXT:ncregisterplus/Resources/Private/Language/locallang_be.xml:fe_users.div.registration,
agency'
);
Resources/Private/Language/locallang_be.xlf
Achtung: _source muss natürlich source heißen!!!!!
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!--
locallang_be - relevant fürs Backend
netz.coop eG
-->
<xliff version="1.0">
<file source-language="de" datatype="plaintext" original="messages" date="2015-09-18T11:47:32Z" product-name="ncregisterplus">
<header/>
<body>
<trans-unit id="fe_users.div.registration" xml:space="preserve">
<_source>Registration</_source>
</trans-unit>
<trans-unit id="fe_users.agency" xml:space="preserve">
<_source>Abteilung</_source>
</trans-unit>
</body>
</file>
</xliff>
Achtung: _source muss natürlich source heißen!!!!!
Classes/Domain/...
damit Typo3 jetzt auch schön auf die Datenbank zu greifen kann ....
Classes/Domain/Model/FrontendUser.php
<?php
namespace Nc\Ncregisterplus\Domain\Model;
/* * *************************************************************
* Copyright notice
*
* (c) 2015 netz.coop eG <code@netz.coop>
* All rights reserved
*
* ************************************************************* */
/**
* An extended frontend user with more attributes
*/
class FrontendUser extends \Evoweb\SfRegister\Domain\Model\FrontendUser {
/**
* Agency
*
* @var string
*/
protected $agency;
/**
* Getter for agency
*
* @return string
*/
public function getAgency() {
return $this->agency;
}
/**
* Setter for agency
*
* @param string $agency
* @return void
*/
public function setAgency($agency) {
$this->agency = $agency;
}
}
Classes/Domain/Repository/FrontendUserRepository.php
<?php
namespace Nc\Ncregisterplus\Domain\Repository;
/**
* A repository for feusers
*/
class FrontendUserRepository extends \Evoweb\SfRegister\Domain\Repository\FrontendUserRepository {
}
Resources/Private/
Resources/Private/Language/locallang.xlf
Achtung: _source muss natürlich source heißen!!!!!
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!--
locallang - relevant fürs Frontend
netz.coop eG
-->
<xliff version="1.0">
<file source-language="en" datatype="plaintext" original="messages" date="2015-09-18T11:47:32Z" product-name="ncregisterplus">
<header/>
<body>
<trans-unit id="agency" xml:space="preserve">
<_source>Agency</_source>
</trans-unit>
</body>
</file>
</xliff>
Achtung: _source muss natürlich source heißen!!!!!
Resources/Private/Templates/FeuserCreate/ - Templates
jetzt muss nur noch das Frontend angepasst werden, also werden wir jetzt als Vorlage schon mal die Templates von sf_register zu uns kopieren
cp typo3conf/ext/sf_register/Resources/Private/Templates/FeuserCreate/*.html typo3conf/ext/ncregisterplus/Resources/Private/Templates/FeuserCreate/
Achtung
- Wir werden hier jetzt nur das Form.html Template anpassen; Preview.html sollte natürlich auch angepasst werden!!!
- Resources/Private/Templates/FeuserEdit/Form.html wird wie oben schon angedeutet erstmal einfach ignoriert
Resources/Private/Templates/FeuserCreate/Form.html
<!-- der namespace bleibt genauso wie er ist, denn wir greifen ja von unserer neuen Extension auf die sf_register ViewHelper drauf zu -->
{namespace register=Evoweb\SfRegister\ViewHelpers}
<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:register="http://www.evoweb.de/ns/SfRegister/ViewHelpers"
xmlns:f="http://typo3.org/ns/TYPO3/Fluid/ViewHelpers">
<head>
<title>Create form template of registration</title>
</head>
<body>
<f:layout name="Default" />
<f:section name="Main">
<f:form action="preview" name="user" object="{user}" enctype="multipart/form-data">
<f:render partial="FormErrors" section="Main" arguments="{for: 'user'}" />
<f:render partial="FieldError" section="Main" arguments="{field: 'uid'}" />
<dl>
<dt>
<f:translate key="username" />
<f:render partial="Required" section="Main" arguments="{field: 'username'}" />
</dt>
<dd>
<f:render partial="FieldError" section="Main" arguments="{for: 'user', field: 'username'}" />
<f:form.textfield property="username" />
</dd>
<!-- .......... jetzt kommt eigentlich nur unser neues Feld dazu ..... -->
<dt>
<!-- hier geben wir jetzt unsere Frontend Sprach Datei an -->
<f:translate key="LLL:EXT:ncregisterplus/Resources/Private/Language/locallang.xml:agency" />
<f:render partial="Required" section="Main" arguments="{field: 'agency'}" />
</dt>
<dd>
<f:render partial="FieldError" section="Main" arguments="{for: 'user', field: 'agency'}" />
<f:form.textfield property="agency" />
</dd>
<!-- .......... alles andere was da noch kommt ..... -->
<dt> </dt>
<dd>
<f:form.submit class="submit" value="{f:translate(key:'submit_create')}" />
</dd>
</dl>
</f:form>
<div class="mandatory">
<f:translate key="info_mandatory_fields" htmlEscape="false" />
</div>
</f:section>
</body>
</html>
ext_typoscript_setup.txt
Hier wird jetzt noch unser neuer Code per TypoScript dem System mitgeteilt:
- Templates müssen ersetzt werden:
- Evoweb\SfRegister\Domain\Model\FrontendUser darf jetzt nicht mehr verwendet werden, sondern es soll unsere neue abgeleitete Klasse Nc\Ncregisterplus\Domain\Model\FrontendUser verwendet werden
// https://docs.typo3.org/typo3cms/extensions/sf_register/Templating/Index.html
plugin.tx_sfregister.view.templateRootPaths.1 = EXT:ncregisterplus/Resources/Private/Templates/
config.tx_extbase {
objects {
Evoweb\SfRegister\Domain\Model\FrontendUser {
className = Nc\Ncregisterplus\Domain\Model\FrontendUser
}
}
persistence {
classes {
Nc\Ncregisterplus\Domain\Model\FrontendUser {
mapping {
tableName = fe_users
}
}
}
}
}