将“ processDatamap_afterDatabaseOperations”与“ tx_news_domain_model_news”和状态“ new”一起使用时,不会出现空类别

时间:2019-12-14 19:39:03

标签: typo3 typo3-6.2.x typo3-extensions tx-news

我正在使用扩展程序中的“ 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]);

希望任何人都知道我在这里做错了。我一直在尝试这种方法,但是却一无所获。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

只有在完成所有插入/更新之后,DataHandler才会调用方法processRemapStack,该方法将设置/修复各个记录之间的所有关系(例如,在任何有“ NEW ..”关系的位置)数据图,设置了正确的uid)。

您可以使用的唯一挂钩(其中Alle记录具有正确的关系)是processDatamap_afterAllOperations挂钩,您可以在DataHandler类的process_datamap的末尾找到它。

尽管那只是一个参数(DataHandler实例),所以您可能必须尝试使用​​DataHandler引用的“ datamap”属性来获取插入的新闻记录。