TALES Problem: Array zählen

  • Hallo,

    ich habe jetzt nächste problem zu kämpfen! Ich muss Suchergebnisdarstellung erweitern und zwar: Die Anzahl von Verweise soll mit angezeigt werden.

    Also habe ich so geschrieben:

    HTML
    <div tal:define="search_rel python:result.getObject().getRelatedItems">
       <span tal:repeat="rel_result search_rel">
           <span tal:replace="string: ${repeat/rel_result/length}">
           </span>
        </span>
    </div>

    Allerdings zeigt es mehreren Zahlen an. z.B. bei 3 Verweise, kommt es "3 3 3" raus.

    Zuvor habe ich mit "python: len(search_rel)" versucht, scheiterte es mit einer Fehlermeldung: "Exception Value len() of unsized object"

    Wie löst man das problem am bestens?

    Gruß

  • Hallo,

    das Problem ist recht simple, du verwendest den richtigen Ausdruck innerhalb des Schleifen Elements, somit wiederholt er dir natürlich die Zahl genau so oft wie du Elemente hast.

    Schau dir mal diese Seiten an:


    du müsstest meines Erachtens direkt schrieben können:

    Code
    [COLOR=#000080]<div tal:define="search_rel python:result.getObject().getRelatedItems">[/COLOR]        [COLOR=#000080]
         <span tal:replace="string: ${repeat/[/COLOR][COLOR=#000080]search_rel[/COLOR][COLOR=#000080]/length}" />[/COLOR][COLOR=#000080][/COLOR] 
    [COLOR=#000080]</div>[/COLOR]

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Es gibt dafür leider auch fehlermeldung :(

    Code
    [B]Exception Type:[/B]     TraversalError
    [B]Exception Value:[/B]    (<Products.PageTemplates.Expressions.SafeMapping object at 0x7f1d4951e998>, 'search_rel')
    
    
    [B]Line 435, Column 21[/B]
    [B]Expression: <StringExpr u' ${repeat/search_rel/length}'>[/B]

    Gruß

  • Hallo,

    haben wir da jetzt zuviel belassen?

    Code
    [COLOR=#000080]<div tal:define="search_rel python:result.getObject().getRelatedItems">[/COLOR]        
         [COLOR=#000080]<span tal:replace="repeat/[/COLOR][COLOR=#000080]search_rel[/COLOR][COLOR=#000080]/length" />[/COLOR]  
    [COLOR=#000080]</div>[/COLOR]

    Weil er an der StringExp meckert. Der traversal sagt eigentlich das er das search_rel nicht kennt, bzw findet, hattest du am context noch was geändert?

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Hi,

    es kommt leider auch gleiche Fehlermeldung (Typ/Wert) raus.

    Am content habe ich nicht verändert. Es ist gleiche geblieben, seit der Script (s. 1. Beitrag) halbwegs funktioniert hatte. Diese Stelle habe ich dann so verändert, dass aus deiner Sicht funktionieren sollte.

    Gruß

  • Dann versuchen wir es mal mit einer eigentlich unsauberen aber funktionalen Variante:

    Code
    [COLOR=#000080]<div tal:define="search_rel python:result.getObject().getRelatedItems">
    [/COLOR]    [COLOR=#000080]<span tal:repeat="rel_result search_rel"[/COLOR][COLOR=#000080] tal:replace="string: ${repeat/rel_result/length}" />[/COLOR] 
    [COLOR=#000080]</div>[/COLOR]

    Da dein Statement ja das Ergebnis anzeigt, aber mehrfach versuchen wir mal die Schleife zu unterbrechen.

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller

  • Also TAL kann manchmal echt gemein sein.

    Code
    [COLOR=#000080]<div tal:define="search_rel python:result.getObject().getRelatedItems">  [/COLOR]    
         [COLOR=#000080]<span tal:repeat="rel_result search_rel"[/COLOR][COLOR=#000080] tal:replace="string: ${repeat/rel_result/length}" tal:condition="repeat/rel_result/start" />[/COLOR]  
    [COLOR=#000080]</div>[/COLOR]

    dadurch haben wir eine Abbruchbedingung für die Schleife, ist leider nicht gerade schön, weil es die Schleife trotzdem durchgeht, aber bloss einmal ausgibt.

    Aber Prinzipiel sehe ich gerade einen möglichen anderen Fehler, gibt er überhaupt das aus was du möchtest? weil im Statement

    Code
    [COLOR=#000080]python:result.getObject().getRelatedItems[/COLOR]

    fehlen meines erachtens die letzten Klammern

    Code
    [COLOR=#000080]python:result.getObject().getRelatedItems()[/COLOR]

    wenn das eine Liste zurück gibt muesste dadrüber auch die python len() funktion funktionieren.

    Gruss Pumukel

    Die beste Informationsquelle sind Leute, die versprochen haben, nichts weiterzuerzählen.

    Marcel Mart
    frz. Schriftsteller