Typo3 V6: Как создать контейнер элемента содержимого? (без телевизора)
Для проекта я использую Typo3 v6.0. Я ищу, чтобы создать вложенные элементы содержимого или контейнер элемента содержимого. Я хочу иметь возможность создавать встроенный макет из двух столбцов без использования специального шаблона для него. Я хочу сделать это без использования templavoila.
Расширения, которые я пробовал gridelements
, kb_nescefe
, bs_fce
, multicolumn
но они не работают, потому что они не совместимы с Typo3 V6.
Я стремлюсь к конечному результату, как прикрепленное изображение. Где встроенный двухколонный контент может быть опущен, использован один раз или использован несколько раз, содержащий любой другой элемент контента.
Я ищу самое простое решение здесь. Я предпочитаю не тратить много учебного времени на решение, подобное flux
и еще много чего ( http://fedext.net/ - выглядит круто, но пока слишком много времени)
Есть идеи?
8 ответов
Хорошо, у меня есть полу решение. Я пошел с плагином WEC Content Elements для управления пользовательскими элементами контента.
Тогда я использовал следующую flexform:
<T3DataStructure>
<ROOT>
<type>array</type>
<el>
<leftColumn>
<TCEforms type="array">
<label>Left column</label>
<config>
<type>inline</type>
<foreign_table>tt_content</foreign_table>
<maxitems>100</maxitems>
<appearance>
<showSynchronizationLink>0</showSynchronizationLink>
<showAllLocalizationLink>0</showAllLocalizationLink>
<showPossibleLocalizationRecords>0</showPossibleLocalizationRecords>
<showRemovedLocalizationRecords>0</showRemovedLocalizationRecords>
<expandSingle>1</expandSingle>
</appearance>
</config>
</TCEforms>
</leftColumn>
<rightColumn>
<TCEforms type="array">
<label>Right column</label>
<config>
<type>inline</type>
<foreign_table>tt_content</foreign_table>
<maxitems>100</maxitems>
<appearance>
<showSynchronizationLink>0</showSynchronizationLink>
<showAllLocalizationLink>0</showAllLocalizationLink>
<showPossibleLocalizationRecords>0</showPossibleLocalizationRecords>
<showRemovedLocalizationRecords>0</showRemovedLocalizationRecords>
<expandSingle>1</expandSingle>
</appearance>
</config>
</TCEforms>
</rightColumn>
</el>
</ROOT>
</T3DataStructure>
И следующая настройка typoscript:
tt_content.twoColumnContainer = COA
tt_content.twoColumnContainer {
10 = < lib.stdheader
20 = COA
20 {
wrap = <div class="twocolumn-container"> | </div>
10 = RECORDS
10 {
tables = tt_content
dontCheckPid = true
source.data = t3datastructure : pi_flexform->leftColumn
wrap = <div class="twocolumn-left"> | </div>
}
20 = RECORDS
20 {
tables = tt_content
dontCheckPid = true
source.data = t3datastructure : pi_flexform->rightColumn
wrap = <div class="twocolumn-right"> | </div>
}
}
Это привело к внутреннему элементу контента, который использует редактор IRRE для добавления / редактирования элементов контента. Контейнерный элемент не имеет предварительного просмотра, и эти два столбца расположены друг под другом (а не рядом друг с другом). Все это единственное работоспособное решение, которое я нашел после многих часов поиска в Google и опробования различных методов / плагинов.
Надеюсь, это кому-нибудь поможет.
Я являюсь автором набора расширений Fluid (Flux, Fluid Content, Fluid Pages и т. Д.) И, конечно, хотел бы помочь вам узнать об использовании FluidContent для создания FCE. Это действительно не так продвинуто, как можно опасаться. По крайней мере, он намного компактнее, чем в примере выше. Следующее достигает того же результата, что и ваш пример, в FluidContent:
TypoScript (статическая загрузка: css_styled_content, Fluid_content)
plugin.tx_fed.fce.yourname {
templateRootPath = fileadmin/Templates # if you don't want to use an extension (1)
# partial and layout root paths not defined (2)
}
Что касается (1), вы действительно, действительно должны. Использование расширения отделяет загруженные пользователем медиа и т. Д. От содержимого вашего сайта. Если вы делаете это вместо этого, просто используйте EXT:... путь к папке с личными ресурсами. А в отношении (2) эти пути необходимы только в том случае, если вы действительно хотите использовать партиалы.
Затем сам файл шаблона (автоматически определяется при добавлении пути к файлу в TS):
{namespace flux=Tx_Flux_ViewHelpers}
<f:layout name="Content" />
<f:section name="Configuration">
<flux:flexform id="columns" label="Columns" icon="path/to/iconfile.jpg">
<flux:flexform.grid>
<flux:flexform.grid.row>
<flux:flexform.grid.column>
<flux:flexform.content name="left" label="Left content" />
</flux:flexform.grid.column>
<flux:flexform.grid.column>
<flux:flexform.content name="right" label="Right content" />
</flux:flexform.grid.column>
</flux:flexform.grid.row>
</flux:flexform.grid>
</flux:flexform>
</f:section>
<f:section name="Preview">
<flux:widget.grid />
</f:section>
<f:section name="Main">
<div class="row">
<div class="span6">
<flux:flexform.renderContent area="left" />
</div>
<div class="span6">
<flux:flexform.renderContent area="right" />
</div>
</div>
</f:section>
Как видите, вы можете свободно добавлять любой HTML-код по своему усмотрению, использовать любые ViewHelpers (даже визуализировать объекты TS, если это ваша вещь). Чтобы добавить дополнительные элементы содержимого, просто добавьте новые файлы шаблонов - они будут автоматически распознаны.
Но он будет работать не так, как IRRE (чего вы также можете достичь, используя поля Flux - дайте мне знать, если вы хотите увидеть демонстрацию этого): он позволит вам использовать встроенное перетаскивание в TYPO3 для размещения вашего ребенка элементы контента в реальные контейнеры контента - как вы привыкли делать с телевидением.
Таким образом, Fluid Content, вероятно, ближе всего к телевизору.
Что касается избыточности Flux, я хотел бы дать вам представление о том, что он на самом деле выполняет:
- Кэшированное чтение TS, чтобы знать пути
- Кэшированные списки обнаруженных шаблонов
- Flux кеширует на нативный PHP, Flux использует только Fluid для хранения конфигурации (что означает, что это нативный PHP на всем протяжении)
- Сам Flux регистрирует подписчика-ловушку, который реагирует на сохраняемый контент, что замедляет бэкэнд (незаметно)
- Сам Flux не создает нагрузку на FE за одним исключением: при использовании не кэшированных плагинов (FluidContent кэшируется!) Flux может вызывать нативный кэшированный код PHP для чтения конфигураций.
- FluidContent состоит из чрезвычайно простого контроллера; вывод полностью кэшируется.
- Возможно, вы захотите добавить коллекцию VHS ViewHelper - она сама по себе создает абсолютно нулевую нагрузку: она использует ресурсы только там, где вы используете ее ViewHelpers. Он содержит кучу ViewHelpers, я уверен, что вы найдете полезным.
Поначалу это может показаться ошеломляющим, но я гарантирую, что вам нужно знать и помнить меньше, чем в pibase, FlexForm XML, TS или собственных плагинах Extbase. Если вам нужна еще большая сеть безопасности, я настоятельно рекомендую использовать схемы XSD в вашем редакторе - это позволит вам автоматически завершить специальные <flux:....>
теги и другие.
Однако: вам потребуется немного узнать о логике Fluid: что такое Layouts и Partials (вы, скорее всего, захотите использовать их в какой-то момент) и как использовать специальные теги и ссылаться на переменные (что потребуется в другие варианты использования - но не тот, который под рукой; для этого требуются только простые теги ViewHelper).
Надеюсь, это поможет. И что я уменьшил ваш страх, что Flux излишний и слишком многому научиться;)
Ура,
Клаус ака. NamelessCoder
Существует проект startnext, в котором исправлены известные ошибки в grid_elements. Afaik следующий шаг - сделать grid_elements совместимыми с TYPO3 6. Но я думаю, что для публикации потребуется несколько недель. Но, возможно, они начнутся с Версии 2 (которая будет совместима с TYPO3 6 в наши дни...).
Посмотрите на проект кузницы.
Возможно, вы захотите взглянуть на расширение DCE ( http://typo3.org/extensions/repository/view/dce); там вы можете определить элемент контента самостоятельно. В качестве альтернативы вы можете создать буквально все что угодно с помощью http://fedext.net/ framework. Просто прочитайте последние сообщения в блоге, чтобы получить представление о том, как создавать динамические элементы контента с этими расширениями.
Я мог бы...
Расширить
tt_content
таблица с 2 новыми полями (по одному на каждый столбец). Вы можете сделать это вручную в phpMyAdmin, но тогда вы рискуете, что поля будут случайно удалены в инструменте установки при сравнении баз данных или чем-то еще. Поэтому лучше создать для этого очень простое расширение - это всего лишь 2 файла: ext_emconf.php, описывающий расширение, и ext_tables.sql для определения новых полей.Определите в typo3conf/extTables.php новый тип элемента содержимого (= контейнер) и 2 новых поля (одно для левого столбца и одно для правого столбца), каждое из которых имеет тип IRRE.
Задавать
TCAdefaults.tt_content.pid = xxx
в TypoScript Конфигурация корневой страницы, чтобы элементы левого / правого столбца не сохранялись на самой странице, а в какой-то sysfolder.Определите новый элемент содержимого в настройке шаблона, чтобы он отображался так, как вы хотите.
Обновления
Пример поля IRRE:
'user_2col_left' => array(
'exclude' => 1,
'label' => 'Left column',
'config' => array(
'type' => 'inline',
'foreign_table' => 'tt_content',
'maxitems' => '10',
'appearance' => array(
'collapseAll' => '1',
'expandSingle' => '1',
'newRecordLinkPosition' => 'bottom',
'showAllLocalizationLink' => '1',
'showPossibleLocalizationRecords' => '1',
'showSynchronizationLink' => '1',
'useSortable' => '1',
'enabledControls' => array(
'hide' => '0',
),
),
'behaviour' => array(
'disableMovingChildrenWithParent' => '1',
'localizeChildrenAtParentLocalization' => '1',
),
)
),
Пример нового типа контента:
t3lib_div::loadTCA('tt_content');
$TCA['tt_content']['columns']['CType']['config']['items'][] = array(
0 => '2 columns',
1 => 'user_2cols',
2 => '../fileadmin/user_2cols.gif',
);
t3lib_SpriteManager::addTcaTypeIcon('tt_content', 'user_2cols', '../fileadmin/user_2cols.gif');
$TCA['tt_content']['types']['user_2cols']['showitem'] = 'CType,header,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.access,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.visibility;visibility,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.access;access,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.appearance,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.frames;frames,--palette--;LLL:EXT:cms/locallang_ttc.xml:palette.textlayout;textlayout,--div--;LLL:EXT:cms/locallang_ttc.xml:tabs.extended';
Заметки
Это простое (и немного грубое) решение для вашего конкретного случая. Лучшее решение будет учитывать возможность динамической установки количества столбцов в контейнере.
Будут некоторые ограничения в работе с элементами левого / правого столбца - вы не сможете легко перемещать их или копировать между различными контейнерами.
Вот видео презентации конференции о том, как делать FCE без использования TemplaVoila. К сожалению, только на немецком языке, но, возможно, это помогает.
Попробуйте использовать Fluid Powered TYPO3. С новым предварительно настроенным дистрибутивом "сайт"
http://typo3.org/extensions/repository/view/site
Скринкаст от Клауса Дуэ
http://vimeo.com/110469200
Не забудьте добавить typo3conf/AdditionalConfiguration.php Как мне установить его?
Я бы посоветовал вам попробовать плагин "multicolumn". У него нет зависимостей, как у других реализаций (я пробовал почти, если не все заменители FCE), и у него есть возможности вложения... В целом, он прекрасно работает с TYPO3. В последнее время он был портирован на TYPO3 v6. Я использую его на нескольких сайтах, и я вполне доволен. (Есть несколько ошибок, например, отображение неверных "потерянных элементов", но на странице подделки есть исправление)
Вот ссылка на документацию ТЕЖ: http://typo3.org/extension-manuals/multicolumn/2.1.14/view/