[英]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.