首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于修改数据库中TYPO3数据的TCE钩子

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

Stack Overflow用户
提问于 2012-07-02 15:35:48
回答 2查看 2.2K关注 0票数 0

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-02 17:33:05

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

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

代码语言:javascript
复制
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tceforms.php']['getSingleFieldClass'][] = 'tx_yourextension_be';

tx_yourextension_be ...where是指定用于后端处理的类的名称。然后这个类必须包含getSingleField_preProcess()方法:

代码语言:javascript
复制
public function getSingleField_preProcess($table, $field, &$row, $altName, $palette, $extra, $pal, &$pObj) {
  // ...processing...
}

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

票数 2
EN

Stack Overflow用户

发布于 2012-07-02 17:12:20

您可能希望使用TCEmain钩子

代码语言:javascript
复制
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;
    }
}

或/和

代码语言:javascript
复制
function processDatamap_afterDatabaseOperations($status, $table, $id, $fieldArray, &$reference) {
    if ($table == 'tx_yourext_table') {
        if ($status == 'update') {
            $this->doSomethingWithRecordAfterUpdate($id);
        }
    }
}

当然,您需要在扩展的ext_localconf.php中注册钩子,例如:

代码语言:javascript
复制
$GLOBALS ['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['yourext']
         = 'EXT:yourext/class.tx_yourext_tcemain.php:tx_yourext_tcemain';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11289456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档