Tom Deprez wrote:
But reading this carefully:
- When a KBItem already is inside a KBFolder and the KBFolder is its category, then why go into the trouble of creating/updating properties. THis is information replication, which you should avoid I would think a simple <dtml-var "<specificKBFolder>.objectValues(['KBItem'])"> will get you all the items you want for a specific category. You may need a Catalog to do more complicated things, but you will have to be more specific for us to be able to help you.
Ah yes, but I thought not to catalog KBFolders. They are merely the class which shows the KBItems in a way you want. Assume this: you've the following Knowledgebase Tree :
Python Zope What is Zope? Problem 1 Python DTML What is DTML? ...
Then this would be
Python (KBFolder) Zope (KBFolder) What is Zope? (KBItem; Categorie: ZOPE) Problem 1 (KBItem; Categorie: ZOPE) Python (KBFolder) DTML (KBFolder) What is DTML? (KBItem; Categorie ZOPE DTML)
Now:
searching for DTML will return: 'What is DTML?' searching for ZOPE will return: 'What is ZOPE?', 'Problem1', 'What is DTML?'
OK, this is clear. This could be (partially) resolved with my proposal: <dtml-in "ZOPE.objectValues(['KBFolder', 'KBItem])"> <dtml-if "_['sequence-item'].meta_type=='KBFolder'"> <dtml-in "_.sequence-item.objectValues(['KBItem'])> <dtml-var sequence-item> </dtml-in> <dtml-else> <dtml-var sequence-item> </dtml-if> </dtml-in> [notes: this is only to give the idea. It is not tested. 1. It would need some elaboration for more than 1 item deep (by factoring out the dtml-if, for example 2. Though I did not try this, I'm sure you could also do this with KBFolders returned from a Catalog] Rik