Typo3 - 内容 Select:呈现重复项
Typo3 - CONTENT Select: Render dupplicats
我尝试根据给定的类别列出所有 File-Records。
所以我在列出所有具有正确类别和 .
的文件时遇到了问题
现在我找到了问题 described here。
简而言之:
Typo3 保存已经渲染的记录并且不再渲染它以防止无限循环。但是我需要得到呈现的记录。
我的 Typo3 版本是 7.6.18。
我从这个工作代码开始,它只显示与类别 uid=1 及其子项有关系的所有文件(在我之前的 question-thread 中进一步描述):
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>
}
}
第一个查询用于显示至少有一个文件关联的类别的标题,第二个select用于显示关联的文件。
现在的问题是,文件由于第一个 select 而被保存,因此被锁定无法在第二个查询中呈现。
我找不到 typoscript-only 解决方法,但我发现这个问题早已为人所知。现在我的问题是:有人知道这个问题的解决方法吗,只有打字错误?我不想要一个拆分为多个文件的解决方案,因为我是 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-operator 站在条件之前,条件才有意义。好吧,只是一个错别字?
OK,没看懂,不过解决了。我想知道为什么它会这样工作。但我可能不应该再问自己有关 typo3 的问题了。
解决方案:
In Typo3 conditions only matter if an OR-operator is standing before
it?!
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
}
}
}
}
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
}
}
}
}
我尝试根据给定的类别列出所有 File-Records。
所以我在列出所有具有正确类别和
现在我找到了问题 described here。
简而言之: Typo3 保存已经渲染的记录并且不再渲染它以防止无限循环。但是我需要得到呈现的记录。
我的 Typo3 版本是 7.6.18。
我从这个工作代码开始,它只显示与类别 uid=1 及其子项有关系的所有文件(在我之前的 question-thread 中进一步描述):
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>
}
}
第一个查询用于显示至少有一个文件关联的类别的标题,第二个select用于显示关联的文件。
现在的问题是,文件由于第一个 select 而被保存,因此被锁定无法在第二个查询中呈现。
我找不到 typoscript-only 解决方法,但我发现这个问题早已为人所知。现在我的问题是:有人知道这个问题的解决方法吗,只有打字错误?我不想要一个拆分为多个文件的解决方案,因为我是 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-operator 站在条件之前,条件才有意义。好吧,只是一个错别字?
OK,没看懂,不过解决了。我想知道为什么它会这样工作。但我可能不应该再问自己有关 typo3 的问题了。
解决方案:
In Typo3 conditions only matter if an OR-operator is standing before it?!
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
}
}
}
}
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
}
}
}
}