Ergebnis 1 bis 6 von 6

Thema: tal:repeat

  1. #1
    Teeny
    Registriert seit
    13.03.2007
    Beiträge
    32
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard tal:repeat

    Hallo,

    beschäftige mich gerade mit tal/tales und komme mit der "repeat"-Anweisung nicht weiter.

    Code:
    <html>
      <head>
        <title tal&#58;content="template/title">The title</title>
      </head>
      <body>
      <table>
       <tr tal&#58;repeat="zeile context/portal_catalog">
           <td tal&#58;content="zeile/review_state">test</td>
       </tr>
      </table>
      </body>
    </html>
    Es ist kompliziert, mein Problem zu erklären. In der repeat-Anweisung weist man ja einer "Variable" (hier zeile) ein Item aus einem Objekt zu. Woher weiß ich, was ich der Variable zeile zuweisen kann, z.B. tal:repeat="zeile context/portal_actions" und was das dann bewirkt. Kann man das im ZMI herausfinden? Wenn ja, wie und wo? Hoffentlich habe ich mich einigermaßen verständlich ausgedrückt. Wäre nett, wenn mir da jemand weiterhelfen könnte!

    Gruß,
    Dr. Evil
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiserliche Hoheit
    Registriert seit
    22.02.2005
    Beiträge
    1.558
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ok, prinzipiell verhält sich das so:
    Code:
    for item in xyz&#58;
        do_something_with&#40;item&#41;
    entspricht in TAL dem
    Code:
    <tal&#58;loop repeat="item xyz">
        <i tal&#58;define="dummy python&#58; do_something_with&#40;item&#41;; ... />
    </tal&#58;loop>
    Dabei ist zu beachten:
    * xyz muss iterierbar sein
    * item stell dann jeweils 1 Element dieser "Liste" dar

    Was ist nun iterrierbar? Prinzipiell alles was sich als Liste verstehen lässt. Also ganz grob wären dies Dictionary, Tuple, List, Iterator, String.
    Damit sind dies hier alles mögliche Werte für xyz:
    * {'a': 1,'b': 2, ...}
    * (1, 3, 7, 11)
    * ['a', 'b', 'c', ...]
    * range(1, 20)
    * rangex(1,100, 5)
    * 'abcdefgh'

    In Plone sind alle Sachen Objekte und werden auch also solche zurückgegeben. Es gibt aber auch Rückgabewerte die direkt z.B. Tuple sind.
    Du kannst dies relativ einfach überprüfen:
    * benutze den SimpleSkin und editiere die SimpleSkin_macros.pt
    * scroll ganz runter zum Debug-Macro
    * editiere dort das <tal:quick wie folgt:
    Code:
    <tal&#58;quick condition="python&#58; True">
      <div tal&#58;define="data python&#58; portal.portal_properties.site_properties;"
           tal&#58;content="data">
      </div>
    </tal&#58;quick>
    * speicher es und ruf die Seite neu auf
    * ganz unten siehst du nun eine Ausgabe wie diese: <SimpleItemWithProperties at site_properties>
    * solche Zope/Plone-eigenen Objekte werden dir allenthalben begegnen
    * um zu wissen was das nun kann kannst du a) im Netz suchen b) in Büchern lesen c) in Foren nachfragen d) dir das Objekt mit dir(item) genauer anschauen oder e) im Code schauen

    Am schnellsten sind Methode d) wozu du jedoch die angehängte externe Methode brauchst und e) wozu du einen guten Editor brauchst (wie PSPad) der auch über viele Verzeichnisse hinweg nach einem Wort (hier wäre dies z.B. "SimpleItemWithProperties") suchen kann.
    Beide Varianten sind interessant, aber auch fehleranfällig. Deshalb wäre für dich im Moment wohl eher a) und b) die richtige Wahl.
    Ich glaub ich kann das auch nicht so auf die Schnelle alles zusammenfassen. :-/

    Um also mal bei unserem tal:quick zu bleiben:
    * über die Suche im Code gelangt man nun dazu dass es eine Methode propertyItems() gibt.
    * diese bauen wir nun so in tal:quick ein "portal.portal_properties.site_properties.property Items();"
    * speichern und Seite neu laden
    * nun sehen wir alle Properties von site_properties als Tuple-Liste
    * ein beherztes "dict(portal.portal_properties.site_properties.pro pertyItems());" gibt uns diese als Dictonary zurück

    Abschließend würde unser Bsp. nun so aussehen
    Code:
    data = dict&#40;portal.portal_properties.site_properties.propertyItems&#40;&#41;&#41;
    for prop in data&#58;
        print '%s &#58; %s&#41; % &#40;prop, str&#40;data&#91;prop&#93;&#41;&#41;
    und in TAL dann entsprechend so
    Code:
    <tal&#58;quick condition="python&#58; True">
      <div tal&#58;define="data dict&#40;portal.portal_properties.site_properties.propertyItems&#40;&#41;&#41;;">
        <tal&#58;loop repeat="prop data"
                  content="python&#58; '%s &#58; %s' % &#40;prop, str&#40;data&#91;prop&#93;&#41;&#41;" />
      </div>
    </tal&#58;quick>
    Das sollte nur mal ein Bsp. dafür sein, was man von Plone als Rückgabewerte erhalten kann.
    Ich hoffe es war nicht zu verwirrent

    Und mach dir keine Sorgen darüber, dass du Probleme hast die nötigen Informationen zu den Objekten zu finden. Das ist eines der Mankos von CMF/Plone. Es gibt jede Menge Anleitungen, ToDos usw. aber nichts was "am Stück" die dinge darstellt. Damit findet man sich ab und nach einiger Zeit findet man dann auch stets recht schnell was man sucht.
    Notfalls fragt man in einem Forum oder auf der DZUG-ML nach

    Torty
    "Carpe Diem" powered by positiv Feelings

  3. #3
    Kaiserliche Hoheit
    Registriert seit
    22.02.2005
    Beiträge
    1.558
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Ich weiß es war etwas ausführlicher, aber kamst du damit klar?

    Torty
    "Carpe Diem" powered by positiv Feelings

  4. #4
    Teeny
    Registriert seit
    30.11.2006
    Ort
    Kölle
    Beiträge
    26
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Also ich fand die Erklärung super

    Ich würde noch den DocFinderTab erwähnen,
    mit dem man zumindest eine Ahnung bekommt, wie man bestimmte
    Objekte benutzen kann.
    Meine Plone Seite - Themen:
    Karriere und Bewerbung für Absolventen

  5. #5
    Kaiserliche Hoheit
    Registriert seit
    22.02.2005
    Beiträge
    1.558
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Stimmt! Das ersetzt die umständliche Verwendung der ext. Methode.

    Torty
    "Carpe Diem" powered by positiv Feelings

  6. #6
    Teeny
    Themenstarter

    Registriert seit
    13.03.2007
    Beiträge
    32
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Die Erklärung ist wirklich gut verständlich. Ich hab dann gleich zum Testen ein paar dictionaries erstellt und in eine repeat-Schleife eingebaut. Hat super funktioniert. Allerdings muss ich da noch mehr rumspielen, um vertrauter zu werden. Danke!

Ähnliche Themen

  1. Fehler beim Repeat
    Von Gast im Forum HTML & CSS Forum
    Antworten: 14
    Letzter Beitrag: 29.02.2008, 17:22
  2. CSS - background-repeat | IE Problem
    Von sudeki05 im Forum HTML & CSS Forum
    Antworten: 9
    Letzter Beitrag: 26.02.2008, 16:38
  3. tal:repeat in combobox
    Von Gast im Forum Zope & Plone - das deutsche Hilfeforum
    Antworten: 1
    Letzter Beitrag: 24.10.2007, 12:44
  4. Repeat-Schleife?
    Von Solon im Forum Flash Forum
    Antworten: 1
    Letzter Beitrag: 06.06.2007, 13:58
  5. alphaimageloader und repeat??
    Von rezeptionist im Forum HTML & CSS Forum
    Antworten: 8
    Letzter Beitrag: 29.07.2005, 17:42

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •