Typo3 7.6 extbase 存储库匹配仅影响非本地化记录

Posted

技术标签:

【中文标题】Typo3 7.6 extbase 存储库匹配仅影响非本地化记录【英文标题】:Typo3 7.6 extbase repository matching only affect non-localized records 【发布时间】:2016-07-23 15:49:56 【问题描述】:

我想为 TYPO3 CMS 7.6 创建一个自己的 extbase 扩展。扩展必须以不同的语言运行。我发现,存储库匹配仅适用于非本地化记录。

我的存储库函数如下所示:

public function findNew() 
  $query = $this->createQuery();
  $query->getQuerySettings()->setRespectSysLanguage(true);
  $query->matching($query->equals('new', 1));
  return $query->execute();

这个函数说:显示所有带有 new = 1 的记录

示例: 我有一条未激活“新建”复选框的默认记录。现在我创建此记录的本地化版本并将“新建”复选框设置为激活。

如果我以默认语言执行 findNew() 函数,记录将不会显示。如果我用另一种语言执行该函数,即使设置了“New”标志,记录也不会显示!

换句话说:匹配只影响默认/父记录。

我正在使用以下配置设置:

config 
  sys_language_mode = strict
  sys_language_overlay = hideNonTranslated

[编辑:] 这是生成的完整 SQL 查询:

SELECT tx_extension_domain_model_table.*
FROM
tx_extension_domain_model_table
WHERE
  tx_extension_domain_model_table.new = '1'
  AND (
    tx_extension_domain_model_table.sys_language_uid = -1
    OR (
      tx_extension_domain_model_table.sys_language_uid = 1
      AND tx_extension_domain_model_table.l10n_parent = 0
    )
    OR (
      tx_extension_domain_model_table.sys_language_uid = 0
      AND tx_extension_domain_model_table.uid IN (
        SELECT tx_extension_domain_model_table.l10n_parent
        FROM tx_extension_domain_model_table
        WHERE tx_extension_domain_model_table.l10n_parent > 0
          AND tx_extension_domain_model_table.sys_language_uid = 1
          AND tx_extension_domain_model_table.deleted = 0
      )
    )
  )
  AND tx_extension_domain_model_table.deleted = 0
  AND tx_extension_domain_model_table.t3ver_state <= 0
  AND tx_extension_domain_model_table.pid <> -1
  AND tx_extension_domain_model_table.hidden = 0
  AND tx_extension_domain_model_table.starttime <= 1459780380
  AND (tx_extension_domain_model_table.endtime = 0 OR     tx_extension_domain_model_table.endtime > 1459780380)
ORDER BY tx_extension_domain_model_table.sorting ASC

...以及重要的部分:

    AND (
        tx_extension_domain_model_table.sys_language_uid = -1
    OR (
      tx_extension_domain_model_table.sys_language_uid = 1
      AND tx_extension_domain_model_table.l10n_parent = 0
    )
    OR (
      tx_extension_domain_model_table.sys_language_uid = 0
      AND tx_extension_domain_model_table.uid IN (
        SELECT tx_extension_domain_model_table.l10n_parent
        FROM tx_extension_domain_model_table
        WHERE tx_extension_domain_model_table.l10n_parent > 0
          AND tx_extension_domain_model_table.sys_language_uid = 1
          AND tx_extension_domain_model_table.deleted = 0
      )
    )
  )

这解释了我的问题。 TYPO3 在本地化时不会在 sys_language_uid = 1 中寻找 new = 1...但是为什么呢?

问题:这是错误还是功能?

【问题讨论】:

【参考方案1】:

这是 extbase 中的一个错误,请参阅此处了解更多信息:https://forge.typo3.org/issues/57272

【讨论】:

以上是关于Typo3 7.6 extbase 存储库匹配仅影响非本地化记录的主要内容,如果未能解决你的问题,请参考以下文章

TYPO3 Extbase - 重定向到 pid

TYPO3 Extbase - 在单个视图中更改浏览器页面标题

如何使用 extbase 在 TYPO3 CMS 6.0 上引导插件?

php TYPO3 Extbase - 按照逗号逗号列表的顺序获取产品

如何在typo3 V10的extbase控制器中重定向到404页面

TYPO3 升级(7.6 到 10):未找到站点配置