typo3 - 使用带有“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]);
希望有人知道我在这里做错了什么。我一直在尝试这个,但没有得到它。
在此先感谢您的帮助。
解决方案
这可能是因为每个表中的每个记录插入/更新都会调用“afterDatabaseOperations”,并且记录和类别之间的关系尚未建立。
只有在完成所有插入/更新后,processRemapStack
DataHandler 才会调用该方法,该方法设置/修复各种记录之间的所有关系(例如,在数据映射中存在“NEW..”关系的任何地方,都会设置正确的 uid )。
您可以使用的唯一钩子,所有记录具有正确关系的地方是processDatamap_afterAllOperations
钩子,您可以在process_datamap
DataHandler 类的最后找到它。
不过,那个只需要一个参数(DataHandler 实例),因此您可能必须尝试使用 DataHandler 引用的“datamap”属性获取插入的新闻记录。
推荐阅读
- wordpress - 在 WordPress 中将 Elementor 工具用于默认主页的问题
- signal-processing - LP 阶数和采样频率对语音共振峰的影响
- javascript - 反应功能自定义按钮未注册点击
- python - 在没有 CGI 的情况下将 html 表单值发布到 python 脚本
- nginx - Nginx 如何在不违反其他规则的情况下将标头应用于特定文件
- javascript - 由于不同的 url,cookie 不适用于 react 项目的两个不同 url
- python - 获取df中几个值的最小值和最大值
- windows - Windows批处理脚本或命令提示符有没有办法仅列出某个文件夹中的目录而不包括硬盘驱动器?
- python - 如何将数据添加到文件而不是重写?
- node.js - 通过Node js使用outlook smtp发送电子邮件