2

有没有办法让前端布局确定后端布局、模板文件和列?

目前我有以下代码允许您设置后端布局并使用适当的模板文件。但是当每个布局有不同的列位置时,这会变得非常混乱。

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


}
4

2 回答 2

2

一点也不凌乱,这是一个真实世界的例子:

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 布局为 BE 和 FE 服务。

  • 如果页面是一座城市,那么 colPos 就是街道。或者更确切地说,想象后端是您正在绘制的地图,前端是您根据该地图构建的乐高城市 :-)) 如果没问题,我会坚持使用这个比喻。

ColPos 是记录所在页面的确定部分。如果可以,请查看数据库中的 tt_content 表:您会看到 colPos 只是一个带有数字的列。所以在“第 1 页”城市中,有一条名为“colPos 7”的街道,其中包含一些记录(那些将是房屋)。使用 TYPO3 中的 be_layout 向导,您将创建该城市的行政地图:编辑器应该如何查看这些街道。

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 街的所有房屋都被放入城市的这个位置 - 并因此呈现在您的页面中。

于 2016-05-17T11:31:30.673 回答
0

以编程方式,

$backendLayout=$GLOBALS['TSFE']->cObj->getData('pageLayout');

如果None在后端[ -1]中选择了,它将输出'none'。如果没有选择任何内容,它将输出'default'. 否则,它将输出带有扩展名前缀的正确后端布局,同时考虑到页面祖先链上的子页面布局。

于 2021-09-08T10:35:05.650 回答