【问题标题】:Using "processDatamap_afterDatabaseOperations" with "tx_news_domain_model_news" and status "new" ends up without empty category使用带有“tx_news_domain_model_news”和状态“new”的“processDatamap_afterDatabaseOperations”最终没有空类别
【发布时间】:2019-12-14 19:39:03
【问题描述】:

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

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    你可以使用的唯一钩子是processDatamap_afterAllOperations钩子,你可以在DataHandler类的process_datamap的最后找到它。

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

    【讨论】:

    • 感谢您的回复。我对此有一种不好的预感。 :-) 我可以从 processDatamap_afterAllOperations 中获取 ID 和状态吗?或者这是错误的方法?
    • 您将获得一个 DataHandler 类的实例作为该方法的第一个参数。该类有一个“datamap”属性,其中包含已插入/更新的记录。像$dh->datamap['tx_news_domain_model_news'] 这样的东西可以给你一个插入/更新的新闻记录的关联数组(uid => 记录)(虽然可能是空的),如果 uid 以“NEW ...”开头,那么它就是一个插入的记录。 ..但我不知道这是否是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多