【问题标题】:TYPO3: Set PAGE_TSCONFIG_STR in TCA for foreign_table_whereTYPO3:在 TCA 中为 foreign_table_where 设置 PAGE_TSCONFIG_STR
【发布时间】:2019-02-03 12:44:29
【问题描述】:

使用以下 TCA 配置,我正在尝试为 foreign_table_where 设置 PAGE_TSCONFIG_STR 标记

TCA 字段配置:

'my_field' => [
    'exclude' => 1,
    'l10n_mode' => 'mergeIfNotBlank',
    'label' => 'The label',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'enableMultiSelectFilterTextfield' => true,
        'foreign_table' => 'tx_my_foreign_table',
        'foreign_table_where' => ' ###PAGE_TSCONFIG_STR### AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = ###REC_FIELD_sys_language_uid### ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC',
        'MM' => 'tx_my_table_mm',
        'size' => 10,
        'autoSizeMax' => 30,
        'maxitems' => 99,
    ],
],

一旦我设置了以下 Page TSConfig,我就再也没有任何外国记录了:

TCEFORM.tx_table.my_field.PAGE_TSCONFIG_STR = AND tx_my_foreign_table.pid = 1

这在 TYPO3 7 中运行良好,但在 TYPO3 8 中停止运行。我需要为 TYPO3 8 更改任何内容吗?

编辑

我进行了更多调试,并将此问题跟踪到第 1139 行的 TYPO3\CMS\Backend\Form\FormDataProvider\AbstractItemProvider 类。您将在此处找到以下代码:

$pageTsConfigString = $connection->quote($pageTsConfigString);

这导致'AND tx_my_foreign_table.pid = 1'(带引号!)将生成这个foreignTableClause - 由于引号,这当然是错误的:

'AND tx_mdnewsauthor_domain_model_newsauthor.pid = 1' AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = 0 ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC

现在我的新问题是:这是一个错误还是我做错了什么?

【问题讨论】:

  • 您的问题在于 '###PAGE_TSCONFIG_STR###' 在 TSconfig 页面中为此标记设置了一个值。使用 $ GLOBALS ['TYPO3_DB'] -> quoteStr () 检查此值并备份您的 SQL 命令。 “$ GLOBALS ['TYPO3_DB'] -> quoteStr ()”现在是你的问题。
  • @episch 感谢四位您的评论!这正是我在最后几分钟发现的 ;-) 奇怪的是,它在 TYPO3 7 中工作,所以引用是用 $pageTsConfigString = $connection->quote($pageTsConfigString); 完成的,而在 TYPO3 8 中它是由 $pageTsConfigString = $connection->quote($pageTsConfigString); 完成的所以哪种行为是意图是对的?它应该从来没有工作过吗?
  • 你不能在引用中写###PAGE_TSCONFIG_STR###。你必须 concat 或类似的东西来准备你的 TypoScript Where SQL 语句。
  • @episch 你能指出我正确的方向吗?我怎样才能连接字符串?

标签: typo3 typoscript typo3-8.x


【解决方案1】:

不要把SQL代码放到TsConfig里,放到TCA里。

'foreign_table_where' => ' AND ( ###PAGE_TSCONFIG_STR### = \'FALSE\' OR tx_my_foreign_table.pid = ###PAGE_TSCONFIG_STR### ) AND tx_my_foreign_table.deleted = 0 AND tx_my_foreign_table.hidden = 0 AND tx_my_foreign_table.sys_language_uid = ###REC_FIELD_sys_language_uid### ORDER BY tx_my_foreign_table.lastname ASC, tx_my_foreign_table.firstname ASC',

TCEFORM.tx_table.my_field.PAGE_TSCONFIG_STR = FALSE

【讨论】:

  • 嗯,在 TsConfig 中包含 SQL 字符串的目标是,pid 是可选的。使用此 TCA 配置,它是强制性的。还有其他方法可以让它再次成为可选吗?
  • 不知道是否允许多个###PAGE_TSCONFIG_STR###,但你可以试试AND ( ###PAGE_TSCONFIG_STR### IS NULL OR ###PAGE_TSCONFIG_STR### = '' or tx_my_foreign_table.pid = ###PAGE_TSCONFIG_STR### ) AND ....
  • 你是我的个人英雄,这行得通!!!在 TsConfig 我默认使用TCEFORM.tx_table.my_field.PAGE_TSCONFIG_STR = FALSE,我的 TCA 看起来像这样AND ( ###PAGE_TSCONFIG_STR### = \'FALSE\' OR tx_my_foreign_table.pid = ###PAGE_TSCONFIG_STR### ) AND .... 如果您相应地编辑您的答案,我会接受它。非常感谢!
  • @chris 我确实根据您的评论编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多