【问题标题】:TYPO3 - simpler way, rendering content from colPos into Fluidtemplate?TYPO3 - 更简单的方法,将 colPos 中的内容渲染到 Fluidtemplate 中?
【发布时间】:2020-01-15 16:49:24
【问题描述】:

官方 TYPO3 文档解释了如何创建(或复制)和使用 lib.dynamicContent 将列呈现为 Fluidtemplate。 我不明白这个例子中到底发生了什么。 TypoScript 有:

lib.dynamicContent = COA
lib.dynamicContent {
   10 = LOAD_REGISTER
   10.colPos.cObject = TEXT
   10.colPos.cObject {
      field = colPos
      ifEmpty.cObject = TEXT
      ifEmpty.cObject {
         value.current = 1
         ifEmpty = 0
      }
   }
   20 = CONTENT
   20 {
      table = tt_content
      select {
         orderBy = sorting
         where = colPos={register:colPos}
         where.insertData = 1
      }
   }
   90 = RESTORE_REGISTER
}

我在大量的 TYPO3 项目中使用了这个 sn-p,并且经常问自己那里发生了什么。

我通过一些试验改变了这一点,并以:

lib {
  dynamicContent = COA
  dynamicContent {
    10 = CONTENT
    10 {
      table = tt_content
      select {
        orderBy = sorting
        where {
          data = field:colPos
          wrap = colPos=|
        }
      }
    }
  }
}

这似乎在做“完全相同”的事情——它在通过 cObject ViewHelper 调用时输出我的内容。

有人可以解释这是否或为什么这是呈现内容的更糟糕的方式吗?

这是lib.dynamicContent-doc 的链接:https://docs.typo3.org/c/typo3/cms-fluid-styled-content/master/en-us/Installation/InsertingContentPageTemplate/Index.html#based-on-the-fluidtemplate-content-object-cobj

【问题讨论】:

    标签: typo3 typoscript


    【解决方案1】:

    给你!

    你可以试试这个,

    # Clear out any constants in this reserved room!
    styles.content >
    
    # get content
    styles.content.get = CONTENT
    styles.content.get {
        table = tt_content
        select.orderBy = sorting
        select.where = colPos=0
    }
    
    # Left Column
    styles.content.getLeft < styles.content.get
    styles.content.getLeft.select.where = colPos=1
    
    # Right content
    styles.content.getRight < styles.content.get
    styles.content.getRight.select.where = colPos=2
    

    另外,你可以在流体页面对象中使用变量,看看这个:

        lib.pageTemplate = FLUIDTEMPLATE
        lib.pageTemplate {
            variables {        
                content = CONTENT
                content {
                    table = tt_content
                    select.orderBy = sorting
                    select.where = colPos=0
                }
    
                contentRight = CONTENT
                contentRight {
                    table = tt_content
                    slide = -1
                    select.orderBy = sorting
                    select.where = colPos=2
                }        
    
            }
        }
    

    您可以在这里找到更多信息:

    希望这是有道理的,干杯...!

    【讨论】:

      【解决方案2】:

      您应该查看此 sn-p 以及有关流体视图助手 &lt;f:cObject&gt; 的一些信息,可在此处找到:https://docs.typo3.org/other/typo3/view-helper-reference/9.5/en-us/typo3/fluid/latest/CObject.html

      如您所见,参数datacurrentValueKeytable 将移交给typoscriptObjectPath,这就是为什么sn-p 非常有意义的原因。原因是,将不同的选项放入CONTENT 对象的where 子句中有点困难。因此它增加了可读性,并且可以轻松扩展这些寄存器。

      因此,此示例中的寄存器用于输入 data 字段 colPos 的值,或者如果为空,它将从 currentValueKey 中获取 current 值,如果它也为空它将回退到0 的值,以确保查询不会产生异常。

      lib.dynamicContent = COA
      lib.dynamicContent {
         10 = LOAD_REGISTER
         10.colPos.cObject = TEXT
         10.colPos.cObject {
            field = colPos
            ifEmpty.cObject = TEXT
            ifEmpty.cObject {
               value.current = 1
               ifEmpty = 0
            }
         }
         20 = CONTENT
         20 {
            table = tt_content
            select {
               orderBy = sorting
               where = colPos={register:colPos}
               where.insertData = 1
            }
         }
         90 = RESTORE_REGISTER
      }
      

      我们使用了该 sn-p 的修改版本,为CONTENT 对象添加了更多参数值。

      所以我们可以交出一个数据字段pageUid,如果没有设置,我们将使用当前页面的uid。如果当前页面或目标页面被配置为显示来自另一个页面的内容,这将被覆盖,最后我们可以触发带有另一个数据字段的幻灯片。

      lib.dynamicContent = COA
      lib.dynamicContent {
          5 = LOAD_REGISTER
          5 {
              colPos.cObject = TEXT
              colPos.cObject {
                  field = colPos
                  ifEmpty.cObject = TEXT
                  ifEmpty.cObject {
                      value.current = 1
                      ifEmpty = 0
                  }
              }
              pageUid.cObject = TEXT
              pageUid.cObject {
                  field = pageUid
                  ifEmpty.data = TSFE:id
              }
              contentFromPid.cObject = TEXT
              contentFromPid.cObject {
                  data = DB:pages:{register:pageUid}:content_from_pid
                  data.insertData = 1
              }
          }
          20 = CONTENT
          20 {
              table = tt_content
              slide = -1
              slide.if.isTrue.field = slide
              select {
                  includeRecordsWithoutDefaultTranslation = 1
                  orderBy = sorting
                  where = {#colPos}={register:colPos}
                  where.insertData = 1
                  pidInList.data = register:pageUid
                  pidInList.override.data = register:contentFromPid
              }
          }
          90 = RESTORE_REGISTER
      }
      

      这使我们能够利用&lt;f:cObject&gt; 视图助手,同时只需在数据数组中传递更多值即可触发其他参数。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      相关资源
      最近更新 更多