gpt4 book ai didi

typo3 - 在 CommandController 中获取翻译记录

转载 作者:行者123 更新时间:2023-12-02 02:53:24 25 4
gpt4 key购买 nike

这几天我一直在搜索和调试如何获取Typo3 v8.7 中 CommandController 中 DomainModel 对象的翻译版本。

在 Typo3 4.5/4.7 中,我做了以下事情:- 输入:默认语言的DomainModel- 构建一个查询,查找 l10n_parent 与 给定领域模型- 获取具有所需 sys_language_uid 的新领域模型

不幸的是,这在 Typo3 v8.7 中不再起作用。我总是得到默认语言的领域模型。

我已经将其追溯到方法 Typo3DbBackend::doLanguageAndWorkspaceOverlay通过 Typo3DbBackend::getObjectDataByQuery

调用

查询返回正确的(翻译的)行(在调试器和 mysql 查询日志中看到),但随后变量$rowdoLanguageAndWorkspaceOverlay 中被覆盖,无论我如何设置 querySettings setLanguageOverlayModesetLanguageMode

那么在命令 Controller ?

更新:

我想我更进了一步。如果我将 ->setQueryLanguage(1) 添加到查询设置中,doLanguageAndWorkspaceOverlay() 会尝试获取语言 = 1 的翻译记录。但为了成功,我需要通过设置 $GLOBALS['TSFE']->gr_list = "0,-2"; 欺骗 FrontendGroupRestriction 类。

doLanguageAndWorkspaceOverlay() 返回的数组现在包含所有翻译的条目,除了 uid,它仍然是来自记录的 uid主要语言。已翻译记录的 uid 存储在 _LOCALIZED_UID 中。

现在我的问题是我仍然在主语言中得到记录,因为 DataMapper->mapSingleRow()(通过 DataMapper->map() 调用)有某种对象缓存,从而以默认语言返回对象(因为 uid 仍然是主要语言的记录之一)。

这一切似乎有点老套。那么我的问题又来了:在 CommandController 中获取翻译域模型的正确方法是什么?

谢谢,米卡

p.s.:我已经在后端设置了第二语言,并且创建翻译记录工作得很好。我的问题只是如何在 CommandController 中获取现有的翻译记录。

最佳答案

替代方案:

基于上面的解决方案,我决定我几乎可以做任何事情靠我自己。所以我现在要做的是

i) 为相应的表创建一个独立的查询构建器:

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($tableName);`

ii) 选择具有所需 l10n_parent 和 sys_language_uid 的记录

$query = $queryBuilder->select('*')
->from($tableName)
->where($queryBuilder->expr()->eq('sys_language_uid', $langId))
->andWhere($queryBuilder->expr()->eq('l10n_parent', $parentUid))
->execute();

iii) 获取所有记录到一个数组中

$rows = $query->fetchAll();

iv) 手动调用DataMapper 获取对象

$dataMapper = $this->objectManager->get(DataMapper::class);
$translated = $dataMapper->map($className, $rows);

我知道它不再与 ModelRepository 有任何关系,但它现在工作得很好......

这就是所有的人

关于typo3 - 在 CommandController 中获取翻译记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50851846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com