Как быстро создавать пользовательские элементы контента в TYPO3 6.x

В TYPO3 6.x, что является простым способом быстрого создания пользовательских элементов контента?

Типичный пример (возможно, для коллекции отзывов):

В бэкэнд (с соответствующими метками):

  • Изображение
  • Поле ввода
  • Текстовое поле

При рендеринге:

  • Изменение размера изображения на xy
  • ввод, завернутый в h2
  • textarea прошла через parseFunc и завернута в более разметку

В идеале они будут доступны в модуле страницы как cType, но, по крайней мере, в модуле списка. И используйте шаблоны жидкости.

Мои вопросы:

  • Из другой CMS я использую шаблоны элементов контента, которые применяются к BE и FE одновременно (вы пишете шаблон для чего он должен делать, а затем есть бэкэнд-элемент только для этого типа элемент содержимого) - но это не так, как работает жидкость - или это можно сделать?

  • Есть ли расширение, которое обрабатывало бы такие элементы пользовательского контента (кроме Templavoila)?

  • Или мне нужно создать пользовательское расширение extbase/fluid для каждого такого типа поля?

  • И, между прочим: есть ли рекомендуемый учебник для нового extbase kickstarter? Я испугался всего этого материала моделирования домена.

Ответ 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);