我编写了一个考虑到多语言和多域的扩展,但遇到了 TCA 字段的问题。
控制器和存储库根据为每个根页面定义的 persistence.storagePid 常量获取结果没有问题,但我还没有找到一种方法来为 selectMultipleSideBySide TCA 字段实现相同的效果:
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'MM' => 'tx_lmyext_domain_model_model1_mm',
'foreign_table' => 'tx_myext_domain_model_model1',
'foreign_table_where' => ' AND tx_myext_domain_model_model1.sys_language_uid IN (-1,###REC_FIELD_sys_language_uid###) ORDER BY tx_locationslist_domain_model_model1.title',
'maxitems' => 1,
],
持久性设置似乎对查询没有影响,我在选择字段域的右侧看到数据库中存在的所有对象。
多选左列 | 多选右列 |
---|---|
PID 200 的对象 | |
PID 200 的对象 | |
来自 PID 90 的对象 <- should not be there |
选择 PID 90 中的对象时,由于存储库的查询设置,它不会显示在前端,但编辑器仍然可以在 TCA 字段中选择它。 有没有办法只显示特定 pid 中的项目,例如“AND tx_myext_domain_model_model1.pid IN (###STORAGE-PID###)”以及之前删除的标签###STORAGE-PID###?
到目前为止,我最接近的是“AND tx_myext_domain_model_model1.pid IN (###SITEROOT###)”,但这需要将所有对象保存在每个域的根页面内,我想将它们保存在文件夹中。
我无法直接在查询中定义 pid,因为它会根据页面树中所选的页面而变化。
我已经使用 PAGE_TSCONFIG_ID 标签进行了尝试,该标签似乎工作正常,但我希望每个域的配置仅与 TypoScript 常量一起使用,以使配置更容易。
我也尝试过使用组元素,但它的缺点是必须单独选择每个元素,并且仍然可以选择不在正确存储 pid 中的对象。
使用initializeObject()设置存储库内的存储pid也不会改变TCA内可用项目的任何内容。
自 TYPO3 v10.4 起,您可以在 SiteConfig 中为每个域/根页面定义存储 pid 为
setting.
,TYPO3 提供该值作为 TypoScript 常量和 pageTSConfig 常量。
注意:这意味着您只能定义每个 rootPage 的内容,而不能定义 rootPage/siteConfig 下树中的单个页面。参见:
https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/10.4/Feature-91080-SiteSettingsAsTsConstantsAndInTsConfig.html所以,不要在TypoScript/PageTS中直接定义存储页面值 在站点配置中定义它
对于 TYPO3 v10 和 v11:site-identifier/config.yml
settings:
myStoragePid: 123
myStoragePid: 123
调整您的 PageTS/TypoScript 以使用常量来检索值:
{$myStoragePid}
完成后,您可以在 TCA 配置的 where 条件中使用占位符标记
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'MM' => 'tx_lmyext_domain_model_model1_mm',
'foreign_table' => 'tx_myext_domain_model_model1',
'foreign_table_where' => ' AND tx_myext_domain_model_model1.pid = ###SITE:settings.myStoragePid### AND tx_myext_domain_model_model1.sys_language_uid IN (-1,###REC_FIELD_sys_language_uid###) ORDER BY tx_locationslist_domain_model_model1.title',
'maxitems' => 1,
],
参见:https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/SiteHandling/UseSiteInTCA.html我已经使用 PAGE_TSCONFIG_ID 标签进行了尝试,该标签似乎工作正常,但我希望每个域的配置仅与 TypoScript 常量一起使用,以使配置更容易。
TypoScript 专门用于前端渲染配置。期望它对后端产生影响是一个狭隘的假设。因此,您可以通过
PAGE_TSCONFIG_ID
排除工作孤立。
另一种方法是使用定义存储 pid 的字段扩展pages
表,并将其用作简单的联接 - 但是,这不包括纯 sql 中的页面根线遍历 atm。
没有其他解决方案。注意:这些类型的 TCA 值仅适用于存在正确站点/页面上下文的 Web 请求上下文。例如在 CLI 或“早期”中间件中使用它不起作用,因为 TYPO3 尚未设置正确的页面上下文(并且不能)。