TYPO3.CMS 6.2 Extension entwickeln: Unterschied zwischen den Versionen

Aus Vosp.freesn.de
Zur Navigation springen Zur Suche springen
F (Diskussion | Beiträge)
F (Diskussion | Beiträge)
 
(28 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== extension sf_register (inkl. fe_users) mit neuer extension um eine Spalte erweitern ==
== Schnipsel ==
=== Konfigurationen abfangen ===
==== settings ====


'''Aufgabe''' ist sf_register zu erweitern so das es eine weitere Spalte in der Tabelle fe_users gibt
<source lang="php">


'''Grundlage''' ist typo362 [6.2.15] mit Distribution ''Aimeos web shop distribution''
$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>';


* [[TYPO3.CMS_6.2_Extensions#sf_register]] installieren
</source>
* http://stackoverflow.com/questions/30839907/how-to-get-typo3-settings-in-the-utility-files




=== ext_emconf.php ===
=== ext_conf_template.txt - Erweiterung Einstellungens Variablen ===
<source lang=php>
<source lang=php>
$confArray = unserialize($GLOBALS["TYPO3_CONF_VARS"]["EXT"]["extConf"]['extensionname']);
</source>


</source>
== 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''
 
* [[TYPO3.CMS_6.2_Extensions#sf_register]] installieren


=== ext_emconf.php ===
=== ext_emconf.php ===
Das Übliche, wichtig ist natürlich hier anzugeben das sf_register Voraussetzung ist
<source lang=php>
<source lang=php>
<?php
<?php
Zeile 43: Zeile 81:
</source>
</source>


=== ext_emconf.php ===
=== ext_tables.sql ===
Die Spalte als Sql
<source lang=sql>
#
# Table structure for table 'fe_users'
#
CREATE TABLE fe_users (
agency varchar(50) DEFAULT '',
);
</source>
 
 
=== ext_tables.php ===
hier dem TCA mitteilen das es eine neue Spalte zu zeigen gibt
<source lang=php>
<source lang=php>
<?php
if (!defined('TYPO3_MODE')) {
die('Access denied.');
}


$TCA['fe_users']['interface']['showRecordFieldList'] .= ',agency';
</source>
</source>




=== ext_emconf.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 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
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'
);
</source>
=== Resources/Private/Language/locallang_be.xlf ===
'''Achtung: _source''' muss natürlich '''source''' heißen!!!!!
<source lang=xml>
<?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>
</source>
</source>


'''Achtung: _source''' muss natürlich '''source''' heißen!!!!!


=== ext_emconf.php ===
=== Classes/Domain/... ===
damit Typo3 jetzt auch schön auf die Datenbank zu greifen kann ....
==== Classes/Domain/Model/FrontendUser.php ====
* Verknüpfung siehe unten [[TYPO3.CMS_6.2_Extension_entwickeln#ext_typoscript_setup.txt]]
<source lang=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;
    }
 
}
 
</source>
 
==== Classes/Domain/Repository/FrontendUserRepository.php ====
<source lang=php>
<source lang=php>
<?php
namespace Nc\Ncregisterplus\Domain\Repository;
/**
* A repository for feusers
*/
class FrontendUserRepository extends \Evoweb\SfRegister\Domain\Repository\FrontendUserRepository {
   
}
</source>
=== Resources/Private/ ===
==== 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
                }
            }
        }
    }
}