那些可怕的领域建模东西可能是你的最佳选择:)
使用 FE 插件创建一个扩展,它可以根据需要保存和显示数据,因此您可以将其放置为“插入插件”。可以将此插件添加为自定义 CType,我会为您找到一个示例,但稍后会。
请注意,您无需创建其他模型,因为您可以存储所需的数据,即。在 FlexForm 中。
从 FE 插件到 CType
假设您有一个带有键 hello 的扩展,其中包含带有 list 和 single 操作的 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
);
下一部分(基于this site)是将您的插件添加到新内容元素向导,正如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);