TYPO3: Eine Extbase Extension per Typoscript einbinden

Hier mal wieder ein kleines Snippet für zwischendurch. Und zwar gibt es seit Extbase ja neue Möglichkeiten eine Extension per Typoscript an einer beliebigen Stelle einzubinden. Damals… zu den guten, alten Pi-Base Zeiten ging das ja ganz einfach mit:

meinCoa = COA
meinCoa {
    15 < plugin.tx_meineExtension_pi1
}

Bei Extbase läuft das ganze nun – gefühlt umständlich – über eine Bootstrap->Run Funktion von Extbase. Ab TYPO3 6.x sieht das ganze also mit Namespaces so aus:

temp.meineExtension = USER
temp.meineExtension {
    # Bis TYPO3 6.2
    # userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    # Ab TYPO3 7.6
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    extensionName = MeineExtension
    pluginName = PluginName
    vendorName = TYPO3
    controller = StandardControllerOhneControllerAmEnde
    action = standardActionAberOhneActionAmEnde
    switchableControllerActions {
        WeitereControllerAberOhneControllerAmEnde {
            1 = list
            2 = detail
            3 = etc
        }
    }
    view < plugin.tx_meineExtension.view
    persistence < plugin.tx_meineExtension.persistence
    settings < plugin.tx_meineExtension.settings
}

meinCoa = COA
meinCoa {
     15 < temp.meineExtension
}

UPDATE 03.03.2016
Für TYPO3 7.x habe ich im Typoscript oben eine kleine Änderung vorgenommen. Seit TYPO3 7 müssen Klassennamen nicht mehr mit einem Backslash anfangen und man bekommt sogar einen Fehler ála „$className „\TYPO3\CMS\Extbase\Core\Bootstrap“ must not start with a backslash.

Manche von euch würden nun vielleicht sagen:

WTF?! Das ist ja voll kompliziert?!

Und ja: Genau das ist es und es sorgt auch immer wieder für Probleme.

Wie ich oben bereits in Controller und Actions geschrieben habe, muss man dahinter wie so oft natürlich nicht noch Controller oder Action schreiben.
Außerdem ist es auch wichtig, dass die ausgewählten Controller und Actions auch in der ext_localconf.php der Extension erlaubt und konfiguriert sind. Selbstverständlich muss die Extension selbst auch mit Extkey, Vendorname etc. in der ext_tables.php konfiguriert und existent sein.
Außerdem gilt in dem Typoscript UpperCamelCase, sprich Dinge wie „meine_extension“ für „extensionName“ werden zu MeineExtension.

Eine etwas schnellere Methode zum Einbinden einer Extbase Extension per Typoscript könnte auch der Weg über

meinCoa = COA
meinCoa {
     15 < tt_content.list.20.extensionname_pluginname
}

sein. Wenn ihr einen Blick in den Template -> Typoscript Objekt Browser werft, findet ihr dort bereits einige Sachen – aus dem Typoscript oben – wieder. Ihr könnt dies dann einfach noch um weitere Typoscript-Anweisungen (s.o.) wie z.B. den Standardcontroller usw. erweitern oder, wie in dieser AJAX Schnittstelle, die Extension per URL / GET Parametern steuern.

Da sich was diese Bootstrap->Run Funktion öfter mal was zu ändern scheint, schleichen sich auch bei mir desöfteren mal Fehler ein. Sollte dieses Snippet mal wieder überholt sein oder generell irgendwelche Fehler enthalten, dann postet sie bitte in die Kommentare um euren Mit-Entwicklern kostbare Zeit zu sparen 😉

5 Kommentare

  • Jennifer Koenig

    Hallo,

    ich versuche gerade, in Fluid einen Typoscript Wert auszugeben, den von einem Anruf aus einem Controller erzeugt werden. Ich nutze dabei den oben geschriebenen Code (mit Namespace) und der Controller wird tatsächlich aufgerufen wenn ich in dem Fluid Template den cObject Fluid Tag nutze mit typoscriptObjectPath=“meinCoa“.

    Ich weiß dass der Controller aufgerufen wird weil ich darin einen var_dump() aufrufe. Nur, ich möchte den mit „return“ zurückgegeben Wert als Variable nutzen, aber ich komme nicht daran.

    Wie soll das in Fluid aussehen? Der cObject Fluid Tag mit „data={15}“ ?

    Muss man auch ALLE erlaubte Actions für einen Controller in dem Typoscript unter „SwitchableControllerActions“ mitschreiben? Bei mir, wenn ich das nicht mache, werden die (die ich in ext_localconf.php configuriert habe, einfach ignoriert)

    • Welchen Fluid Tag meinst Du? Wenn Du den cObject Viewhelper verwendest, erscheint an der Stelle denn nicht die Rückgabe aus dem Controller?

      Zu Deiner zweiten Frage: Wenn Du eine Extbase Extension per Typoscript einbindest und SwitchableControllerActions definierst, dann musst Du dort alle eintragen die an der Stelle vom Controller verwendet werden könnten / dürfen. Es kann aber auch sein, dass wenn Du die Actions gar nicht definierst, dass dann auf die ext_localconf Einstellungen zurückgegriffen wird, da bin ich mir jetzt gerade aber nicht sicher.

  • Ich habe ein Problem an die Daten im tag data zugelangen:

    Wie übergebe ich diese Daten im Typoscript an den Controller?
    lib.salescontacts = USER
    lib.salescontacts {
    userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
    extensionName = NwSalescontacts
    pluginName = Salescontacts
    vendorName = Netzweber
    controller = Salescontact
    switchableControllerActions {
    Salescontact {
    1 = list
    }
    }
    view < plugin.tx_nwsalescontacts_salescontacts.view
    persistence < plugin.tx_nwsalescontacts_salescontacts.persistence
    settings < plugin.tx_nwsalescontacts_salescontacts.settings
    }

    • So sieht es im Fluid Template aus

      <f:cObject typoscriptObjectPath="lib.salescontacts" data="{headline: settings.headline, text: settings.text, defaultimage: settings.defaultImage}" />
  • Ich versuche meine Extension wie oben beschrieben per Typoscript einzubinden.
    Leider erhalte ich daraufhin folgende Fehlermeldung:
    „#1316104317: The default controller for extension „PkGroupsManagement“ and plugin „Management“ can not be determined. Please check for TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin() in your ext_localconf.php“ 🙁

    Mein Typoscript:

    temp.include = USER
    temp.include {
       vendorName = Ibp
       userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
       pluginName = Management
       controller = Groups
       action = content
       extensionName = PkGroupsManagement
    switchableControllerActions {
    Groups {
    1 = content
    }
    }
    view < plugin.tx_PkGroupsManagement.view
    persistence < plugin.tx_PkGroupsManagement.persistence
    settings < plugin.tx_PkGroupsManagement.settings
    }
    

    Meine ext_localconf.php:

    <?php
    if (!defined('TYPO3_MODE')) {
    	die('Access denied.');
    }
    
    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    	'Ibp.' . $_EXTKEY,
    	'Management',
    	array(
    		'Groups' => 'content',
    		
    	),
    	// non-cacheable actions
    	array(
    		'Groups' => 'content',
    		
    	)
    );
    

    Hat jemand eine Idee woran es liegen könnte?

    Grüße
    Philipp

Schreibe einen Kommentar zu Philipp Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Highlighting von Codes ist mit den Tags  [ts], [php], [html], [javascript], [xml] oder [code] möglich.