如何在 TYPO3 中使用 Hook "processDatamap_postProcFieldArray"
How to use Hook "processDatamap_postProcFieldArray" in TYPO3
用例:
保存对象时(在后端,可能在前端太晚了)我想在保存到数据库之前操作值。
问题:
该文件似乎包含在内(如果我选择了错误的文件路径,则会在保存时显示错误)但该功能似乎不会在保存对象时执行。
Whosebug 上有很多操作方法(大部分与 T4.5 相关)和相关问题,但 none 似乎对我有用。
环境:
TYPO3 6.2,扩展库
简约测试用例:
/ext/navolspmanager/ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
UPADTED 供参考: 必须更改最后一行以解决问题
/ext/navolspmanager/Classes/Hooks/GetGeoCodesHook.php
<?php
namespace NachVORNE\Navolspmanager\Hooks;
class GetGeoCodesHook {
public function processDatamap_preProcessFieldArray( array $fieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj ) {
if ($table == 'tx_navolspmanager_domain_model_dataset') {
$fieldArray['geolng'] = 01.001; // for testing purposes
var_dump($fieldArray); die();
}
else{
var_dump($table); die();
}
}
}
当前状态:
保存时它不会崩溃或显示任何内容,只是顺利保存并忽略此功能。
谁能告诉我我在这里缺少什么?
已解决:
在我的 ext_localconf.php 中,命名空间中只缺少一个“/”...
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
改进:
根据其他用户输入更新一个字段时,我们应该使用 'processDatamap_postProcessFieldArray' 函数。这样 trim、日期和数字等内容在我们 grep 输入的那一刻就已经完成了。
用例: 保存对象时(在后端,可能在前端太晚了)我想在保存到数据库之前操作值。
问题: 该文件似乎包含在内(如果我选择了错误的文件路径,则会在保存时显示错误)但该功能似乎不会在保存对象时执行。
Whosebug 上有很多操作方法(大部分与 T4.5 相关)和相关问题,但 none 似乎对我有用。
环境: TYPO3 6.2,扩展库
简约测试用例:
/ext/navolspmanager/ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
UPADTED 供参考: 必须更改最后一行以解决问题
/ext/navolspmanager/Classes/Hooks/GetGeoCodesHook.php
<?php
namespace NachVORNE\Navolspmanager\Hooks;
class GetGeoCodesHook {
public function processDatamap_preProcessFieldArray( array $fieldArray, $table, $id, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj ) {
if ($table == 'tx_navolspmanager_domain_model_dataset') {
$fieldArray['geolng'] = 01.001; // for testing purposes
var_dump($fieldArray); die();
}
else{
var_dump($table); die();
}
}
}
当前状态: 保存时它不会崩溃或显示任何内容,只是顺利保存并忽略此功能。
谁能告诉我我在这里缺少什么?
已解决:
在我的 ext_localconf.php 中,命名空间中只缺少一个“/”...
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][] =
'EXT:navolspmanager/Classes/Hooks/GetGeoCodesHook.php:\NachVORNE\Navolspmanager\Hooks\GetGeoCodesHook';
改进:
根据其他用户输入更新一个字段时,我们应该使用 'processDatamap_postProcessFieldArray' 函数。这样 trim、日期和数字等内容在我们 grep 输入的那一刻就已经完成了。