首页 > 解决方案 > 使用带有“tx_news_domain_model_news”和状态“new”的“processDatamap_afterDatabaseOperations”最终没有空类别

问题描述

我在我的扩展程序中使用“processDatamap_afterDatabaseOperations”挂钩将内容从新创建的新闻 (tx_news_domain_model_news) 传输到 API。

TYPO3 版本是 6.2.11,如果我 var_dump 或尝试使用 $record->getCategories() 访问类别,它是空的。与相关文件相同,falmedia 有效。这是我的代码:

public function processDatamap_afterDatabaseOperations($status, $table, $id, array $fieldArray, \TYPO3\CMS\Core\DataHandling\DataHandler &$pObj) {
    if ($table == 'tx_news_domain_model_news' && $status == 'new') {
        $objectManager  = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
        $news           = $objectManager->get('GeorgRinger\News\Domain\Repository\NewsRepository');
        $record         = $news->findByUid($pObj->substNEWwithIDs[$id]);

希望有人知道我在这里做错了什么。我一直在尝试这个,但没有得到它。

在此先感谢您的帮助。

标签: typo3typo3-6.2.xtypo3-extensionstx-news

解决方案


这可能是因为每个表中的每个记录插入/更新都会调用“afterDatabaseOperations”,并且记录和类别之间的关系尚未建立。

只有在完成所有插入/更新后,processRemapStackDataHandler 才会调用该方法,该方法设置/修复各种记录之间的所有关系(例如,在数据映射中存在“NEW..”关系的任何地方,都会设置正确的 uid )。

您可以使用的唯一钩子,所有记录具有正确关系的地方是processDatamap_afterAllOperations钩子,您可以在process_datamapDataHandler 类的最后找到它。

不过,那个只需要一个参数(DataHandler 实例),因此您可能必须尝试使用​​ DataHandler 引用的“datamap”属性获取插入的新闻记录。


推荐阅读