Tutorial für Version 10 und 11: https://www.auxweb.de/aktuelles/userfunc-tutorial
Mit UserFunc kann man PHP Code per TypoScript einbinden. Doch je nach Version werden UserFuncs anders eingebunden:
- 8.7: http://typo3blogger.de/userfuncs-per-typoscript-in-typo3-8-7-einbinden/
- 7.6: dieses Tutorial hier
- 6.2: nicht getestet, müsste mit dem 4.5er laufen
- 4.5: mein altes Tutorial für 4.5 – enthält auch die Grundlagen von UserFuncs
Geänderte userFunc Syntax
Die alten Namens-Konventionen (muss mit „user“ beginnen) entfallen.
Ab 7.4 hat sich die include Syntax geändert, config.includeLibrary und config.includeLibs wurden entfernt. Userfuncs müssen ab TYPO3 7.4 folgendermaßen eingebunden werden:
page.20 = USER_INT page.20 { userFunc = user_printTime includeLibs = fileadmin/example_time.php }
Einfache Extension für die userFunc
Empfohlen wird aber, die benötigten Klassen über eine Extension einzubinden und das Autoload-Verhalten mit Namepaces auszunutzen. Dafür ist minimal nötig (Beispiel – danke dafür an Peter Linzenkirchner):
Ein Ordner in typo3conf/ext/ mit diesem Inhalt:
- typo3conf/ext/myincludes
- typo3conf/ext/myincludes/Classes/
- typo3conf/ext/myincludes/Classes/Example.php
- typo3conf/ext/myincludes/ext_emconf.php
- typo3conf/ext/myincludes/ext_icon.gif
Der Inhalt der ext_emconf.php:
<?php $EM_CONF[$_EXTKEY] = array( 'title' => 'Include all my Classes', 'description' => 'Einbinden der Klassen für userFunc', 'category' => 'fe', 'author' => 'my Name', 'author_email' => 'my Email', 'state' => 'alpha', 'author_company' => 'my Company', 'version' => '0.0.1', 'constraints' => array( 'depends' => array( ), 'conflicts' => array( ), 'suggests' => array( ), ), );
Der Inhalt der Example.php:
<?php namespace Myvendor\Myincludes; class Example { public function myExampleFunction($content, $conf) { $color = $conf['userFunc.']['color']; return '<p style="color:' . $color. ';">Dynamic time: ' . date('H:i:s') . '</p><br />'; } }
Und der Aufruf im TS:
page.30 = USER_INT page.30 { userFunc = Myvendor\Myincludes\Example->myExampleFunction userFunc.color = #ff0000 }
ExtBase Extension mit userFunc Action
Oft hat man bereits eine Extbase Extension und will eine bestimmte Action als userFunc aufrufen. Das geht so:
10 = USER_INT 10 { userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run vendorName = MyVendor\Myincludes extensionName = MyExtension pluginName = Pi1 switchableControllerActions { Example { 1 = myUserFunc } } }
Und das ist der zugehörige Controller. Der Eintrag in switchableControllerActions ist nötig, da sonst die default listAction aufgerufen wird:
<?php namespace MyVendor\MyExtension\Controller; class ExampleController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController { public function listAction() { ... } public function myUserFuncAction() { return '<p style="color: red;">Dynamic time: ' . date('H:i:s') . '</p><br />'; } }
Weitere Infos zu der ExtBase Variante findet man hier: http://blog.teamgeist-medien.de/2014/03/typo3-eine-extbase-extension-per-typoscript-einbinden.html