rtgx

Hooks

Ako použiť existujúce hooks

Zoznam bodov pre hook-ovanie v triede /t3lib/class.t3lib_tcemain.php (okrem funkcie moveRecord):

// First prepare user defined objects (if any) for hooks which extend this function:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']

// Possible values of $status: new, update

$hookObj->processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, $this);

$hookObj->processDatamap_postProcessFieldArray($status, $table, $id, $fieldArray, $this);

$hookObj->processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, $this);

// Processing the cmd-array, hook initialization:
$TYPO3_CONF_VARS['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']

// Possible values of $command: move, copy, localize, version, delete, undelete

$hookObj->processCmdmap_preProcess($command, $table, $id, $value, $this);

$hookObj->processCmdmap_postProcess($command, $table, $id, $value, $this);

Spustenie hookov v module

Načítanie existujúcich hookov:

$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);
}
}

Spustenie konkrétnej funkcie hooku:

foreach($hookObjectsArr as $hookObj)	{
if (method_exists($hookObj, 'processDatamap_preProcessFieldArray')) {
$hookObj->processDatamap_preProcessFieldArray($incomingFieldArray, $table, $id, $this);
}
}

Príklad č. 1

Zadanie

Po úprave hodnoty stĺpca vybranej tabuľky v backedne na určenú hodnotu potrebujeme odoslať email Fe užívateľovi, ktorý je s práve upraveným záznamom relačne zviazaný.

localconf.php

Pridanie obslužnej funkcie pre processDatamapClass:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] = 
'EXT:rtgcreator/inc/class_hooks.php:tx_rtgcreator_hooks';
inc/class_hooks.php

Užívateľská trieda a funkcia. V backende po editácii záznamu ($status = "update"), pri zmene hodnoty stĺpca status tabuľky tx_rtgcreator_pages na "3" sa zavolá funkcia $classmail->sendNotify, ktorá odošle email užívateľovi, ktorého emailová adresa sa zistí z DB podľa hodnoty stĺpca uid_feuser. To znamená, že musia byť splnené tieto vstupné podmienky:

  1. $table = 'tx_rtgcreator_pages'; // názov tabuľky
  2. $status = 'update' // stav akcie - úprava
  3. $fieldArray['status'] = 3 // nová hodnota stĺpca tabuľky
class tx_rtgcreator_hooks {
function processDatamap_afterDatabaseOperations( $status, $table, $id, &$fieldArray, $pObj ) {
if( strtolower( $table ) == 'tx_rtgcreator_pages' ) {
if( $status == 'update' ) {
// Status changed to "Canceled"
if( $fieldArray['status'] == 3 ) {
// Get Fe user data
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( '*', 'fe_users', 'uid = '.$pObj->checkValue_currentRecord['uid_feuser'], '', '', '' );
if( $res ) {
$feuser = $GLOBALS['TYPO3_DB']->sql_fetch_assoc( $res );
if( !empty( $feuser['email'] ) ) {
// Include email message creator
require_once( t3lib_extMgm::extPath( 'rtgcreator' ).'inc/class_email.php' );
$classmail = new tx_rtgcreator_email();
$classmail->sendNotify( $feuser );
}
}
}
}
}
}
}