【问题标题】:TYPO3: Using ###PAGE_TSCONFIG_ID### with addRecord in TCATYPO3:在 TCA 中使用 ###PAGE_TSCONFIG_ID### 和 addRecord
【发布时间】:2019-05-15 10:02:57
【问题描述】:

手头的问题与 TCA 及其addRecord 选项有关,它应该将新记录保存到由###PAGE_TSCONFIG_ID### 配置的特定 pid。 (TYPO3 8.7.24, php 7.2)

websites 扩展有一个 tx_rwfm_domain_model_websitecategory 和一个 tx_rwfm_domain_model_website 表,通过 m:m 表关联。这个想法是创建网站类别,然后收集分配给一个类别的网站。在 BE 中,类别 (pid=24) 和网站 (pid=12) 在站点树中都有自己的文件夹。 websitecategory 有一个 multiSelectField 可以轻松选择网站并将它们分配给相关类别。而且“网站”还有一个用于类别的 multiSelectField,可以轻松地将网站分配给多个类别。

到目前为止一切正常。

现在我遇到了这种情况:

  • 我想将网站添加到类别中,因此我在列表视图中打开websitecategory 文件夹页面。

  • 我现在意识到我要添加的网站尚未创建。

  • 我没有关闭websitecategory页面,而是点击websites的multiSelectField旁边的“addRecord”(m:m连接)

  • 会打开一个新窗口以创建新网站,“保存并关闭”将我带回网站类别页面,我可以看到新网站已添加到选择列表中。

    李>

重点是:新网站必须在其自己的文件夹页面 (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 才能使保存过程正常工作?

【问题讨论】:

    标签: typo3 typo3-8.x


    【解决方案1】:

    在常量PAGE_TSCONFIG_ID 之前使用pid 作为表引用很可能是您要处理的错误字段。所以这个:

    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
        }
    }
    

    【讨论】:

      【解决方案2】:

      据我阅读源代码,这仅适用于foreign_table_where 中定义的值。

      【讨论】:

      【解决方案3】:

      在闲逛了很长一段时间(实际上是几年!)之后,我终于明白了,您需要将 PID_TSCONFIG_ID 分配给的字段必须是作为 m 轴心的字段: m 关系。或者:相反的领域。更令人困惑的是,根据定义,相反字段只能在关系的一侧定义。因此,对于“另一面”,您需要查看相关表的名称并使用该名称。

      在上面的示例中,这意味着必须使用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 提供了关于该主题的如此神秘的文档! :-( 将尽快在这方面改进文档。

      【讨论】:

        猜你喜欢
        • 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
        相关资源
        最近更新 更多