【问题标题】:overwrite tt_content column only for custom content element仅为自定义内容元素覆盖 tt_content 列
【发布时间】:2015-06-24 11:01:59
【问题描述】:

我创建了一个自定义内容元素,但没有扩展 tt_content 列,因为数据库中的现有字段足以满足我的需要。

我正在使用“header”、“header_link”和“image”,但我需要“image”列在我的自定义内容元素中使用时具有不同的 TCA 配置。

我可以全局更改配置:

$GLOBALS['TCA']['tt_content']['columns']['image']['config']['maxitems'] = 1;

但这不是我想要的。

类似

$GLOBALS['TCA']['tt_content']['my_custom_element']['columns']['image']['config']['maxitems'] = 1;

$GLOBALS['TCA']['tt_content']['columns']['my_custom_element']['image']['config']['maxitems'] = 1;

不工作。

有人知道如何完成我想要的吗?谢谢! :-)

【问题讨论】:

    标签: configuration typo3 typo3-7.x


    【解决方案1】:

    尚未记录,但以下代码适用于 TYPO3 7.3

    $GLOBALS['TCA']['tt_content']['types']['my_custom_element']['columnsOverrides'] = array(
      'image' => array(
        'config' => array(
          'maxitems' => 1
        )
      )
    );
    

    【讨论】:

      【解决方案2】:

      @dmnkhhn 是对的。如果您的 TYPO3 CMS 版本更新或等于 TYPO3 CMS 7.3,以下是您的解决方案

      $GLOBALS['TCA']['tt_content']['types'][$myCType]['columnsOverrides']['images']['config']['maxitems'] = 1;
      

      请注意,您必须将新插件类型配置为 ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT 才能正常工作。

      示例

      查看 Configuration 后端模块 TCA 部分并浏览(折叠)tt_content/types/html/columnsOverrides 并查看 TYPO3 核心如何处理 HTML 内容的 bodytext 字段的覆盖元素。

      配置后端模块是一个很好的工具,可以通过查看其他人如何完成您想要的事情来学习和理解 TCA 和其他全局变量。

      【讨论】:

        【解决方案3】:

        列的 TCA 配置是某种 final,这意味着它们被缓存一次,并且不可能根据任何条件对一个字段使用不同的配置。

        典型的解决方案是添加自定义图像字段,即。 my_imagett_content 并仅替换您的 CE 类型中的原始 image 字段

        喜欢(示例):

        $GLOBALS['TCA']['tt_content']['types']['Tx_Your_Type']['showitem'] = $GLOBALS['TCA']['tt_content']['types']['image']['showitem'];
        $GLOBALS['TCA']['tt_content']['types']['Tx_Your_Type']['showitem'] = str_replace(',image ,', ',my_image ,', $GLOBALS['TCA']['tt_content']['types']['Tx_Your_Type']['showitem']);
        

        【讨论】:

        • 我已经尝试创建一个新列:$GLOBALS['TCA']['tt_content']['columns']['my_custom_element_image'] = $GLOBALS['TCA']['tt_content']['columns']['image']; $GLOBALS['TCA']['tt_content']['columns']['my_custom_element_image']['config']['maxitems'] = 1; ... 并将该新列添加到我的 CE 类型,但我无法保存该元素,因为“my_custom_element_image”不是tt_content 表。
        • 因为您在ext_tables.sql 中也需要它,请在此处查看一些示例:docs.typo3.org/typo3cms/TCAReference/ExtendingTca/Examples/… ...顺便说一句,您使用的是哪个版本的 TYPO3?为您的问题添加适当的标签。
        • 我使用的是 TYPO3 7.3——除此之外,我完全知道自定义列要求该列也存在于 ext_tables.sql 中。新专栏不是我打算创建的。我希望有一个解决方案允许我使用现有的列,只需为自定义内容元素进行新配置。
        • 我们如何覆盖 imagecols 项目列表我只需要 2,3,4,6 个项目。但似乎 columnoverride 没有帮助。它只是更改列表但没有删除任何默认项目。跨度>
        【解决方案4】:

        使用另一列的配置覆盖一个字段,如下所示:

        $GLOBALS['TCA']['tt_content']['types']['myType']['columnsOverrides']['header']['config'] = 
            $GLOBALS['TCA']['tt_content']['columns']['header_link']['config'];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-24
          • 2011-12-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多