<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.176.214.196</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=87.176.214.196"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/87.176.214.196"/>
	<updated>2026-05-06T20:33:34Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Hooks_in_Extbase_Extensions&amp;diff=20902</id>
		<title>TYPO3 - Hooks in Extbase Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_-_Hooks_in_Extbase_Extensions&amp;diff=20902"/>
		<updated>2015-06-21T10:57:56Z</updated>

		<summary type="html">&lt;p&gt;87.176.214.196: /* Hooks in Extbase Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hooks in Extbase Extensions ==&lt;br /&gt;
Eine Alternative für Extbase  Extensions sind die [[Extbase - Signal Slots|Signal Slots]]. Aber vorsicht die in verschiedenen Tutorials vorgeschlagenen Slots für Backend deletion funktionieren nicht wenn man im Backend arbeitet (6.2.13) Weil die Speicherung nicht darüber abgewickelt wird. &lt;br /&gt;
&lt;br /&gt;
=== Kurzübersicht ===&lt;br /&gt;
Quelle http://www.schmutt.de/456/hook-mit-extbase-implementieren/ (2015-06)&lt;br /&gt;
&lt;br /&gt;
1) unter &amp;#039;&amp;#039;Classes/Hooks&amp;#039;&amp;#039; eine &amp;#039;&amp;#039;&amp;#039;Klasse anlegen&amp;#039;&amp;#039;&amp;#039;: &amp;#039;&amp;#039;HooksHandler.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
2) Hook-Klasse und Funktion &amp;#039;&amp;#039;&amp;#039;implementieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class Tx_MyExtension_Hooks_HooksHandler {&lt;br /&gt;
&lt;br /&gt;
 /**&lt;br /&gt;
 * Hooktest&lt;br /&gt;
 * @param array $params&lt;br /&gt;
 * @param object $Obj&lt;br /&gt;
 * @return string&lt;br /&gt;
 */&lt;br /&gt;
  public function hooktest($params, &amp;amp;$Obj)&lt;br /&gt;
  {&lt;br /&gt;
        return &amp;quot;Hallo aus Extbase&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3) Hook in ext_localconf.php &amp;#039;&amp;#039;&amp;#039;registrieren&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;other_extension&amp;#039;][&amp;#039;my_hook_name&amp;#039;][] =&lt;br /&gt;
    &amp;#039;EXT:my_extension/Classes/Hooks/hooksHandler.php:Tx_MyExtension_Hooks_HooksHandler-&amp;gt;hooktest&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wer den Hook auch selber implementieren möchte, hier noch der Code dazu:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if (isset($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;other_extension&amp;#039;][&amp;#039;my_hook_name&amp;#039;]) &amp;amp;&amp;amp; is_array($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;other_extension&amp;#039;][&amp;#039;my_hook_name&amp;#039;])) {&lt;br /&gt;
    $_params = array(&lt;br /&gt;
        &amp;#039;param1&amp;#039; =&amp;gt; $value1,&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    foreach ($GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;EXTCONF&amp;#039;][&amp;#039;other_extension&amp;#039;][&amp;#039;my_hook_name&amp;#039;] as $_funcRef) {&lt;br /&gt;
         $content .= t3lib_div::callUserFunction($_funcRef, $_params, $this);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Ein Hook kann übrigens auch eine ganz gute Möglichkeit sein, um eine alte piBased Extension mit einer neuen ExtBase Extension zu erweitern.&lt;br /&gt;
&lt;br /&gt;
In ExtBase gibt es eine &amp;#039;&amp;#039;&amp;#039;Alternative zu Hooks: das Signal Slot Pattern&amp;#039;&amp;#039;&amp;#039;. Infos zu diesem Pattern in den Links unten. Leider hab ich es noch nicht geschafft das aus einer piBased Extension aufzurufen, wer weiß wie das geht, nur her mit den Codes!&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Links zu Hooks:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
http://www.hann3mann.de/artikel/einen-hook-unter-typo3-programmieren/&lt;br /&gt;
&lt;br /&gt;
http://typo3blogger.de/alles-uber-hooks/&lt;br /&gt;
&lt;br /&gt;
http://www.typo3lexikon.de/typo3-tutorials/tipps-und-tricks/hooks.html&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Links zu Signal / Slot Pattern:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
http://typo3blogger.de/signal-slot-pattern/&lt;br /&gt;
&lt;br /&gt;
http://blog.foertel.com/2011/10/using-signalslots-in-extbase/&lt;br /&gt;
&lt;br /&gt;
http://blog.tolleiv.de/2011/11/signal-slots-in-extbase/&lt;br /&gt;
&lt;br /&gt;
===Beispiel: Systemhook beim abarbeiten on Datensätzen (z.b. speichern)===&lt;br /&gt;
Hinweis: In Extbase wird im Namespace der Ordner Classes im Pfad weggelassen weil extbase davon ausgeht, dass dieser existiert.&lt;br /&gt;
localconf.php&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*$GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &lt;br /&gt;
&amp;#039;EXT:gbgeocode/Classes/Hooks/processDatamap.php:processDatamap&amp;#039;; //old school works      */&lt;br /&gt;
&lt;br /&gt;
//processDatamap_postProcessFieldArray&lt;br /&gt;
&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &lt;br /&gt;
&amp;#039;Geobit\\Gbgeocode\\Hooks\\ProcessDatamap&amp;#039;;//Namespace version works&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
typo3conf/ext/gbgeocode/Classes/Hooks/ProcessDatamap.php&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
namespace Geobit\Gbgeocode\Hooks;&lt;br /&gt;
 &lt;br /&gt;
class ProcessDatamap {&lt;br /&gt;
   /**&lt;br /&gt;
    * hook that is called when an element shall get deleted&lt;br /&gt;
    *&lt;br /&gt;
    * @param string $table the table of the record&lt;br /&gt;
    * @param integer $id the ID of the record&lt;br /&gt;
    * @param array $record The accordant database record&lt;br /&gt;
    * @param boolean $recordWasDeleted can be set so that other hooks or&lt;br /&gt;
    * @param DataHandler $tcemainObj reference to the main tcemain object&lt;br /&gt;
    * @return   void&lt;br /&gt;
    */&lt;br /&gt;
  	function processDatamap_postProcessFieldArray($command, $table, $id, $value, $dataHandler) {&lt;br /&gt;
    	die();&lt;br /&gt;
      if ($command == &amp;#039;delete&amp;#039; &amp;amp;&amp;amp; $table == &amp;#039;tx_yourext_domain_model_something&amp;#039;) {&lt;br /&gt;
      	// Perform something before real delete&lt;br /&gt;
        // You don&amp;#039;t need to delete the record here it will be deleted by CMD after the hook&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiel - Hook beim Löschen eines Datensatzes im Backend ===&lt;br /&gt;
&lt;br /&gt;
http://stackoverflow.com/questions/25591992/typo3-extbase-individual-code-on-backend-deletion-of-an-object&lt;br /&gt;
&lt;br /&gt;
List view uses TCEmain hooks during its operations, so you can use one of them to intersect delete action, i.e.: processCmdmap_deleteAction&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1. Register your hooks class in typo3conf/ext/your_ext/ext_tables.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processCmdmapClass&amp;#039;][] = &amp;#039;VENDORNAME\\YourExt\\Hooks\\ProcessCmdmap&amp;#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Create a class with valid namespace and path (according to previous step)&lt;br /&gt;
file: &amp;#039;&amp;#039;typo3conf/ext/your_ext/Classes/Hooks/ProcessCmdmap.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
namespace VENDORNAME\YourExt\Hooks;&lt;br /&gt;
&lt;br /&gt;
class ProcessCmdmap {&lt;br /&gt;
   /**&lt;br /&gt;
    * hook that is called when an element shall get deleted&lt;br /&gt;
    *&lt;br /&gt;
    * @param string $table the table of the record&lt;br /&gt;
    * @param integer $id the ID of the record&lt;br /&gt;
    * @param array $record The accordant database record&lt;br /&gt;
    * @param boolean $recordWasDeleted can be set so that other hooks or&lt;br /&gt;
    * @param DataHandler $tcemainObj reference to the main tcemain object&lt;br /&gt;
    * @return   void&lt;br /&gt;
    */&lt;br /&gt;
    function processCmdmap_postProcess($command, $table, $id, $value, $dataHandler) {&lt;br /&gt;
        if ($command == &amp;#039;delete&amp;#039; &amp;amp;&amp;amp; $table == &amp;#039;tx_yourext_domain_model_something&amp;#039;) {&lt;br /&gt;
            // Perform something before real delete&lt;br /&gt;
            // You don&amp;#039;t need to delete the record here it will be deleted by CMD after the hook&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Don&amp;#039;t forget to clear system cache after registering new hook&amp;#039;s class&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Verfügbare Hooks:&amp;#039;&amp;#039;&amp;#039; http://typo3.org/api/typo3cms/namespace_t_y_p_o3_1_1_c_m_s_1_1_version_1_1_hook.html&lt;br /&gt;
&lt;br /&gt;
==Beispiele localconf.php ==&lt;br /&gt;
Verschiedene Methoden zum Registrieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* Hook to enable automatic geolocation function at storing */&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;EXT:gbmaps/hooks/class.tx_gbmaps_tcemainhooks.php:tx_gbmaps_tcemainhooks&amp;#039;; // Old School pre Extbase&lt;br /&gt;
&lt;br /&gt;
$GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processCmdmapClass&amp;#039;][] =\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath($_EXTKEY).&amp;#039;Classes/Hooks/class.tx_gbmaps_hooks.php:tx_gbmaps_hook&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processCmdmapClass&amp;#039;][] = &amp;#039;Geobit\\gbmaps\\Hooks\\ProcessCmdmap&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
//works this way:&lt;br /&gt;
// $GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processCmdmapClass&amp;#039;][] = path_to_ext_or_vendor\\extbane\\Hooks\\HookClass:function&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beispiele für den Hook (not verified) ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
namespace Geobit\Gbmaps\Hooks;&lt;br /&gt;
&lt;br /&gt;
class ProcessCmdmap {&lt;br /&gt;
	function processCmdmap(){&lt;br /&gt;
		t3lib\_div::devLog(&amp;quot;Message&amp;quot;,&amp;quot;gbmaps&amp;quot;,2,&amp;quot;test&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	function processCmdmap_postProcess($command, $table, $id, $value, $dataHandler) {&lt;br /&gt;
		if(!empty($command))die();&lt;br /&gt;
		t3lib\_div::devLog(&amp;quot;Message&amp;quot;,&amp;quot;gbmaps&amp;quot;,2,$command);&lt;br /&gt;
		t3lib_utility_Debug::debugInPopUpWindow($command, &amp;quot;command&amp;quot;);&lt;br /&gt;
		//\TYPO3\CMS\Core\Utility\DebugUtility::debug($command);&lt;br /&gt;
		Tx_Extbase_Utility_Debugger::var_dump($myModel);&lt;br /&gt;
		//Tx_Extbase_Utility_Debugger::var_dump($command);&lt;br /&gt;
		//\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump($command);&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
	    //Write debug to a file&lt;br /&gt;
	    $textFileCnt = &amp;#039;DEBUG &amp;#039;;&lt;br /&gt;
	    $textFileCnt .= &amp;#039;Labe2: &amp;#039;.&amp;#039;manipulated text content, that needs to write to file&amp;#039;;&lt;br /&gt;
	    $file1 =   \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName(&amp;#039;fileadmin/debug/debug.txt&amp;#039;);&lt;br /&gt;
	  \TYPO3\CMS\Core\Utility\GeneralUtility::writeFile($file1, $textFileCnt);&lt;br /&gt;
&lt;br /&gt;
		// Example to do s.th. when delete&lt;br /&gt;
		if ($command == &amp;#039;delete&amp;#039; &amp;amp;&amp;amp; $table == &amp;#039;tx_yourext_domain_model_something&amp;#039;) {&lt;br /&gt;
			// Perform something before real delete&lt;br /&gt;
			// You don&amp;#039;t need to delete the record here it will be deleted by CMD after the hook&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Example to use Message queue&lt;br /&gt;
		$something_wrong = 0 ;&lt;br /&gt;
		if($something_wrong){&lt;br /&gt;
			$message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(&amp;#039;TYPO3\\CMS\\Core\\Messaging\\FlashMessage&amp;#039;,&lt;br /&gt;
				&amp;#039;OOOPS&amp;#039;,&amp;#039;Sth. is wrong&amp;#039;,\TYPO3\CMS\Core\Messaging\FlashMessage::ERROR,TRUE);&lt;br /&gt;
		}else{&lt;br /&gt;
			$message = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(&amp;#039;TYPO3\\CMS\\Core\\Messaging\\FlashMessage&amp;#039;,&lt;br /&gt;
				&amp;#039;OK&amp;#039;,&amp;#039;Everything goes alright&amp;#039;,\TYPO3\CMS\Core\Messaging\FlashMessage::OK,// ::ok is default =&amp;gt; optional&lt;br /&gt;
				TRUE);&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		\TYPO3\CMS\Core\Messaging\FlashMessageQueue::addMessage($message);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>87.176.214.196</name></author>
	</entry>
</feed>