Как заставить Frontend Layout определять столбцы и бэкэнд-макет?

Есть ли способ, чтобы макет Frontend определял макет Backend, файл шаблона и столбцы?

На данный момент у меня есть следующий код, который позволяет вам установить макет Backend и использует соответствующий файл шаблона. Но это становится очень запутанным, когда для каждого макета есть разные позиции столбцов.

page.10 = FLUIDTEMPLATE
page.10 {
    #format = html
    file= fileadmin/templates/example/partials/example_home.html    
    partialRootPath = fileadmin/templates/example/partials/
    layoutRootPath = fileadmin/templates/example/layouts/
    variables {

      # Assign the Columns
      main < styles.content.get
      main.select.where = colPos = 0

      news < styles.content.get
      news.select.where = colPos = 1
      }
    }
}


# Assign the Template files with the Fluid Backend-Template
page.10.file.stdWrap.cObject = CASE
page.10.file.stdWrap.cObject {
  key.data = levelfield:-1, backend_layout_next_level, slide
  key.override.field = backend_layout

  # Set the default Template
  default = TEXT
  default.value = fileadmin/templates/example/partials/example_home.html

  # Set a second Template
  23 = TEXT
  23.value = fileadmin/templates/example/partials/example_internal.html


}

person user500665    schedule 17.05.2016    source источник
comment
Ваш вопрос не совсем ясен. Вы используете файл backend_layout. Каждый backend_layout может иметь собственное представление в FE. Почему макет FE должен определять, как выглядит BE? Я имею в виду, что обычно это происходит наоборот. Вы выбираете свой макет BE, он определяет столбцы, и вы готовите для этого представление FE. И в Fluid есть макеты, которые можно использовать для этого, чтобы вы могли выбирать разные части из шаблона.   -  person András Ottó    schedule 17.05.2016
comment
@ AndrásOttó Хорошо, если мы забудем о макете внешнего интерфейса, как мне установить другой colPos в зависимости от того, какой макет внутреннего интерфейса выбран?   -  person user500665    schedule 17.05.2016
comment
@AndrásOttó Кроме того, что вы делаете, если у вас есть два разных шаблона, которые используют один и тот же макет?   -  person user500665    schedule 17.05.2016


Ответы (1)


Совсем не запутанно, вот реальный пример:

page.10 = FLUIDTEMPLATE
page.10 {
  file.stdWrap.cObject = CASE
  file.stdWrap.cObject {
    key.data = pagelayout

    default = TEXT
    default.value = {$customPagesTemplatePath}/Standard.html

    1 = TEXT
    1.value = {$customPagesTemplatePath}/Home.html

    2 = TEXT
    2.value = {$customPagesTemplatePath}/Landing.html

    10 = TEXT
    10.value = {$customPagesTemplatePath}/NewsDetail.html

    11 = TEXT
    11.value = {$customPagesTemplatePath}/LandingMini.html

    12 = TEXT
    12.value = {$customPagesTemplatePath}/FullWidth.html
  }
  layoutRootPath = {$customPagesLayoutPath}
  partialRootPath = {$customPagesPartialPath}

}

Подумайте об этом так:

  • Как вы говорите, забудьте о внешнем интерфейсе. Это наследие; be layout служит для BE и FE.

  • Если бы страница была городом, colPos была бы улицей. Вернее, представьте, что Backend — это карта, которую вы рисуете, а Frontend — это LEGO City, который вы строите по этой карте :-)) Если вы не против, я буду придерживаться этой метафоры.

ColPos — это определенная часть страницы, на которой находится запись. Если можете, взгляните на таблицу tt_content в базе данных: вы увидите, что colPos — это просто столбец с числом. Итак, в городе «Страница 1» есть улица под названием «colPos 7», и на ней есть несколько записей (это могут быть дома). С помощью мастера be_layout в TYPO3 вы создадите административную карту этого города: как редактор должен видеть эти улицы.

В FLUIDTEMPLATE вы вызываете в зависимости от выбранного be_layout, вы будете создавать сам город; визуализированный интерфейс.

Вот еще один реальный пример такого гибкого шаблона (Home.html):

<f:render partial="Mobilenav" />
<f:render partial="Header"/>

<div class="row">
<f:cObject typoscriptObjectPath="lib.home-teaser" />
</div>

<aside>
  <div class="row">
    <div class="columns">
      <div class="row">
        <div class="fp-teaser-outer small-48 medium-24 large-12 columns">
          <div class="fp-teaser-box-wrapper">
            <f:cObject typoscriptObjectPath="lib.home-something" />
          </div>
        </div>
        <div class="fp-teaser-outer small-48 medium-24 large-12 columns">
          <div class="fp-teaser-box-wrapper">
            <f:cObject typoscriptObjectPath="lib.home-somethingelse" />
          </div>
        </div>
        <div class="fp-teaser-outer small-48 medium-24 large-12 columns">
          <div class="fp-teaser-box-wrapper">
            <div class="fp-teaser-box">
              <f:cObject typoscriptObjectPath="lib.home-news-plugin-title" />
              <div class="fp-teaser-hr"></div>
              <div class="fp-teaser-content">
                <f:cObject typoscriptObjectPath="lib.home-news" />
              </div>
            </div>
          </div>
        </div>
        <div class="fp-teaser-outer small-48 medium-24 large-12 columns">
          <div class="fp-teaser-box-wrapper">
            <div class="fp-teaser-box">
              <f:cObject typoscriptObjectPath="lib.home-blog-plugin-title" />
              <div class="fp-teaser-hr"></div>
              <div class="fp-teaser-content">
                <f:cObject typoscriptObjectPath="lib.home-blog" />
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
</aside>

<f:render partial="Footer"/>

...ну а где корреляция с colPos? Еще нигде! Я (хотя и уверен, что есть другие подходы) делаю это в TypoScript:

lib.home-something < styles.content.get
lib.home-something {
  select.where = colPos = 7
}

Таким образом, мы подготавливаем содержимое для шаблона жидкости: получаем все содержимое столбца 7 этой страницы (используя расширение Fluid_styled_content) и помещаем его в объект содержимого «lib».

Затем это вставляется на страницу через f:cObject viewhelper:

<f:cObject typoscriptObjectPath="lib.home-something" />

Таким образом, все дома на 7-й улице помещаются в городе именно в этом месте и, таким образом, отображаются на вашей странице.

person Urs    schedule 17.05.2016
comment
У меня есть две проблемы с этим: 1) Можете ли вы, чтобы «домашнее что-то» было в colPos 7 в одном макете, а colPos 6 - в другом? 2) Что делать, если у вас есть 2 гибких шаблона с одинаковым макетом BE? - person user500665; 18.05.2016
comment
1) это просто нейминг - да. вы можете настроить это по своему желанию. чего вы не можете сделать, так это иметь один и тот же элемент контента/запись в двух разных местах. Поскольку у вас не может быть одного и того же дома на 6-й и 7-й улицах. Однако вы можете разместить два одинаковых дома на двух улицах. Или, поскольку это вычисление, отразите свой дом с 6-й улицы на 7-ю улицу. - person Urs; 18.05.2016
comment
2) в шаблоне просто указано, как отображается содержимое. вы можете сделать столько шаблонов для одного и того же контента, сколько пожелаете. ваша ситуация, вероятно, заключается в том, что вы хотите применить к странице один шаблон в некоторых случаях, а в других случаях другой? и вы не знаете, как передать эту информацию (какой шаблон использовать)? ну, вам придется добавить больше логики в ваш TypoScript; например если этот параметр GET установлен, выберите другой макет BE. Я бы рекомендовал задать для этого отдельный вопрос. - person Urs; 18.05.2016
comment
Итак, для 1) Вы говорите, что я должен просто назвать столбцы, чтобы они соответствовали их шаблону, например, «home1maincontent» и «home2maincontent» (при условии, что у меня есть две домашние страницы)? - person user500665; 18.05.2016
comment
Я не уверен, что вы имеете в виду, называя столбцы. Вероятно, да. Стандартный ответ: если это работает для вас, все в порядке. Я бы порекомендовал получить больше информации о Fluid/TypoScript, тогда все станет яснее. Или практика, что вы и делаете. Просто продолжайте экспериментировать :-) - person Urs; 18.05.2016
comment
Называя столбцы, я имею в виду, как ваш пример «что-то дома». Если 'home-something' также находится в макете 2, но в другом месте, мне нужно сделать 'home-something2' или есть способ установить colPos следующим образом: 2.home-something.colPos = ? - person user500665; 18.05.2016
comment
Я все еще думаю, что вы что-то упускаете. Попробуйте опубликовать новый вопрос с точным примером - person Urs; 18.05.2016