TYPO3:在 TCA 中使用 ###PAGE_TSCONFIG_ID### 和 addRecord
TYPO3: Using ###PAGE_TSCONFIG_ID### with addRecord in TCA
手头的问题与 TCA 及其 addRecord
选项有关,它应该将新记录保存到由 ###PAGE_TSCONFIG_ID###
配置的特定 pid。 (TYPO3 8.7.24, php 7.2)
websites
扩展有一个 tx_rwfm_domain_model_websitecategory
和一个 tx_rwfm_domain_model_website
table,通过 m:m table 关联。这个想法是创建网站类别,然后收集分配给类别的网站。在 BE 中,类别 (pid=24) 和网站 (pid=12) 在站点树中都有自己的文件夹。 websitecategory
有一个 multiSelectField 可以轻松 select 网站并将它们分配到相关类别。 "website" 还有一个用于类别的 multiSelectField,可以轻松地将网站分配给多个类别。
到目前为止一切正常。
现在我遇到了这种情况:
我想将网站添加到分类中,所以我在列表视图中打开websitecategory
文件夹页面。
我现在发现我要添加的网站还没有创建
我没有关闭 websitecategory
页面,而是单击 websites
的 multiSelectField 旁边的 "addRecord"(m:m 连接)
打开新的 window 创建新网站,"save and close" 将我带回网站类别页面,在那里我可以看到新网站已添加到 select离子表.
要点是:新网站必须在其自己的文件夹页面 (pid=12) 中创建,而不是在网站类别页面 (pid=24) 中创建。为此,有 属性 ###PAGE_TSCONFIG_ID###
,我尝试这样配置:
// TCA of websitecategory
return [
[...],
'columns' => [
'websites' => [
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'enableMultiSelectFilterTextfield' => true,
'foreign_table' => 'tx_rwfm_domain_model_website',
'foreign_table_where' => 'AND tx_rwfm_domain_model_website.sys_language_uid IN (-1,0) ORDER BY tx_rwfm_domain_model_website.title ASC',
'MM' => 'tx_rwfm_domain_model_website_websitecategory_mm',
'MM_opposite_field' => 'categories',
'fieldControl' => [
'editPopup' => [...],
'addRecord' => [
'disabled' => false,
'options' => [
'setValue' => 'prepend',
'title' => 'Create a new website record',
'table' => 'tx_rwfm_domain_model_website',
'pid' => '###PAGE_TSCONFIG_ID###',
],
],
]
]
]
[...]
]
按照文档 https://docs.typo3.org/typo3cms/TSconfigReference/8.7/PageTsconfig/TCEform/Index.html?highlight=page_tsconfig_id
我将其添加到我的页面 TSconfig:
// TSconfig
TCEFORM {
tx_rwfm_domain_model_website {
pid.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
pid.PAGE_TSCONFIG_ID = 28
}
}
不幸的是,这不起作用。相反,TYPO3 尝试将其添加到 [root_level] 0, where the table is not allowed
。
但是,如果我将 TCA
-> addRecord
中的 ###PAGE_TSCONFIG_ID###
替换为 pid 的硬编码值 12
,该网站确实保存在正确的页面文件夹中pid 12.
如何配置 TSconfig 才能使保存过程正常工作?
据我阅读源代码,这仅适用于 foreign_table_where
.
中定义的值
经过相当长的时间(实际上是几年!),我终于清楚了,您需要将 PID_TSCONFIG_ID
分配给的字段必须是充当枢轴的字段到 m:m 关系。或:反场。更令人困惑的是,根据定义,相反的字段只能在关系的一侧定义。因此,对于 "other side",您需要查看相关 table 的名称并使用该名称。
在上面的示例中,这意味着必须使用 categories
而不是 pid
:
// TSconfig
TCEFORM {
tx_rwfm_domain_model_website {
categories.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
websites.PAGE_TSCONFIG_ID = 28
}
}
这样,记录就会保存到给定的页面 ID。谢谢 TYPO3,提供关于该主题的如此神秘的文档! :-(
会尽快在这方面改进文档。
在常量 PAGE_TSCONFIG_ID
之前使用 pid
作为 table 引用很可能是您要处理的错误字段。所以这个:
TCEFORM {
tx_rwfm_domain_model_website {
pid.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
pid.PAGE_TSCONFIG_ID = 28
}
}
应该变成这样:
TCEFORM {
tx_rwfm_domain_model_website {
[field_of_related_table].PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
[field_of_related_table].PAGE_TSCONFIG_ID = 28
}
}
手头的问题与 TCA 及其 addRecord
选项有关,它应该将新记录保存到由 ###PAGE_TSCONFIG_ID###
配置的特定 pid。 (TYPO3 8.7.24, php 7.2)
websites
扩展有一个 tx_rwfm_domain_model_websitecategory
和一个 tx_rwfm_domain_model_website
table,通过 m:m table 关联。这个想法是创建网站类别,然后收集分配给类别的网站。在 BE 中,类别 (pid=24) 和网站 (pid=12) 在站点树中都有自己的文件夹。 websitecategory
有一个 multiSelectField 可以轻松 select 网站并将它们分配到相关类别。 "website" 还有一个用于类别的 multiSelectField,可以轻松地将网站分配给多个类别。
到目前为止一切正常。
现在我遇到了这种情况:
我想将网站添加到分类中,所以我在列表视图中打开
websitecategory
文件夹页面。我现在发现我要添加的网站还没有创建
我没有关闭
websitecategory
页面,而是单击websites
的 multiSelectField 旁边的 "addRecord"(m:m 连接)打开新的 window 创建新网站,"save and close" 将我带回网站类别页面,在那里我可以看到新网站已添加到 select离子表.
要点是:新网站必须在其自己的文件夹页面 (pid=12) 中创建,而不是在网站类别页面 (pid=24) 中创建。为此,有 属性 ###PAGE_TSCONFIG_ID###
,我尝试这样配置:
// TCA of websitecategory
return [
[...],
'columns' => [
'websites' => [
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'enableMultiSelectFilterTextfield' => true,
'foreign_table' => 'tx_rwfm_domain_model_website',
'foreign_table_where' => 'AND tx_rwfm_domain_model_website.sys_language_uid IN (-1,0) ORDER BY tx_rwfm_domain_model_website.title ASC',
'MM' => 'tx_rwfm_domain_model_website_websitecategory_mm',
'MM_opposite_field' => 'categories',
'fieldControl' => [
'editPopup' => [...],
'addRecord' => [
'disabled' => false,
'options' => [
'setValue' => 'prepend',
'title' => 'Create a new website record',
'table' => 'tx_rwfm_domain_model_website',
'pid' => '###PAGE_TSCONFIG_ID###',
],
],
]
]
]
[...]
]
按照文档 https://docs.typo3.org/typo3cms/TSconfigReference/8.7/PageTsconfig/TCEform/Index.html?highlight=page_tsconfig_id
我将其添加到我的页面 TSconfig:
// TSconfig
TCEFORM {
tx_rwfm_domain_model_website {
pid.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
pid.PAGE_TSCONFIG_ID = 28
}
}
不幸的是,这不起作用。相反,TYPO3 尝试将其添加到 [root_level] 0, where the table is not allowed
。
但是,如果我将 TCA
-> addRecord
中的 ###PAGE_TSCONFIG_ID###
替换为 pid 的硬编码值 12
,该网站确实保存在正确的页面文件夹中pid 12.
如何配置 TSconfig 才能使保存过程正常工作?
据我阅读源代码,这仅适用于 foreign_table_where
.
经过相当长的时间(实际上是几年!),我终于清楚了,您需要将 PID_TSCONFIG_ID
分配给的字段必须是充当枢轴的字段到 m:m 关系。或:反场。更令人困惑的是,根据定义,相反的字段只能在关系的一侧定义。因此,对于 "other side",您需要查看相关 table 的名称并使用该名称。
在上面的示例中,这意味着必须使用 categories
而不是 pid
:
// TSconfig
TCEFORM {
tx_rwfm_domain_model_website {
categories.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
websites.PAGE_TSCONFIG_ID = 28
}
}
这样,记录就会保存到给定的页面 ID。谢谢 TYPO3,提供关于该主题的如此神秘的文档! :-( 会尽快在这方面改进文档。
在常量 PAGE_TSCONFIG_ID
之前使用 pid
作为 table 引用很可能是您要处理的错误字段。所以这个:
TCEFORM {
tx_rwfm_domain_model_website {
pid.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
pid.PAGE_TSCONFIG_ID = 28
}
}
应该变成这样:
TCEFORM {
tx_rwfm_domain_model_website {
[field_of_related_table].PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
[field_of_related_table].PAGE_TSCONFIG_ID = 28
}
}