Hooks

Hooks stellen pre- und post-processing Userfunktionen zur Verfügung. Der Vorteil ggü. XCLass ist die möglichkeit eine Klasse mehrfach erweitern zu können, durch mehrere Extensions.

Klasse: t3lib/class.t3lib_tcemain.php.
Methode: process_datamap

Erstellt: 07/2010| Geändert: 10/2015

Methode getUserObj

Bevorzugte Methode

Klasse die erweitert werden soll

Hook Klasse finden

// First prepare user defined objects (if any) for hooks which extend this function:
$hookObjectsArr = array();
if (is_array ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']
   ['processDatamapClass'])) {
  foreach ($TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']
   ['processDatamapClass'] as $classRef) {
    $hookObjectsArr[] = &t3lib_div::getUserObj($classRef);
  }
}

Hook Methode suchen und aufrufen

// Hook: processDatamap_postProcessFieldArray
foreach($hookObjectsArr as $hookObj)    {
  if (method_exists($hookObj,'processDatamap_postProcessFieldArray'))
  {
    $hookObj->processDatamap_postProcessFieldArray($status, $table, $id, $fieldArray, $this);
  }
}

Erweiterungsklasse

Anlegen der Klasse

Klasse: class.tx_rsyshook_tcemainprocdm.php
Methode: function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference) {}

Klasse inkludieren (in ext_localconf.php)

// Erweiterungsklasse Hook inkludieren
require_once(t3lib_extMgm::extPath('rsys_hook').'class.tx_rsyshook_tcemainprocdm.php');

Achtung: keine Leerzeichen vor dem ersten <?php ... sonst gibt's Fehler (header output already started etc.)

Klasse registrieren (in ext_localconf.php)

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 'EXT:rsyshook/class.rsyshook_tcemainprocdm.php:tx_rsyshook_tcemainprocdm';

Methode

Der Name der Methode muss genau der sein der aufgerufen wird von der zu erweiternden Klasse (im Sourcecode nachsehen)

function processDatamap_postProcessFieldArray ($status, $table, $id, &$fieldArray, &$reference) {
  $row = t3lib_BEfunc::getRecord ($table, $id);
  if ($status == 'update' && $table == 'tt_content') {
    if (is_array ($row)) {
        $dataArr = array ();
        $dataArr['pages'][$row['pid']]['lastUpdated'] = time();
        $tce = t3lib_div::makeInstance('t3lib_TCEmain');
        $tce->start($dataArr, array());
        $tce->process_datamap();
    }
  }
}

Erstellt: 07/2010| Geändert: 10/2015

Variation

Klasse die erweitert werden soll

Die Extension seminars hat den Hook anders definiert. Hier das Beispiel dazu:

var $hookObjects = array();
...
$this->getHookObjects();

Methodenaufruf:

// call single view hook
foreach ($this->hookObjects as $hookObject) {
  if (method_exists($hookObject, 'modifySingleView')) {
    $hookObject->modifySingleView($this);
  }
}

Hooks einlesen (nicht wie üblich in ['TYPO3_CONF_VARS']['SC_OPTIONS']):

function getHookObjects() {
  $extensionConfiguration =& $GLOBALS['TYPO3_CONF_VARS']['EXTCONF'];
  $hooks =& $extensionConfiguration['seminars/pi1/class.tx_seminars_pi1.php']['hooks'];
  if (is_array($hooks)) {
    foreach ($hooks as $classReference) {
        $this->hookObjects[] = t3lib_div::getUserObj($classReference);
    }
  }
  return;
}

Erweiterungsklasse

Anlegen der Klasse

Klasse: class.tx_rsysseminarsext_modsingleview.php
Methode: function modifySingleView($reference) {}

Klasse inkludieren (in ext_localconf.php)

// include hook class
require_once(t3lib_extMgm::extPath('rsys_seminars_ext').
  'class.tx_rsysseminarsext_modsingleview.php');

Klasse registrieren (in ext_localconf.php)

// Register my hook objects
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']
  ['seminars/pi1/class.tx_seminars_pi1.php']['hooks'][]=
  'EXT:rsyshook/class.tx_rsysseminarsext_modsingleview.php
  :tx_rsysseminarsext_modsingleview
';

Methode

Der Name der Methode muss genau der sein der aufgerufen wird von der zu erweiternden Klasse (im Sourcecode nachsehen)

function modifySingleView($parent) {
  $parent->setMarkerContent('title', "All Seminars have the same name");
}

Erstellt: 07/2010| Geändert: 10/2015

Methode callUserFunc

 
############################
# New Version:
############################
if ($this->conf['saveUserFunc']) {
  $params['config'] = $this->conf['saveUserFunc.'];
  $params['data'] = $this->get_post;
  t3lib_div::callUserFunction($this->conf['saveUserFunc'],$params,$this,"");
}

 

Erstellt: 07/2010| Geändert: 10/2015