Ответ 1
Этот пугающий материал для моделирования домена, вероятно, лучший вариант для вас:)
Создайте расширение с плагином FE, который удерживает и отображает данные по своему усмотрению, поэтому вы можете разместить его как "Вставить плагин". Можно добавить этот плагин как пользовательский CType, и я найду образец для вас, но немного позже.
Примечание. Вам не нужно создавать дополнительные модели, так как вы можете хранить требуемые данные, т.е. в FlexForm.
От FE-плагина до CType
Предположим, что у вас есть расширение с ключом hello
, которое содержит News
контроллер с list
и single
действиями в нем.
В вашем ext_tables.php
вы зарегистрировали плагин FE:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin($_EXTKEY, 'News', 'Scared Hello News');
Когда он работает нормально, вы можете добавить его в список типов контента (доступный в 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
);
Следующая часть (на основе этого сайта) добавляет ваш плагин к Мастере создания новых элементов содержимого, как это отмечено в TYPO3 Wiki, так как TYPO3 ver. 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]
node в свой собственный. Снова в 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);