TYPO3:通过Extbase Extension中的Flexforms可设置时,TCA中的默认设置将被覆盖

时间:2019-02-23 18:20:24

标签: typo3 typoscript extbase flexform

我添加了通过flexforms在我的扩展程序中设置detailPid的可能性:

<ROOT>
  <type>array</type>
  <el>
    <settings.detailPid>
      <TCEforms>
        <label>
    LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:flexforms.overview.detailPid
        </label>
        <config>
          <type>group</type>
          <internal_type>db</internal_type>
          <allowed>pages</allowed>
          <size>1</size>
          <maxitems>1</maxitems>
          <show_thumbs>1</show_thumbs>
          <wizards>
            <suggest>
              <type>suggest</type>
            </suggest>
          </wizards>
        </config>
      </TCEforms>
    </settings.detailPid>
  </el>
</ROOT>

我想在我的setup.ts中通过TS设置默认的detailPid:

plugin.tx_events_eventdetail {
    settings {
        listPid = {$plugin.tx_events_eventdetail.settings.listPid}
        detailPid = {$plugin.tx_events_eventdetail.settings.detailPid}
    }
}

我的问题是,如果我未在插件中配置detailPid,则不会使用TS中的默认值。我的控制器或FLUID模板中的settings.detailPid为空。有办法解决这个问题吗?

我已经环顾四周,发现新闻扩展名具有相同的行为。

感谢您的帮助和建议!

2 个答案:

答案 0 :(得分:1)

至少扩展名tt_address和新闻的配置允许在flexform为空的情况下回退到TS。如果需要,您可以复制代码并在扩展程序中使用它。

核心没有可用的配置。

答案 1 :(得分:1)

您可以将flexforms detailPid路径重命名为settings.flexform.detailPid之类的内容,然后在您的控制器中将TS中的设置与Flexform中的设置合并,以便仅非空值生效。

ArrayUtility::arrayMergeRecursiveOverrule($this->settings, $this-settings['flexform'])

https://api.typo3.org/typo3cms/current/html/class_t_y_p_o3_1_1_c_m_s_1_1_extbase_1_1_utility_1_1_array_utility.html#af4008bc539411e9114ed53b1b007735b