TYPO3钩子用于修改数据库中的数据

时间:2012-07-02 07:35:48

标签: typo3

我正在寻找一个钩子,让我修改数据库输出,在后端编辑我的扩展,然后打印到TCE字段。

我在class.t3lib_tceforms.php中尝试了getSingleField_preProcess,但是我的扩展程序中没有包含任何相关数据。

2 个答案:

答案 0 :(得分:2)

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

你的 ext_localconf.php 应该注册你的钩子:

$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'][] = 'tx_yourextension_be';

...其中 tx_yourextension_be 是为后端处理指定的类的名称。然后该类必须包含getSingleField_preProcess()方法:

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

如您所见,有几个变量传递给您的方法。 $table包含已处理记录所属的表的名称。 $field是要呈现的字段的名称。 $row包含您可以操作的整个记录​​。

答案 1 :(得分:1)

可能你想使用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;
    }
}

OR / AND

function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$reference) {
    if ($table == 'tx_yourext_table') {
        if ($status == 'update') {
            $this->doSomethingWithRecordAfterUpdate($id);
        }
    }
}

当然,您需要在扩展程序的ext_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';