繁体   English   中英

Typo3-内容选择:渲染重复项

[英]Typo3 - CONTENT Select: Render dupplicats

我尝试根据给定的类别列出所有文件记录。 因此,我在列出所有具有正确类别的文件时遇到了问题,并在此处询问(已解决)

现在我解决了这里描述的问题。

简而言之:Typo3保存已渲染的记录,并且不再渲染以防止循环不断。 但我需要获取记录。

我的Typo3版本是7.6.18。

我从此工作代码开始,该代码仅显示所有与uiduid = 1和他的孩子有关联的文件(在我先前的问题线程中有进一步描述):

lib.documentindex = CONTENT
lib.documentindex {
  wrap = <ul>|</ul>

  table = sys_category
  select {
    pidInList = 1
    recursive = 1000
    selectFields = sys_file.name, sys_file.identifier, sys_category.title
    join = sys_category_record_mm ON (sys_category_record_mm.uid_local = sys_category.uid) JOIN sys_file_metadata ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign) JOIN sys_file ON (sys_file_metadata.file = sys_file.uid)
    where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories") AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
    orderBy = sys_category.title
  }

  renderObj = COA
  renderObj.wrap = <li>|</li>
  renderObj.10 = TEXT
  renderObj.10 {
    field = identifier
    wrap = <a href="|">
  }
  renderObj.20 = TEXT
  renderObj.20.field = name
  renderObj.30 = TEXT
  renderObj.30.value = </a>

}

但是现在,我想按类别显示更多的分组信息,例如:

Name Of Cat 1
 - File 1
 - File 2
Name Of Cat 2
- File 3

为此,我改进了如下代码:

lib.documentindex = CONTENT
lib.documentindex {
  wrap = <ul>|</ul>

  table = sys_category
  select {
    pidInList = 1
    recursive = 1000
    selectFields = sys_category.title, sys_category.uid as theuid
    join = sys_category_record_mm ON (sys_category_record_mm.uid_local = sys_category.uid) JOIN sys_file_metadata ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign) JOIN sys_file ON (sys_file_metadata.file = sys_file.uid)
    where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories") AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
    orderBy = sys_category.title
    groupBy = sys_category.title
  }

  renderObj = COA
  renderObj.wrap = <li>|</li>
  renderObj.10 = TEXT
  renderObj.10 {
    field = title
    wrap = <h3>|</h3>
  }

  renderObj.20 = CONTENT
  renderObj.20 {

    table = sys_category
    select {
      begin = 0
      pidInList = 1
      recursive = 1000
      selectFields = sys_file.name, sys_file.identifier
      join = sys_category_record_mm ON (sys_category_record_mm.uid_local = sys_category.uid) JOIN sys_file_metadata ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign) JOIN sys_file ON (sys_file_metadata.file = sys_file.uid)
      where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories")
      orderBy = sys_file.name
      andWhere.cObject = TEXT
      andWhere.cObject.dataWrap = sys_category.uid='{field:theuid}'
      //andWhere.cObject.dataWrap = sys_category.uid='4'
      andWhere.cObject.insertData= 1

    }

    renderObj = COA
    renderObj.wrap = <li>|</li>
    renderObj.10 = TEXT
    renderObj.10 {
      field = identifier
      wrap = <a href="|">
    }
    renderObj.20 = TEXT
    renderObj.20.field = name
    renderObj.30 = TEXT
    renderObj.30.value = </a>

  }

}

第一个查询用于显示与至少一个文件相关联的类别的标题,第二个选择用于显示与文件相关联的类别。

现在的问题是,由于第一次选择,文件被保存,因此被锁定,无法在第二个查询中呈现。

我找不到仅排印的解决方法,但是我已经知道这个问题已经存在很长时间了。 现在我的问题是:有人知道只有打字错误才能解决该问题吗? 我不需要拆分为多个文件的解决方案,因为我是typo3的新手,而且我还没有关于typo3-项目的概述。

编辑1:

因此,我更改了第二个查询的顺序,因为Bernd Wilkeπφ告诉我:

renderObj.20 {

    table = sys_file
    select {
      begin = 0
      pidInList = 1
      recursive = 1000
      selectFields = sys_file.name, sys_file.identifier
      join = sys_file_metadata ON (sys_file_metadata.file = sys_file.uid) JOIN sys_category_record_mm ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
      where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories")
      orderBy = sys_file.name
      andWhere.cObject = TEXT
      andWhere.cObject.dataWrap = sys_category_record_mm.uid_local='{field:theuid}'
      andWhere.cObject.dataWrap = //sys_category_record_mm.uid_local='2' OR sys_category_record_mm.uid_local='4'
      andWhere.cObject.insertData= 1
    }

    renderObj = COA
    renderObj.wrap = <li>|</li>
    renderObj.10 = TEXT
    renderObj.10 {
      field = identifier
      wrap = <a href="|">
    }
    renderObj.20 = TEXT
    renderObj.20.field = name
    renderObj.30 = TEXT
    renderObj.30.value = </a>

  }

就我现在所知,这代替了不呈现我所需记录的问题,而根本不呈现我所需要的东西。

我要更换吗

sys_category_record_mm.uid_local='{field:theuid}'
//andWhere.cObject.dataWrap = sys_category_record_mm.uid_local='2' OR sys_category_record_mm.uid_local='4'

//sys_category_record_mm.uid_local='{field:theuid}'
  andWhere.cObject.dataWrap = sys_category_record_mm.uid_local='2' OR sys_category_record_mm.uid_local='4'

显示了一些记录,但是我又遇到了一个奇怪的问题,只有“ OR”之后的条件才算在内。 因此,仅显示category.uid = 4的记录。 如果在代码中将其更改为2,它将显示category.uid = 2的记录。 无论如何,如果是错误或其他问题,我现在不在乎。 因为我希望它与andWhere.cObject.dataWrap = sys_category_record_mm.uid_local='{field:theuid}' ,但它没有。

编辑2:

好的,我可以按预期工作,但是我做的方式却很奇怪,以至于我不想使用它。

解:

renderObj.20 {

    table = sys_file
    select {
      begin = 0
      pidInList = 1
      recursive = 1000
      selectFields = sys_file.name, sys_file.identifier
      join = sys_file_metadata ON (sys_file_metadata.file = sys_file.uid) JOIN sys_category_record_mm ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
      where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories")
      orderBy = sys_file.name
      andWhere.cObject = TEXT
      andWhere.cObject.dataWrap = 0 OR sys_category_record_mm.uid_local='{field:theuid}'
      //andWhere.cObject.dataWrap = sys_category_record_mm.uid_local='2' OR sys_category_record_mm.uid_local='4'
      andWhere.cObject.insertData= 1
    }

因此,我了解到:在Typo3条件下,仅当OR运算符站在条件之前时才重要。 好吧,只是错别字?

andWhere不应以字段名称开头,而应以AND,OR或其他正式SQL语句开头。 所以你应该更换线

andWhere.cObject.dataWrap = 0 OR sys_category_record_mm.uid_local='{field:theuid}'

andWhere.cObject.dataWrap = AND sys_category_record_mm.uid_local='{field:theuid}'

也许那时感觉不那么奇怪了。 ;-)

因此,这里我们使用经过完全编辑的解决方案:

lib.documentindex = CONTENT
lib.documentindex {
  wrap = <ul>|</ul>    
  table = sys_category
  select {
    pidInList = 1
    recursive = 1000
    selectFields = sys_category.title, sys_category.uid as theuid
    join (
          sys_category_record_mm 
          ON (sys_category_record_mm.uid_local = sys_category.uid)
    JOIN sys_file_metadata 
          ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
    )
    where (
      (sys_category_record_mm.tablenames = "sys_file_metadata") AND 
      (sys_category_record_mm.fieldname = "categories") AND 
      ((sys_category.parent = 1) OR (sys_category.uid = 1))
    )
    orderBy = sys_category.title
    groupBy = sys_category.title
  }

  // context = sys_category
  renderObj = COA
  renderObj {
    wrap = <li>|</li>
    10 = TEXT
    10 {
      dataWrap = <h3>{field:title}</h3>
    }

    20 = CONTENT
    20 {
      table = sys_file
      select {
        pidInList = 1
        recursive = 1000
        selectFields = sys_file.name, sys_file.identifier
        join (
               sys_file_metadata 
                 ON (sys_file_metadata.file = sys_file.uid) 
          JOIN sys_category_record_mm 
                 ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
        )
        where (
          (sys_category_record_mm.tablenames = "sys_file_metadata") AND
          (sys_category_record_mm.fieldname = "categories")
        )
        orderBy = sys_file.name
        andWhere.dataWrap = AND sys_category_record_mm.uid_local='{field:theuid}'
        }
      }

      // context: sys_file
      renderObj = TEXT
      renderObj {
        wrap = <li>|</li>
        field = name
        typolink.parameter.field = identifier
      }
    }
  }
}

好的,这没有意义,但是已经解决了。 我想知道为什么会这样。 但是我应该停止问自己有关typo3的问题。

解:

在Typo3中,条件是否重要,如果OR运算符在其前面?

lib.documentindex = CONTENT
lib.documentindex {
  wrap = <ul>|</ul>

  table = sys_category
  select {
    pidInList = 1
    recursive = 1000
    selectFields = sys_category.title, sys_category.uid as theuid
    join (
          sys_category_record_mm 
          ON (sys_category_record_mm.uid_local = sys_category.uid)
    JOIN sys_file_metadata 
          ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
    )
    where (
      (sys_category_record_mm.tablenames = "sys_file_metadata") AND 
      (sys_category_record_mm.fieldname = "categories") AND 
      ((sys_category.parent = 1) OR (sys_category.uid = 1))
    )
    orderBy = sys_category.title
    groupBy = sys_category.title
  }

  // context = sys_category
  renderObj = COA
  renderObj {
    wrap = <li>|</li>
    10 = TEXT
    10 {
      field = title
      wrap = <h3>|</h3>
    }

    20 = CONTENT
    20 {
      table = sys_file
      select {
        begin = 0
        pidInList = 1
        recursive = 1000
        selectFields = sys_file.name, sys_file.identifier
        join (
               sys_file_metadata 
                 ON (sys_file_metadata.file = sys_file.uid) 
          JOIN sys_category_record_mm 
                 ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign)
        )
        where (
          (sys_category_record_mm.tablenames = "sys_file_metadata") AND
          (sys_category_record_mm.fieldname = "categories")
        )
        orderBy = sys_file.name
        andWhere.cObject = TEXT
        andWhere.cObject {
          dataWrap = 0 OR sys_category_record_mm.uid_local='{field:theuid}'
          insertData= 1
        }
      }

      // context: sys_file
      renderObj = TEXT
      renderObj {
        wrap = <li>|</li>
        field = name
        typolink.parameter.field = identifier
      }
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM