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

Urs*_*Urs 10 templates typo3 fluid

在TYPO3 6.x中,快速创建自定义内容元素的简单方法是什么?

一个典型的例子(也许是一组推荐书):

在后端(有足够的标签):

  • 一个图像
  • 输入字段
  • textarea

渲染时:

  • 图像大小调整为xy
  • 输入包含在h2中
  • textarea通过parseFunc传递并包含更多标记

理想情况下,这些在页面模块中可用作cType,但至少在列表模块中可用.并使用流体模板.

我的问题:

  • 从另一个CMS我习惯于同时应用于BE和FE的内容项模板(你为它应该做什么编写模板,然后只有那种类型的内容元素有一个后端项) - 但那是不是流体如何工作 - 或者可以做到吗?

  • 是否有可以处理此类自定义内容元素的扩展(除了Templavoila)?

  • 或者我是否必须为每个此类字段类型创建自定义extbase/fluid扩展?

  • 顺便说一句:是否有一个推荐的新extbase kickstarter教程?我被所有领域建模的东西吓跑了.

bie*_*ior 23

那个惊吓域名建模的东西可能是最好的选择:)

使用FE插件创建一个扩展,它可以根据需要保存和显示数据,因此您可以将其设置为"插入插件".可以将此插件添加为自定义CType,我会为您找到一个样本,但稍后会发现.

注意,您不需要创建其他模型,因为您可以存储所需的数据,即.在FlexForm中.

从FE插件到CType

让我们考虑你有一个带密钥的扩展,hello其中包含News控制器listsingle操作.

在你的ext_tables.php注册FE插件:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin($_EXTKEY, 'News', 'Scared Hello News');
Run Code Online (Sandbox Code Playgroud)

当它工作正常时,你可以将它添加到内容类型列表(在TCA中可用),只需configurePlugin在你的方法中添加第五个参数ext_localconf.php:

\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
);
Run Code Online (Sandbox Code Playgroud)

下一部分(基于此网站)将您的插件添加到新内容元素向导中,TYPO3版本中所示,在TYPO3 Wiki中注意到.6.0.0改变了一点,所以最简单的方法是在你的内容中加入这样的东西ext_tables.php:

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

并在/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
}
Run Code Online (Sandbox Code Playgroud)

需要注意的是正确的密钥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'];
Run Code Online (Sandbox Code Playgroud)

再次: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';
Run Code Online (Sandbox Code Playgroud)

访问Extbase Controller中的字段:

幸运的是最简单的部分,因为您只需将其作为数组访问:

$currentTtContent = $this->configurationManager->getContentObject()->data;
$header = $currentTtContent['header'];
debug($currentTtContent);
debug($header);
Run Code Online (Sandbox Code Playgroud)