Smarty und JSON

  • Hallo,


    vielleicht habe ich ja Glück und jemand hat mal oder nutzt aktuell Smarty. Für alle Unwissenden: Das ist eine Template Engine. Naja, folgendes Problem eröffnet sich mich aktuell. Ich habe ein JSON String von uptime-robot.com den ich mir von dort per curl hole. Da ich zufaul bin mir eine eigene Template Engine zu bastlen aber für mein aktuelles Projekt so etwas brauche versuche ich jetzt den folgenden JSON String mit Smarty in meine tpl zu bringen:



    SO sieht mein Code aktuell aus:


    PHP
    $json = uptimeGetData();
    //var_dump($json);
    
    foreach ($json->monitors as $monitor) {
        $friendly_name = $monitor->friendly_name;
    }
    
    $smarty->assign('monitor', $json);
    HTML
    {foreach from=$monitor|json_decode:1  item=foo}
        <li>{$foo->friendly_name}</li>
    {/foreach}

    Was dabei rummkommt ist nicht sonderlich viel:


    Warning: json_decode() expects parameter 1 to be string, object given in templates_c/fa672ddf35cfa0f59d1fc7d285e27df8e3547f53_0.file.rootserver.html.php on line 36


    Hat vielleicht jemand den passenden Schubser in die richtige Richtung? Vorneweg: Ich möchte keine fertigen Lösungen oder sonst irgendwas in die Richtung. Ich möchte es gerne verstehen :)


    Liebe Grüsse

    • Hilfreichste Antwort

    Spontan ins blaue, habe noch nie mit smarty gearbeitet.

    Deine foreach macht keinen Sinn bei PHP, weil du $json übergibst und eben nicht $friendly_name.
    Da du eine Schleife in Smarty nutzt, müsste es reichen, wenn du den json vorher in ein Array umbaust(json_decode())

    Änder mal deinen Code wie folgt:

    PHP
    $json = jscon_decode(uptimeGetDate(), true);
    $smarty->assign('monitor', $json);
  • Spontan ins blaue, habe noch nie mit smarty gearbeitet.

    Deine foreach macht keinen Sinn bei PHP, weil du $json übergibst und eben nicht $friendly_name.
    Da du eine Schleife in Smarty nutzt, müsste es reichen, wenn du den json vorher in ein Array umbaust(json_decode())

    Änder mal deinen Code wie folgt:

    PHP
    $json = jscon_decode(uptimeGetDate(), true);
    $smarty->assign('monitor', $json);

    Haha, ich konnte gerstern nicht mehr antworten aber ich habe echt einen Denkfehler gehabt. Ist auch mein erstes Mal mit Smarty und ja du hast natürlich recht, zwar nicht mit deiner Lösung aber das das Foreach einfach doof war.. haha wie einfach


    PHP
    $json = uptimeGetData();
    
    $smarty->assign('monitor', $json->monitors);
    $smarty->display('rootserver.html');

    So ist das ganze richtig .. total dumm :) hatte einfach schon 4 Stunden dran rumgefummelt und iwan nicht mehr durchgeblick. Da ich aber dann gerafft habe das ich den foreach teil ja quasi im Template habe war klar was ich eig in die Varbiable schreiben muss.


    DENNOCH: Danke für deinen Hinweis :) und ich hatte eig auf keine Antwort gehofft.