TYPO3.CMS 6.2 Extension entwickeln: Unterschied zwischen den Versionen

Aus Vosp.info
Wechseln zu:Navigation, Suche
(Configuration/TCA/Overrides/fe_users.php)
(ext_conf_template.txt - Erweiterung Einstellungens Variablen)
 
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
== Schnipsel ==
 +
=== Konfigurationen abfangen ===
 +
==== settings ====
 +
 +
<source lang="php">
 +
 +
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Extbase_Object_ObjectManager');   
 +
 +
$configurationManager = $objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager');
 +
 +
// CONFIGURATION_TYPE_FULL_TYPOSCRIPT
 +
 +
$CONFIGURATION_TYPE_FULL_TYPOSCRIPT = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
 +
 +
echo '<pre>';
 +
print_r($CONFIGURATION_TYPE_FULL_TYPOSCRIPT['plugin.']['tx_sfregister.']);
 +
echo '</pre>';
 +
echo '<pre>';
 +
print_r($CONFIGURATION_TYPE_FULL_TYPOSCRIPT['plugin.']['tx_extensionname.']);
 +
echo '</pre>';
 +
 +
// CONFIGURATION_TYPE_SETTINGS
 +
 +
$CONFIGURATION_TYPE_SETTINGS = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);
 +
echo '<pre>';
 +
print_r($CONFIGURATION_TYPE_SETTINGS);
 +
echo '</pre>';
 +
 +
</source>
 +
* http://stackoverflow.com/questions/30839907/how-to-get-typo3-settings-in-the-utility-files
 +
 +
 +
=== ext_conf_template.txt - Erweiterung Einstellungens Variablen ===
 +
<source lang=php>
 +
$confArray = unserialize($GLOBALS["TYPO3_CONF_VARS"]["EXT"]["extConf"]['extensionname']);
 +
</source>
 +
 
== extension sf_register um eine Spalte erweitern ==
 
== 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
 
'''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
+
'''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!!!!!
 +
 
 +
'''Source Code''' [[Datei:Ncregisterplus.vosp.0.0.1.tar.gz]]  Stand 19.09.2015 17:00
  
 
'''Grundlage''' ist typo362 [6.2.15] mit Distribution ''Aimeos web shop distribution''
 
'''Grundlage''' ist typo362 [6.2.15] mit Distribution ''Aimeos web shop distribution''
Zeile 65: Zeile 106:
  
 
=== Configuration/TCA/Overrides/fe_users.php ===
 
=== 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
+
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
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
Zeile 123: Zeile 164:
 
damit Typo3 jetzt auch schön auf die Datenbank zu greifen kann ....  
 
damit Typo3 jetzt auch schön auf die Datenbank zu greifen kann ....  
 
==== Classes/Domain/Model/FrontendUser.php ====
 
==== Classes/Domain/Model/FrontendUser.php ====
 +
* Verknüpfung siehe unten [[TYPO3.CMS_6.2_Extension_entwickeln#ext_typoscript_setup.txt]]
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
Zeile 170: Zeile 212:
  
 
</source>
 
</source>
 +
 
==== Classes/Domain/Repository/FrontendUserRepository.php ====
 
==== Classes/Domain/Repository/FrontendUserRepository.php ====
 
<source lang=php>
 
<source lang=php>
Zeile 185: Zeile 228:
 
</source>
 
</source>
  
===  ===
+
=== Resources/Private/ ===
<source lang=php>
+
==== Resources/Private/Language/locallang.xlf ====
 +
'''Achtung: _source''' muss natürlich '''source''' heißen!!!!!
 +
<source lang=xml>
 +
<?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>
 +
</source>
 +
 
 +
'''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
 +
 
 +
<source lang=bash>
 +
cp typo3conf/ext/sf_register/Resources/Private/Templates/FeuserCreate/*.html typo3conf/ext/ncregisterplus/Resources/Private/Templates/FeuserCreate/
 +
</source>
 +
 
 +
'''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
 +
* Verknüpfung sie unten [[TYPO3.CMS_6.2_Extension_entwickeln#ext_typoscript_setup.txt]]
 +
 
 +
===== Resources/Private/Templates/FeuserCreate/Form.html =====
 +
 
 +
<source lang=xml>
 +
<!-- 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>&nbsp;</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>
 +
 
 +
</source>
 +
 
 +
=== ext_typoscript_setup.txt ===
 +
Hier wird jetzt noch unser neuer Code per TypoScript dem System mitgeteilt:
 +
* Templates müssen ersetzt werden:
 +
** dem sf_register Frontend Plugin wird nun hier mitgeteilt das es neue Templates gibt!!!
 +
** siehe [[TYPO3.CMS_6.2_Extension_entwickeln#Resources/Private/Templates/FeuserCreate/ - Templates]]
 +
* 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
 +
** siehe [[TYPO3.CMS_6.2_Extension_entwickeln#Classes/Domain/Model/FrontendUser.php]]
 +
<source lang=TypoScript>
 +
// 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
 +
                }
 +
            }
 +
        }
 +
    }
 +
}
 
</source>
 
</source>

Aktuelle Version vom 20. September 2015, 18:40 Uhr

Schnipsel

Konfigurationen abfangen

settings

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Extbase_Object_ObjectManager');    

$configurationManager = $objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager');

// CONFIGURATION_TYPE_FULL_TYPOSCRIPT

$CONFIGURATION_TYPE_FULL_TYPOSCRIPT = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);

echo '<pre>';
print_r($CONFIGURATION_TYPE_FULL_TYPOSCRIPT['plugin.']['tx_sfregister.']);
echo '</pre>';
echo '<pre>';
print_r($CONFIGURATION_TYPE_FULL_TYPOSCRIPT['plugin.']['tx_extensionname.']);
echo '</pre>';

// CONFIGURATION_TYPE_SETTINGS

$CONFIGURATION_TYPE_SETTINGS = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);
echo '<pre>';
print_r($CONFIGURATION_TYPE_SETTINGS);
echo '</pre>';


ext_conf_template.txt - Erweiterung Einstellungens Variablen

$confArray = unserialize($GLOBALS["TYPO3_CONF_VARS"]["EXT"]["extConf"]['extensionname']);

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!!!!!

Source Code Datei:Ncregisterplus.vosp.0.0.1.tar.gz Stand 19.09.2015 17:00

Grundlage ist typo362 [6.2.15] mit Distribution Aimeos web shop distribution

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
  • Verknüpfung sie unten TYPO3.CMS_6.2_Extension_entwickeln#ext_typoscript_setup.txt
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>&nbsp;</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:

// 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
                }
            }
        }
    }
}