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. Просто прочитайте последние сообщения в блоге, чтобы получить представление о том, как создавать динамические элементы контента с этими расширениями.

Я мог бы...

  1. Расширить tt_content таблица с 2 новыми полями (по одному на каждый столбец). Вы можете сделать это вручную в phpMyAdmin, но тогда вы рискуете, что поля будут случайно удалены в инструменте установки при сравнении баз данных или чем-то еще. Поэтому лучше создать для этого очень простое расширение - это всего лишь 2 файла: ext_emconf.php, описывающий расширение, и ext_tables.sql для определения новых полей.

  2. Определите в typo3conf/extTables.php новый тип элемента содержимого (= контейнер) и 2 новых поля (одно для левого столбца и одно для правого столбца), каждое из которых имеет тип IRRE.

  3. Задавать TCAdefaults.tt_content.pid = xxx в TypoScript Конфигурация корневой страницы, чтобы элементы левого / правого столбца не сохранялись на самой странице, а в какой-то sysfolder.

  4. Определите новый элемент содержимого в настройке шаблона, чтобы он отображался так, как вы хотите.

Обновления

Пример поля 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. К сожалению, только на немецком языке, но, возможно, это помогает.

http://vimeo.com/29213790

Попробуйте использовать 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/

Другие вопросы по тегам