Пользовательский рендеринг / перенос с элементами сетки (typo3)

#typo3 #typoscript #tx-gridelements

#typo3 #typoscript #tx-элементы сетки

Вопрос:

Мне нужно создать бэкэнд и интерфейс-макет с элементами сетки. Чтобы немного прояснить это: У меня есть 10 контейнеров, 5×2

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

 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-й контейнер — в «правый»).

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

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

 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 в контейнере «справа»

Ответ №1:

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

Эти поля заполняются содержимым в процессе рендеринга, а затем становятся доступными через cObj-> data, таким образом, доступны через TypoScript field, 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_gridelement_sview_column_123 и tx_gridelement_sview_child_123. Кроме того, существуют tx_gridelement_sview_children и tx_gridelement_sview_columns, но они содержат массивы для пользователей FLUIDTEMPLATE, поскольку TypoScript не может работать с массивами.

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

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

Ответ №2:

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

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

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

tt_content.gridelements_pi1.20 = COA

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


EXT: элементы сетки 8.0.0-dev

ОПЕЧАТКА 3 : 8.7.8

Спасибо 🙂