TYPO3.CMS 6.2 Extension entwickeln: Unterschied zwischen den Versionen

Aus Vosp.info
Wechseln zu:Navigation, Suche
(settings)
Zeile 11: Zeile 11:
 
echo '</pre>';
 
echo '</pre>';
 
</source>
 
</source>
 +
* http://stackoverflow.com/questions/30839907/how-to-get-typo3-settings-in-the-utility-files
  
 
== extension sf_register um eine Spalte erweitern ==
 
== extension sf_register um eine Spalte erweitern ==

Version vom 20. September 2015, 16:31 Uhr

Schnipsel

settings

$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Tx_Extbase_Object_ObjectManager');    
$configurationManager = $objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManager');
$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>';

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