Smarty: Array darstellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Smarty: Array darstellen

    Hallo zusammen!

    Weiß einer eine Möglichkeit, mit der Template-Engine Smarty ein Array ähnlich der Ausgabe von print_r($array) in PHP darzustellen? Es steht nämlich nur die foreach-Funktion zur Verfügung, mehr bietet smarty hier ja nicht an.

    Ziel wäre also: Ich übergebe smarty ein array "$array", und smarty gibt das Gleiche wie print_r($array) aus.

    Danke im Voraus,

    Markus

  • #2
    Schreib dir einen entsprechenden Modifier oder gib Smarty direkt die Ausgabe von print_r

    PHP-Code:
    $ausgabe print_r($arraytrue);

    $smarty->assign('ausgabe'$ausgabe); 
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      hi ich arbeite auch mit smarty, und hatte das problem auch...

      dabei sollte array_push(); helfen...

      also ich zeig dir mal nen code von mir:

      PHP-Code:
      $smilies = array();
      while (
      $fetch_smilies mysql_fetch_assoc($result))
      {
        
      array_push($smilies,array(
        
      "code" => $fetch_smilies['code'],
        
      "smile_url" => $fetch_smilies['smile_url'],
        
      "emoticon" => $fetch_smilies['emoticon']));
      }
      $db->sql_freeresult($result); 
      und jetzt musst du nur noch

      PHP-Code:
      $smarty->assign("daten",$smilies); 
      machen...

      und die abfrage in smarty sehe so aus:

      Code:
      {foreach item=dates from=$daten}
      {$dates.code}
      {/foreach}

      ich hoffe ich habe deine Frage richtig aufgenommen und sie beantwortet.

      EDIT: hab das print_r überlesen sorry
      Mfg Tobias Dosch

      Kommentar


      • #4
        schonmal in die doku zu print_r geschaut?

        PHP-Code:
        $tpl->assign("meinarray",print_r($array,true)); 
        mfg

        Kommentar


        • #5
          Das mit print_r war ein Beispiel, deswegen schrieb ich ja "ähnlich der Ausgabe von print_r". Mir geht es darum, ein Array iterativ auszulesen. Wichtig ist hierbei, dass das Array X Ebenen hat, die ich nicht kenne.

          Kommentar


          • #6
            Original geschrieben von markusk
            ... ein Array iterativ auszulesen. Wichtig ist hierbei, dass das Array X Ebenen hat, die ich nicht kenne.
            Dann doch lieber rekursiv, oder?

            Kommentar


            • #7
              Nunja, dann müsste ich ja in Smarty eine rekursive Funktion definieren?? Geht sowas überhaupt? Es sollte doch aber auch iterativ mit foreach möglich sein, oder nicht?

              Kommentar


              • #8
                Rekursiv: Du hast ein n-dimensionales Array

                Iterativ: Du willst n Einträge eines Arrays ausgeben

                $array = array(1, 2, 3, 4, 5) ist ein eindimensionales Array mit 5 Einträgen

                $array = array(1, array(1, 2, 3, 4, 5), 3, 4, array(1, 2, 3, 4, 5)) ist ein zweidimenisionales Array

                $array = array(1, array(1, 2, array(1, 2, , 4, 5) , 4, 5), 3, 4, array(1, 2, 3, 4, 5)) ist ein dreidimensionales Array

                Was willst du ausgeben?

                Für alles außer Fall 1 brauchst du Rekursion oder du weiß, wieviele Ebenen das Array hat.
                Für Smarty ibt's aber ein entsprechendes Plugin, such mal auf smarty.php.net, irgendwo da om Forum steht sowas
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Naja man kann ein mehrdimensionales Array auch "flachklopfen" und sich so um die Rekursion drücken. Um die Templates nicht zu verhunzen, sollte man das mit PHP machen ... nein eigentlich sollte man es gar nicht machen, denn es ist unsauber und schwer nachvollziehbar.

                  Flachklopfen-Pseudocode:
                  Code:
                  for ($i=0; count($array); $i++) {
                      if (is_array($array[$i])) {
                          // in $array von $i bis $i+count($array[$i]) eine Lücke schaffen
                          // Elemente von $array[$i] in die Lücke einfügen
                          $i--;
                      }
                  }

                  Kommentar


                  • #10
                    Der Beispiel-Code würde aber auch nur zweidimensionale Arrays darstellen. Ich dachte, jedes rekursive Problem lässt sich auch auf iterative Art und Weise lösen?

                    Kommentar


                    • #11
                      Wenn ich den Kommentar richtig interpretiere, macht er genau das
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Es ist dann aber alles in einer Ebene, sprich ich könnte keine Baumstruktur ausgeben.

                        Kommentar


                        • #13
                          Du kannst doch auch mitzählen, in welcher Ebene du bist

                          Oder: http://www.phpinsider.com/smarty-for...loop+recursion
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            ei super, das hat mir sehr geholfen! Danke!

                            Kommentar

                            Lädt...
                            X