Zum Inhalt springen

Extension / Plugin ins Backend integrieren

Erstellt am 17. März 2014 · 8 Antworten · letzte Antwort am 3. Juli 2017

Tags: TYPO3 6.x, Frage

Chrissli ·

Hallo zusammen,

ich bin gerade dabei mich in die Extension-Entwicklung einzuarbeiten und dabei wie erwartet
gleich auf die ersten Probleme gestoßen.

Ich hangel mich mit dem Buch "Zukunftssicher Typo3 Extension mit Extbase und Fluid " von Jochen Rau
und Sebastian Kurfürst durch und habe nun das erste Minimalbeispiel mit meiner Extension adaptiert.
So weit so gut, benötigte Dateien sollten vorhanden sein:

Classes/Controller/XcontentController.php
Classes/Domain/Model/Xcontent.php
Classes/Domain/Repository/XcontentRepository.php
Resources/Private/Templates/Xcontent/render.html
ext_emconf.php
ext_icon.gif
ext_localconf.php
ext_tables.php
ext_tables.sql

- Die Extension wird im EM gelistet
- Sie kann installiert werden ohne Fehlermeldung
- Die zugehörige Datenbank kann ausgewählt werden

Ich kann auf deinem Sysfolder über Liste -> Neuer Datensatz die Extension auswählen, allerdings
scheint hier die Positionierung in der Liste nicht zu passen, denn der Punkt "RTE HTMLarea" wird bei mir
durch den Namen meiner Extension ( schniblotag ) ersetzt und mein Plugin mit unbekanntem Icon (?) neben
"Abkürzung" gelistet ( siehe Anhang ). Kann dann aber ausgewählt werden, alle Felder werden angezeigt und die Datenbank wird
auch mit entsprechenden Werten gefüllt.

Auf normalen Seiten wird das Plugin in der Listenansicht nicht aufgeführt,
in der Seitenansicht wird es gar nicht gelistet, weder direkt unter Inhaltstyp Plugin noch wenn ich allgemeines Plugin auswähle in
der zugehörigen Liste.

Weder Typo3 noch mein Webserver liefert mir hierzu einen Fehler.

Eingebunden wird das Plugin
in der ext_localconf.php mit

Tx_Extbase_Utility_Extension::configurePlugin(
	// unique plugin name
	$_EXTKEY,
	'XContent', // should be identical with ext_tables.php registerPlugin name?
	
	// accessible controller-action-combination
	array ('Xcontent'=>'render' )
	// non-cachable controller-action-combinations ( they must already be enabled )	
	// array (  ) 
);

bzw. in der ext_tables.php mit

Tx_Extbase_Utility_Extension::registerPlugin($_EXTKEY, 'Xcontent', 'Cross Content');

Kann mir vielleicht einer sagen was ich falsch mache bzw. wo ich suchen muss? Ist das eher
ein falscher Funktionsaufruf oder was falsch konfiguriertes?

Bin grade n bissl ratlos...

P.S.: Ich habe die Dateien manuell angelegt anhand der Beispiele aus dem Buch, d.h. bei mir sind keine Namespace-Angaben vorhanden. Ist das schon das Problem oder ist das nicht zwingend notwendig?

P.P.S.: Namespaces hinzugefügt, nicht besser geworden 🙁

t3plugin.png

Schweriner ·

Ich behaupte mal der Fehler liegt irgendwo in der ext_tables.php, daher bitte mal die gesamte Datei posten. Das Grundgerüst für Extensions lässt sich übrigens sehr angenehm mit dem Extension Builder aus dem TER machen. Namespaces sollten zukünftig auf jeden Fall verwendet werden.

Chrissli ·

Ja, dass ist mir jetzt auch klar 😃
Extensionbuilder hab ich probiert, hat mir aber zuviel gewurstelt das ich nicht verstanden hab, daher dachte ich Schritt für Schritt nach vorne Tasten ist vielleicht der bessere Weg

<?php 
if (!defined('TYPO3_MODE')) {
	die ('Access denied.');
}

// controls how the table ( see ext_tables.sql ) is renderd in t3backend
$TCA['tx_schniblotag_domain_model_xcontent'] = array (
	'ctrl' => array (
		'title' => 'Cross Referred Content', // system name for table as shown in backend
		'label' => 'name', // tells which databasefield is shown in backend to list elements			
	),
	'columns' => array (
		'name' => array (
			'label' => 'Bezeichnung',
			'config' => array (
				'type' => 'input',
				'size' => '20',
				'eval' => 'trim,required'
			)				
		),
		'xtype' => array(
			'label' =>'Typ',
			'config' => array (
				'type' => 'select',
				'default' => 'category',
				'maxitems' => 1,
				'items' => array (
					array('Aus Kategorie','category'),
					array('Neue Produkte','newproducts'),
					array('Neueste News','newestnews'),
					array('Codiert','encoded')	
				)		
			)			
		),
		'number_of_elements' => array(
			'label' => 'Anzahl angezeigter Elemente',
			'config' => array (
					'type' => 'input',
					'size' => '2',
					'eval' => 'trim'
			)
		),
		'contained_elements' => array(
			'label' => 'Angezeigte Elemente',
			'config' => array (
				'type' => 'input',
				'size' => '255',
				'eval' => 'trim'
			)
		)
	),
	'types' => array (
		'0' => array('showitem' => 'name, xtype, number_of_elements, contained_elements')
	)
);	


Tx_Extbase_Utility_Extension::registerPlugin($_EXTKEY, 'Xcontent', 'Cross Content');
?>
Chrissli ·

Kleines Update:

Hab's nochmal mit dem Extension Builder probiert und die Feldconfiguration in dem 'dynamicConfigFile' ( vorher ext_tables.php ) entsprechend angepasst, soweit sogut, das Plugin wird nun in der Listenansicht als hinzufügbarer Datensatz auf allen Seiten angezeigt. Allerdings fehlt es immernoch als Content-Element und Plugins, egal wie ichs anstelle.

Hab mal testweise den configurePlugin-Befehl angepasst:

Tx_Extbase_Utility_Extension::configurePlugin(
	// unique plugin name
	$_EXTKEY,
	'XContent', // should be identical with ex_tables.php registerPlugin name?
	
	// accessible controller-action-combination
	array ('Xcontent'=>'rendercategory' ),
	// non-cachable controller-action-combinations ( they must already be enabl,ed )	
	array (  ),
	\TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT	
		
	
);

Hat aber nix gebracht ;-(

Schweriner ·

In die ext_tables.php gehört das registerPlugin. Hier Beispiele aus einer meiner Extensions:

ext_tables.php

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
	$_EXTKEY,
	'Questions',
	'Fragen und Antworten'
);

Das configurePlugin gehört in die ext_localconf.php

Chrissli ·

Ok sorry, war vielleicht etwas ungünstig formuliert. Das ist natürlich der Fall.
Ich habe die automatisch ( durch den ExtensionBuilder ) generierte Datei "ext_tables.php" um die Zeile

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin($_EXTKEY, 'Xcontent', 'Cross Content');

am Ende ( nach der TCA-Deklaration ) erweitert und die Datei "ext_localconf.php" in der obersten Ebene meines Extensionverzeichnisses angelegt mit dem configurePlugin-Aufruf wie vorher beschrieben.
Die Konfiguration der Felder schein ja zu stimmen, in der Listenansicht kann ich die Inhalte als Datensatz wie geplant erstellen, speichern, laden, aber eben nicht als Content-Element Plugin.

Mit dem alten Aufruf ( ich glaub das war

t3lib_extMgm::addToAllTCAtypes

) hatte es Problemlos funktioniert, aber der ist ja deprecated.

Wenn ich wenigstens eine Fehlermeldung hätte mir der man arbeiten kann, aber soweit scheint alles in Ordnung zu sein.

Unbekannter Benutzer ·

Wenn du dir eh schon ein Grundgerüst mit dem Extension Builder aufsetzt, dann kannst du an der Stelle doch auch dein Plugin definieren, das sollte dann ziemlich sicher funktionieren 🙂

Ansonsten kann ich mir vorstellen, dass dein Mix aus namespaces / keine namespaces Probleme verursacht.

ViRuSTriNiTy ·

Ich denke mal, die Extension wurde im Backend nicht aktiviert. Deswegen erscheint Diese auch nicht Plugin DropDown.