Typo3 Extensions entwickeln: Unterschied zwischen den Versionen
F (Diskussion | Beiträge) (→Ausgangslage) |
F (Diskussion | Beiträge) (→Ausgangslage) |
||
Zeile 246: | Zeile 246: | ||
=== TCA Configuration Date === | === TCA Configuration Date === | ||
+ | typo3conf/ext/ncnetz/Configuration/TCA/Date.php | ||
<source lang="php"> | <source lang="php"> | ||
Zeile 257: | Zeile 258: | ||
'MM' => 'tx_ncnetz_date_tag_mm', | 'MM' => 'tx_ncnetz_date_tag_mm', | ||
// ... | // ... | ||
+ | ), | ||
+ | ), | ||
+ | ) | ||
+ | ); | ||
+ | </source> | ||
+ | |||
+ | == modifiziertes TCA Tag == | ||
+ | <source lang="php"> | ||
+ | $TCA['tx_ncnetz_domain_model_tag'] = array( | ||
+ | 'columns' => array( | ||
+ | 'dates' => array( | ||
+ | // ... | ||
+ | 'config' => array( | ||
+ | 'type' => 'select', | ||
+ | 'foreign_table' => 'tx_ncnetz_domain_model_date', | ||
+ | // 'MM' => 'tx_ncnetz_tag_date_mm', | ||
+ | 'MM' => 'tx_ncnetz_date_tag_mm', | ||
+ | 'MM_opposite_field' => 'tags', | ||
+ | // ... | ||
), | ), | ||
), | ), |
Version vom 5. August 2013, 10:40 Uhr
- Typo3 Extensions entwickeln @deprecated mit der alten pibase-Klasse
Inhaltsverzeichnis
- 1 Allgemein
- 2 extension_builder
- 2.1 Probleme
- 2.1.1 #1313855175: The action "new" (controller ..) is not allowed by this plugin. Please check Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php. (More information)
- 2.1.2 #1316104317: The default controller can not be determined. Please check for Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php. (More information)
- 2.1 Probleme
- 3 Hello world Extensions mit extbase und fluid
- 4 mm - Relationen zwischen Models
- 5 Probleme
- 6 Quellen
Allgemein
grundsätzlich wichtig ist zu wissen, das die Namensgebung hier einiges ausmacht und sich vieles nur vom System durch die Namen aufschlüsseln läßt.
- in Eigenschaften von Klassen ($this->eigenschaft) bzw Tabellenspalten keine _Unterstriche_ und Großbuchstaben benutzen
extension_builder
extension_builder installieren und nutzen ;) kann viel Schreibarbeit und Flüchtigkeitsfehler tilgen
lose Notizen
- Vererbung innerhalb des Projekts geht nur in dem mensch die noch nicht fertige Extension abspeichert und installiert, danach wieder das Projekt laden und nun vererben. ... Aber aufpassen mit dem richtigen Klassennamen
- Extend existing model class: Tx_EXTENSIONNAME_Domain_Model_MODELNAME
Probleme
#1313855175: The action "new" (controller ..) is not allowed by this plugin. Please check Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php. (More information)
- ist der controller und die actino in der ext_localconf.php eingetragen
- ist der controller und die action im flexform drinnen
- 'extensionname'/Configuration/FlexForms/flexform_'extensionname'.xml
- im zweifel plugin im typo3 backend deaktivieren und neu einbinden, bzw neu konfigurieren
- durch flexform änderungen gehen informationen verloren !!!!
#1316104317: The default controller can not be determined. Please check for Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php. (More information)
#1316104317: The default controller can not be determined. Please check for Tx_Extbase_Utility_Extension::configurePlugin() in your ext_localconf.php. (More information) Tx_Extbase_MVC_Exception thrown in file /var/www/typo3/typo3_src-4.7.7/typo3/sysext/extbase/Classes/MVC/Web/RequestBuilder.php in line 185.
Das Domain Object ist ein aggregate root Objekt!
- Domain objects setting
- Is aggregate root: aktivieren
Hello world Extensions mit extbase und fluid
- Grundlagen: Typo3 Flow
- Vorraussetzung: Installation der Extension: extbase und fluid
- Extensionname des Beispiels: nctestitflow
ext_emconf.php
Die grundsätzlichen Informationen für die Extension --- wichtig wären hier die Abhängigkeiten zu den extension extbase und fluid!!
ext_emconf.php
<?php
$EM_CONF[$_EXTKEY] = array(
'title' => 'nc testit flow',
'description' => 'nc test it flow description',
'category' => 'fe',
'author' => 'frederick',
'author_email' => 'frederik [at] netz [dot] coop',
'shy' => '',
'dependencies' => '',
'conflicts' => '',
'priority' => '',
'module' => '',
'state' => 'alpha',
'internal' => '',
'uploadfolder' => 0,
'createDirs' => '',
'modify_tables' => '',
'clearCacheOnLoad' => 1,
'lockType' => '',
'author_company' => '',
'version' => '0.0.0',
'constraints' => array(
'depends' => array(
/**
* wichtig da die extbase und fluid extension unbedingt vorhanden sein müssen!
*/
'php' => '5.2.0-0.0.0',
'typo3' => '4.3.dev-0.0.0',
'extbase'=> '1.0.1-0.0.0',
'fluid' => '1.0.1-0.0.0'
),
'conflicts' => array(
),
'suggests' => array(
),
),
);
?>
ext_localconf.php
Sagen welche Klasse und welche Funktion aufgerufen werden soll!!!!
ext_localconf.php
<?php
if (!defined ('TYPO3_MODE')) die ('Access denied.');
Tx_Extbase_Utility_Extension::configurePlugin(
$_EXTKEY,
'Pi1',
array(
'HelloWorldClass' => 'helloWorldFnc',
)
);
?>
Achtung:
- Schlüssel: HelloWorldClass führt zur folgenden Namensgebung
- Datei in der die Klasse zu finden sein muß: Classes/Controller/HelloWorldClassController.php
- die Klasse muss folgenden Namen besitzen: Tx_Nctestitflow_Controller_HelloWorldClassController
- Wert: helloWorldFnc führt zur folgenden Namensgebung
- die Klasse muss folgende Funktion besitzen: public function helloWorldFncAction()
- Schlüssel und Wert führt zur folgenden Namensgebung
- Templatedatei muss folgenden Namen besitzen: Resources/Private/Templates/HelloWorldClass/HelloWorldFnc.html
- "Die Einstellungen in ext_localconf.php sind unwichtig, sie werden nicht ausgewertet, wenn es eine Flexform mit <switchableControllerActions> gibt." [1]
Classes/Controller/HelloWorldClassController.php
Achtung: Ordner-, Datei-, Klassen- und Funktionsnamen sind durch #ext_localconf.php vorgeschrieben!!!
Classes/Controller/HelloWorldClassController.php
<?php
class Tx_Nctestitflow_Controller_HelloWorldClassController extends Tx_Extbase_MVC_Controller_ActionController {
public function helloWorldFncAction() {
$this->view->assign('name', 'Vorname Nachname');
}
}
?>
Resources/Private/Language/locallang.xml
Resources/Private/Language/locallang.xml
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
<meta type="array">
<type>module</type>
<description>Language labels for Hello World</description>
</meta>
<data type="array">
<!-- ENGLISH LANGUAGE DATA -->
<languageKey index="default" type="array">
<label index="helloworld">hello world!!!</label>
</languageKey>
<!-- GERMAN LANGUAGE DATA -->
<languageKey index="de" type="array">
<label index="helloworld">Hallo Welt!!!</label>
</languageKey>
</data>
</T3locallang>
Resources/Private/Templates/HelloWorldClass/HelloWorldFnc.html
Achtung: Ordner- und Dateinamen sind durch #ext_localconf.php vorgeschrieben!!!
Resources/Private/Templates/HelloWorldClass/HelloWorldFnc.html
<p>
<f:translate key="helloworld" /></br>
{name}
</p>
ext_tables.php
hier mit wird die Extension im Backend zur Auswahl eingebunden .... das Plugin registriert!
<?php
Tx_Extbase_Utility_Extension::registerPlugin(
$_EXTKEY,
'Pi1',
'meine hello world fluid extbase extension'
);
?>
mm - Relationen zwischen Models
Ausgangslage
mit dem Extension Builder erstellte verkürzte Klassen und die TCA Konfiguration dazu
Tag Klasse
typo3conf/ext/ncnetz/Classes/Domain/Model/Tag.php
class Tag extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* dates
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\Ncnetz\Domain\Model\Date>
* @lazy
*/
protected $dates;
public function addDate(\TYPO3\Ncnetz\Domain\Model\Date $date) {
$this->dates->attach($date);
}
public function removeDate(\TYPO3\Ncnetz\Domain\Model\Date $dateToRemove) {
$this->dates->detach($dateToRemove);
}
public function getDates() {
return $this->dates;
}
public function setDates(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $dates) {
$this->dates = $dates;
}
}
Date Klasse
typo3conf/ext/ncnetz/Classes/Domain/Model/Date.php
class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
/**
* tags
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\Ncnetz\Domain\Model\Tag>
*/
protected $tags;
public function addTag(\TYPO3\Ncnetz\Domain\Model\Tag $tag) {
$this->tags->attach($tag);
}
public function removeTag(\TYPO3\Ncnetz\Domain\Model\Tag $tagToRemove) {
$this->tags->detach($tagToRemove);
}
public function getTags() {
return $this->tags;
}
public function setTags(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $tags) {
$this->tags = $tags;
}
TCA Configuration Date
typo3conf/ext/ncnetz/Configuration/TCA/Date.php
$TCA['tx_ncnetz_domain_model_date'] = array(
'columns' => array(
'tags' => array(
// ...
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_ncnetz_domain_model_tag',
'MM' => 'tx_ncnetz_date_tag_mm',
// ...
),
),
)
);
modifiziertes TCA Tag
$TCA['tx_ncnetz_domain_model_tag'] = array(
'columns' => array(
'dates' => array(
// ...
'config' => array(
'type' => 'select',
'foreign_table' => 'tx_ncnetz_domain_model_date',
// 'MM' => 'tx_ncnetz_tag_date_mm',
'MM' => 'tx_ncnetz_date_tag_mm',
'MM_opposite_field' => 'tags',
// ...
),
),
)
);
Probleme
Could not analyse class:Tx_ _Controller_ Controller maybe not loaded or no autoloader? (More information)
peinlichst genau darauf achten das die Namen (Klassen-, Dateinamen) richtig sind
Quellen
- deutsches Fluid Tutorial
- ausführliche Extbase_Fluid_Dokumentation.pdf von mittwald
- Extension Beispiel von 2010
- Backend Suche in den eigen entwickelten Extensions
- Relationen MM_opposite_field