如何在TYPO3 6.x中快速创建自定义内容元素

11
在TYPO3 6.x中,有什么简单的方法可以快速创建自定义内容元素?
一个典型的例子(可能是一组推荐信):
在后端(带有足够的标签):
  • 图像
  • 输入字段
  • 文本区域
在呈现时:
  • 图像调整大小为xy
  • 输入字段包含在h2中
  • 通过parseFunc传递的文本区域并包含更多的标记
理想情况下,这些将在页面模块中作为cType可用,但至少在列表模块中使用fluid模板。
我的问题:
  • 我从另一个CMS中习惯于将内容项模板同时应用于BE和FE(您编写模板以执行其操作,然后有一个专门针对该类型的内容元素的后端条目),但是fluid不起作用-或者它可以完成吗?

  • 是否有扩展程序处理此类自定义内容元素(而不是Templavoila)?

  • 还是说我必须为每种字段类型创建自定义extbase / fluid扩展?

  • 还有,顺便问一下:有没有关于新extbase kickstarter的推荐教程?我被所有那些域建模的东西吓到了。

  • 2个回答

    24

    那个吓人的域建模工作可能是您最好的选择 :)

    使用FE插件创建一个扩展程序,以您想要的方式保存和显示数据,因此您可以将其放置在“插入插件”中。可以将此插件添加为自定义CType,并且我会稍后为您找到示例。

    请注意,您无需创建额外的模型,因为可以在FlexForm中存储所需的数据。

    从FE插件到CType

    让我们考虑您有一个带有键值hello的扩展程序,其中包含带有listsingle操作的News控制器。

    在您的ext_tables.php中,您已注册了一个FE插件:

    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin($_EXTKEY, 'News', 'Scared Hello News');
    

    如果一切正常,只需在ext_localconf.php中的configurePlugin方法中添加第五个参数,就可以将其添加到内容类型列表(在TCA中可用)中:

    \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
        'TYPO3.' . $_EXTKEY,
        'News',
        array('News' => 'list, show'),
        array('News' => ''),
        \TYPO3\CMS\Extbase\Utility\ExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT // <- this one
    );
    

    根据这个网站,下一步是将您的插件添加到新内容元素向导中,如TYPO3 Wiki所述。自TYPO3版本6.0.0以来已有所变化,因此最简单的方法是将以下内容添加到您的ext_tables.php文件中:

    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig('<INCLUDE_TYPOSCRIPT: source="FILE:EXT:hello/Configuration/TypoScript/pageTsConfig.ts">');
    

    /typo3conf/ext/hello/Configuration/TypoScript/pageTsConfig.ts文件中添加以下内容:

    mod.wizards.newContentElement.wizardItems.plugins.elements.tx_hello_news {
        icon = gfx/c_wiz/regular_text.gif
        title = Scared Hello News
        description = Displays Scared News
        tt_content_defValues.CType = hello_news
    }
    
    # Below the same for TemplaVoila
    templavoila.wizards.newContentElement.wizardItems.plugins.elements.tx_hello_news {
        icon = gfx/c_wiz/regular_text.gif
        title = Scared Hello News
        description = Displays Scared News
        tt_content_defValues.CType = hello_news
    }
    

    请注意,正确的键名tx_hello_news应该是小写字母tx_$_EXTKEY和插件名称的组合——这些在registerPlugin方法中使用。

    如果你已经感到无聊了,可以在这里停止;)

    将tt_content字段带回您的CType

    上述步骤将导致您的元素在TCA中无法使用典型字段,因此您需要复制一些内容或创建自己的内容。要查看它如何工作,请在后端的左侧菜单中选择ADMIN TOOLS > Configuration > TCA > tt_content > types

    在那里,您将找到系统中的所有类型,选择最常用的类型并将其[showitem]节点复制到您自己的节点中。同样,在ext_tables.php中添加以下PHP数组:

    $TCA['tt_content']['types']['hello_news']['showitem'] = $TCA['tt_content']['types']['textpic']['showitem'];
    

    再次强调:hello_news是小写的$_EXTKEY和FE插件名称的组合...

    当然,如果需要,您可以逐个按自定义字符串组合自己的字段集:

    $TCA['tt_content']['types']['hello_news']['showitem'] = '--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.general;general, --palette--;LLL:EXT:cms/locallang_ttc.xml:palette.header;header';
    

    访问Extbase控制器中的字段:

    幸运的是,这是最简单的部分,因为您可以将其视为数组进行访问:

    $currentTtContent = $this->configurationManager->getContentObject()->data;
    $header = $currentTtContent['header'];
    debug($currentTtContent);
    debug($header);
    

    1
    很酷,我已经通过Mittwald的这篇德语介绍(https://www.mittwald.de/fileadmin/downloads/pdf/dokus/Extbase_Fluid_Dokumentation.pdf)感到非常放心。 - Urs
    我已经创建了一个非常简单的列表扩展(仅限列表视图),它肯定比旧的kickstarter更快。我对自定义CType示例非常感兴趣。 - Urs
    哇 - 非常感谢 - 这需要一些时间来处理 - 太棒了 :-) - Urs
    嗨@biesior,尝试这个确实花了一些时间。我可以创建插件并将其添加到向导中。但是我还没有理解“将tt_content的字段带回您的CType”是什么意思。我认为这会以某种方式将我为扩展项定义的字段(可以通过列表视图进行编辑)带回到tt_content区域,这正是我正在寻找的。但是您的解决方案做了一些不同的事情,或者我错了吗? - Urs
    更新此线程:还请查看Daniel在https://usetypo3.com/custom-fsc-element.html上的演示。 - Urs

    4

    DCE内容无法像我所期望的那样在整个网站中得到重复使用。https://typo3.org/extensions/repository/view/mask是更灵活的竞争对手-通过添加或重用数据库字段,您可以在之后使用TypoScript或其他方式进行查询。 - Urs

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接