Sie sind hier:   » ZMS home » Dokumentation » Details » How-To » TOC-Listen » Nach Datum

Aktuelle Dokumente der letzten 14 Tage listen

Autor: Dirk Nordmann, Dr. F. Hoffmann, 24.10.2003

Über den gesamten Content-Baum sollen die aktuellsten Seiten-Objekte der letzten 14 Tage in einer sortierten Liste erscheinen.

Lösungsansatz: Über den zu prüfenden Knoten (im Beispiel-Code das root-Element 'content') wird mit filteredTreeNodes() eine auf den Datumszeitraum begrenzte sortierte Liste geschrieben. Der Code wird in einen Textabschnitt gesetzt (Format HTML); alternativ kann den Code in ein Teasertext-Element schreiben (und den Einstiegspfad z.B. mit getParentNode().getParentNode().filteredTreeNodes korrigieren).

<dtml-call "REQUEST.set('res',[])">
   <dtml-call "REQUEST.set('curr_dt',ZopeTime())">
   <dtml-call "REQUEST.set('curr_dt', 
    _.DateTime('%4d/%2d/%2d'%(curr_dt.year(),curr_dt.month(),curr_dt.day())))">
   <dtml-call "REQUEST.set('curr_dt',curr_dt.timeTime())">
   <dtml-call "REQUEST.set('delta_dt',REQUEST.get('days',14)*24*60*60)">
   <dtml-in "content.filteredTreeNodes(REQUEST,None,'attr_active_start','desc')">
    <dtml-let ob=sequence-item>
     <dtml-call "REQUEST.set('start_dt',
      getObjProperty('attr_active_start',REQUEST))">
     <dtml-if start_dt>
      <dtml-call "REQUEST.set('start_dt', 
       _.DateTime('%4d/%2d/%2d'%(REQUEST['start_dt'][0],  
       REQUEST['start_dt'][1],REQUEST['start_dt'][2])))">
      <dtml-call "REQUEST.set('start_dt',REQUEST['start_dt'].timeTime())">
      <dtml-if "curr_dt-REQUEST['start_dt']<=delta_dt">
       <dtml-call "res.append(ob)">
      </dtml-if>
     </dtml-if>
    </dtml-let>
   </dtml-in>
   <!-- generate html code -->
   <hr size="1"/>
   <div class="form-small">
   <b>Aktuelle Dokumente:</b>
   <br/>
   <dtml-in res>
    <dtml-let ob=sequence-item>
     <a href="<dtml-var "getHref2IndexHtml(REQUEST)">">
     <dtml-var "getTitle(REQUEST)"></a>
     <dtml-var "getLangFmtDate(getObjProperty('attr_active_start',
     REQUEST),lang,'DATE_FMT')">
     <dtml-if "getObjProperty('attr_dc_description',REQUEST)">
     <br /><dtml-var "getObjProperty('attr_dc_description',REQUEST)">
     </dtml-if>
     <br />
    </dtml-let>
   </dtml-in>
   </div>
   <hr size="1"/>

Kommentar: Achtung: die Iteration über alle Objekte kann bei großen Dokumentzahlen erhebliche Rechenzeiten bedingen

References:
ZMS-Aktion 'Neue Objekte' (Download)
Die Aktion generiert eine Liste aller neuen Objekte in einem vorgegebenem Zeitraum und schreibt die Liste statisch in einen neuen Textabschnitt.
ZMSObject.findFilteredTreeNodes(REQUEST, meta_types, values=[])
Durchsucht für das aktuelle Objekt den kompletten Unterbaum nach Objekten vom spezifizierten Metatyp, die mit der angegebenen Werteliste übereinstimmen.