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 muß analog umgesetzt werden
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/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/
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>
<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>