Пользовательский рендеринг / обертывания с помощью GridElements (typo3)

Я должен сделать бэкэнд и макет внешнего интерфейса с элементами сетки. Чтобы уточнить это немного: у меня есть 10 контейнеров, 5x2

В бэкэнде это выглядит так:

con 1_1 | con 2_1 | con 3_1 | con 4_1 | con 5_1 
con 1_2 | con 2_2 | con 3_2 | con 4_2 | con 5_2

(con означает контейнер)

Возможно, есть более разумные способы реализовать это, возможно, с помощью элементов "текст с изображением", но в данном случае это было требованием.

Теперь проблемная часть. Мне нужно обернуть каждый контейнер по-разному. Мой ожидаемый результат примерно такой:

<div class="left w-clearfix">
    <div class="organe_50_stapel_logo">
        IMAGE // works
    </div>
    <div class="organe_50_stapel_text">
      TEXT // works
    </div>
</div>

(2-й - 4-й контейнер будет обернут в "середину", а 5-й контейнер - "справа").

Теперь для моей настройки я получаю обернутые поля (помеченные // работами), однако, я застрял, оборачивая определенные поля, которые принадлежат друг другу.

Вот моя установка:

21 < lib.gridelements.defaultGridSetup
21 {
    columns {
         11 < .default
         11.wrap = <div class="organe_50_stapel_logo">|</div>
         12 < .default
         12.wrap = <div class="organe_50_stapel_logo">|</div>
         13 < .default
         13.wrap = <div class="organe_50_stapel_logo">|</div>
         14 < .default
         14.wrap = <div class="organe_50_stapel_logo">|</div>
         15 < .default
         15.wrap = <div class="organe_50_stapel_logo">|</div>

         21 < .default
         21.wrap = <div class="organe_50_stapel_text">|</div>
         22 < .default
         22.wrap = <div class="organe_50_stapel_text">|</div>
         23 < .default
         23.wrap = <div class="organe_50_stapel_text">|</div>
         24 < .default
         24.wrap = <div class="organe_50_stapel_text">|</div>
         25 < .default
         25.wrap = <div class="organe_50_stapel_text">|</div>
    }
}

11 + 21 принадлежит в контейнере "левый" 12,13,14,22,23,24 в контейнере "средний" 15,25 в контейнер "правый"

2 ответа

Решение

В этом случае вы должны пойти по другому пути и избавиться от отдельных оболочек для столбцов в пользу общего cObject, использующего так называемые "виртуальные поля" Gridelements.

Эти поля заполняются содержимым в процессе рендеринга, а затем становятся доступными через cObj->data, что делает их доступными через поле TypoScript, data, insertData и dataWrap, а также переменные внутри FLUIDTEMPLATE.

21 < lib.gridelements.defaultGridSetup
21 {
    cObject = TEXT
    cObject {
        dataWrap (
            <div class="left w-clearfix">
                <div class="organe_50_stapel_logo">{field:tx_gridelements_view_column_11}</div>
                <div class="organe_50_stapel_text">{field:tx_gridelements_view_column_21}</div>
            </div>
            <div class="middle">
                <div class="organe_50_stapel_logo">{field:tx_gridelements_view_column_12}</div>
                <div class="organe_50_stapel_text">{field:tx_gridelements_view_column_22}</div>
            </div>
            <div class="middle">
                <div class="organe_50_stapel_logo">{field:tx_gridelements_view_column_13}</div>
                <div class="organe_50_stapel_text">{field:tx_gridelements_view_column_23}</div>
            </div>
            <div class="middle">
                <div class="organe_50_stapel_logo">{field:tx_gridelements_view_column_14}</div>
                <div class="organe_50_stapel_text">{field:tx_gridelements_view_column_24}</div>
            </div>
            <div class="right">
                <div class="organe_50_stapel_logo">{field:tx_gridelements_view_column_15}</div>
                <div class="organe_50_stapel_text">{field:tx_gridelements_view_column_25}</div>
            </div>
        )
    }
}

Это работает для flexform_fieldname, parentgrid_fieldname, tx_gridelements_view_column_123 и tx_gridelements_view_child_123. Кроме того, существуют tx_gridelements_view_children и tx_gridelements_view_columns, но они содержат массивы для людей FLUIDTEMPLATE, поскольку TypoScript не может работать с массивами.

Поля называются "виртуальными", потому что они не существуют в базе данных, но будут заполнены в cObj-> data во время процесса рендеринга. Тем не менее, вы можете делать с ними все, что можно сделать с реальными полями, кроме записи их обратно в базу данных.

См. https://docs.typo3.org/typo3cms/extensions/gridelements/Chapters/Typoscript/Reference/Index.html Справочник TypoScript, описывающий эти поля.

Я получил аналогичную ошибку в gridelement путем разрыва с использованием typoscript.

Я использовал точный TypoScript, который вы использовали!

Пожалуйста, добавьте эту строку в ваш шаблон> Настройка наконец

tt_content.gridelements_pi1.20 = COA

Моя проблема решена добавлением этой строки, надеюсь, она вам поможет!


EXT: gridelements 8.0.0-dev

TYPO3: 8,7,8

Спасибо:)

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