那个吓人的域建模工作可能是您最好的选择 :)
使用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
);
根据这个网站,下一步是将您的插件添加到新内容元素向导中,如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
}
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);