我正在寻找一个钩子,让我在后端编辑我的扩展时修改数据库输出,然后再将其打印到 TCE 字段。
我在 class.t3lib_tceforms.php 中尝试了 getSingleField_preProcess,但它不包含任何与我的扩展相关的数据。
我正在寻找一个钩子,让我在后端编辑我的扩展时修改数据库输出,然后再将其打印到 TCE 字段。
我在 class.t3lib_tceforms.php 中尝试了 getSingleField_preProcess,但它不包含任何与我的扩展相关的数据。
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
包含您可以操作的整个记录。
可能你想使用TCEmain
钩子
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_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';