Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于从数据库修改TCE数据的TYPO3钩子_Typo3 - Fatal编程技术网

用于从数据库修改TCE数据的TYPO3钩子

用于从数据库修改TCE数据的TYPO3钩子,typo3,Typo3,我正在寻找一个钩子,让我在后端编辑扩展时,在将其打印到TCE字段之前修改数据库输出 我在class.t3lib\u tceforms.php中尝试了getSingleField\u预处理,但它没有包含任何与我的扩展相关的数据。您可能想使用TCEmainhook function processDatamap_preProcessFieldArray(array &$incomingFieldArray, $table, $id, t3lib_TCEmain &$reference

我正在寻找一个钩子,让我在后端编辑扩展时,在将其打印到TCE字段之前修改数据库输出


我在class.t3lib\u tceforms.php中尝试了getSingleField\u预处理,但它没有包含任何与我的扩展相关的数据。

您可能想使用
TCEmain
hook

function processDatamap_preProcessFieldArray(array &$incomingFieldArray, $table, $id, t3lib_TCEmain &$reference) {
    if ($table == 'tx_yourext_table') {
        $a = $incomingFieldArray['field_a'];
        $b = $incomingFieldArray['field_b'];            
        $incomingFieldArray['field_c'] = $a . ' ' . $b;
    }
}
或/及

function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$reference) {
    if ($table == 'tx_yourext_table') {
        if ($status == 'update') {
            $this->doSomethingWithRecordAfterUpdate($id);
        }
    }
}
当然,您需要在扩展的
ext\u localconf.php
中注册钩子,例如:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['yourext']
         = 'EXT:yourext/class.tx_yourext_tcemain.php:tx_yourext_tcemain';

可能您想使用
TCEmain
hook

function processDatamap_preProcessFieldArray(array &$incomingFieldArray, $table, $id, t3lib_TCEmain &$reference) {
    if ($table == 'tx_yourext_table') {
        $a = $incomingFieldArray['field_a'];
        $b = $incomingFieldArray['field_b'];            
        $incomingFieldArray['field_c'] = $a . ' ' . $b;
    }
}
或/及

function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$reference) {
    if ($table == 'tx_yourext_table') {
        if ($status == 'update') {
            $this->doSomethingWithRecordAfterUpdate($id);
        }
    }
}
当然,您需要在扩展的
ext\u localconf.php
中注册钩子,例如:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['yourext']
         = 'EXT:yourext/class.tx_yourext_tcemain.php:tx_yourext_tcemain';

getSingleField\u preProcess
应该是您想要的正确挂钩。我认为问题在于,您的函数被调用用于每个表的记录,而不仅仅是您的记录。您必须根据呈现的表区分何时执行任何处理。表的名称将传递给
getSingleField\u preProcess()
方法

您的ext\u localconf.php应该注册您的钩子:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'][] = 'tx_yourextension_be';
…其中tx\u yourextension\u be是指定用于后端处理的类的名称。然后,此类必须包含
getSingleField\u preProcess()
方法:

public function getSingleField_preProcess($table, $field, &$row, $altName, $palette, $extra, $pal, &$pObj) {
  // ...processing...
}

如您所见,有几个变量被传递给您的方法<代码>$table包含已处理记录所属的表的名称
$field
是正在渲染的字段的名称
$row
包含您可以操作的整个记录。

getSingleField\u preProcess
应该是您所需的正确挂钩。我认为问题在于,您的函数被调用用于每个表的记录,而不仅仅是您的记录。您必须根据呈现的表区分何时执行任何处理。表的名称将传递给
getSingleField\u preProcess()
方法

您的ext\u localconf.php应该注册您的钩子:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'][] = 'tx_yourextension_be';
…其中tx\u yourextension\u be是指定用于后端处理的类的名称。然后,此类必须包含
getSingleField\u preProcess()
方法:

public function getSingleField_preProcess($table, $field, &$row, $altName, $palette, $extra, $pal, &$pObj) {
  // ...processing...
}

如您所见,有几个变量被传递给您的方法<代码>$table包含已处理记录所属的表的名称
$field
是正在渲染的字段的名称
$row
包含您可以操作的整个记录。

请让我了解,您是要操作当前保存的ext记录的数据还是其他内容?请让我了解,您是要操作当前保存的ext记录的数据还是其他内容?