SMARTY Array ausgeben

  • Moin Forum,


    ich hoffe ich hab die richtige Section erwischt ...... Ich denke aber mal das es hier gut passt. Nun zu meinem Problem was mich quält.


    Ich möchte aus einem Smarty Array bestimmte Daten anzeigen, Problem ist nur das ich schon einiges versucht habe und Tante Google mir auch nicht helfen konnte. Daher frag ich einfach mal hier...... mit der Hoffnung das der gute HHGAG eine Ahnung davon hat und mir helfen kann.


    Hier das Array:


    Wie bekomme ich es hin, das ich aus diesem Array bestimmte Felder darstellen kann. Ich möchte nicht alle Informationen aus dem Array darstellen, das klappt mit einer foreach Schleife wunderbar.


    z.Bsp. aus dem Unterarray 5 die id, name, input und required


    ich hatte es versucht mit
    {$customfield.5.id}
    {$customfield.5.name}
    {$customfield.5.input}
    {$customfield.5.required}


    was aber nicht funktionierte.


    Kann mir bitte jemand die erleuchtung bringen und eine kleine Erklärung dazu? BTW ist es auch möglich in einer foreach Schleife ein array auszuklammern? Also zeige alles außer array 5?


    Danke

    Dieser Beitrag wurde bereits 1 Mal editiert, zuletzt von Benscher ()

  • Das sollte so eigentlich funktionieren, ist das aber ein Tippfehler oder hast Du wirklich das s am Ende nicht bei

    Code
    1. {$customfield
  • ne das ist schon richtig so, ich hatte mich an dem foreach orientiert, was so aussieht

    Code
    1. {foreach key=num item=customfield from=$customfields}
    2. <tr><td >{$customfield.required} {$customfield.input}</td><td class="fieldarea">{$customfield.name}</td></tr>
    3. {/foreach}
    4. <tr><td >{$customfield.5.required} {$customfield.5.input}</td><td class="fieldarea">{$customfield.5.name}</td></tr>


    in der foreach Schleife zeigt er alle an. Ich wollte aber aus der foreach bestimmte arrays ausschließen und diese seperat anzeigen.......


    was aber anscheinend so nicht geht ...

  • Code
    1. {foreach key=num item=customfield from=$customfields}


    Code
    1. customfield

    => für das foreach erstellt und auch nur dort vorhanden

    Code
    1. $customfields

    => original Array


    Musst also das mit s nehmen sonst wirds nichts. :whistling:

  • ja das stimmt, ich hab aber noch einen anderen Fehler drin gehabt, bzw noch drin. Die erleuchtung dazu brachte ein


    {$customfields|@print_r}


    welches mit das komplette Array nochmals im Template ausgibt. Das Problem ist solange sich in dem Array nichts ändert, ist das alles i.O. und funktioniert auch. Fügst Du aber ein neues Customfield über das Backend hinzu ändert sich auch die Reihenfolge im Array.


    Wonach man also nicht nach den Array anzeigen sollte, sondern der id im zweiten array. Um beim Beispiel zu bleiben


    wie müsste es Aussehen, wenn ich das Customfield mit der id 17 dastellen lassen möchte??

  • Müsste so passen:

    Code
    1. {foreach key=num item=customfield from=$customfields}
    2. <tr>
    3. <td >{$customfield.required} {$customfield.input}</td><td class="fieldarea">{$customfield.name}</td>
    4. </tr>
    5. if{$customfield.id =='17'}
    6. <tr>
    7. <td >{$customfield.required} {$customfield.input}</td><td class="fieldarea">{$customfield.name}</td>
    8. </tr>
    9. {/if}
    10. {/foreach}


    Wenn Du die Keys des ersten Array suchst, diese sind in der

    Code
    1. {$num}
  • hm ..... damit muss ich jedesmal ne schleife laufen lassen ...... direkt aus dem Array abgreifen kann man das nicht? Ich schau mal, bin gerade auf smarty.net und trichter mir die Doku zu mehrdimensionalen arrays rein.........


    Aber es funzt erstmal. Vielen Dank für deine Gedächtnisstützen .. . .. . .


    THX


    Benscher

  • kein Problem =)


    Es gibt nur einen anderen Weg, in dem Du das was Du benötigst seperat nochmal übergibst. Irgendwoher muss ja der Key bekannt werden, alternativ könntest Du eins der Array Suchmechanismen von PHP, z.B. http://www.php.net/manual/de/function.array-search.php, verwenden um Dir den Key des entsprechenden Werts geben zu lassen.

  • naja, ich könnts nochmal aus der DB abfragen, als einzelnes Array, das wäre dann einfacher .... bisher kommt die Info ja aus einem globalen Array.


    Ich hab gerade einen Methode gefunden ein mehrdimensionales Array zu seperieren .... mal schaun ....

  • leider funktioniert die Lösung so nicht.


    mit der

    Code
    1. if{$customfield.id =='17'}


    zeigt er das komplette Array nochmal an und schreibt in den Kopf der Tabelle if17if18.........


    :(

  • Hab mich vertippt =)

    Code
    1. {if $customfield.id =='17'}
  • genau, so geht das.


    Kannst Du mir bitte den Unterschied erklären?


    auf den ersten Blick sah mir das if gleich aus ...

  • Der Unterschied ist, dass jetzt der Befehl für Smarty einen Befehl darstellt und davor einfacher Text war, Beispiel:

    Code
    1. {if $customfield.id =='17'}

    im Smarty Template bedeutet einfach nur später in PHP umgesetzt folgendes

    PHP
    1. <?php if ($customfield['id'] =='17') ?>


    die geschweiften Klammern ersetzen halt die Einführung von PHP code in einer Datei. Wenn Du die Datei im

    Zitat

    templates_c/

    Verzeichnis ausfindig machst, wirst Du es entsprechend sehen können.

  • kein Problem =)