Ergebnis 1 bis 21 von 21

Thema: Json abrufen

  1. #1
    Contao-Nutzer
    Registriert seit
    25.01.2016.
    Beiträge
    64

    Standard Json abrufen

    Liebe Contao Community,

    habe folgendes Problem:
    Ich hab einen externen Link als Schnittstelle. In diesem Link befindet sich ausschließlich Json. Wie lese/verarbeite/gebe ich die Daten darin am einfachsten aus?
    Habe leider gar keine Ahnung wie ich mich an das Thema rantasten soll -.-

    Beste Grüße

  2. #2
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Kommt drauf an, was du mit den Daten machen willst.
    Kommen die in eine Datenbank? Sollen die direkt im Frontend ausgegeben werden?

    Aber grundsätzlich:
    Erstelle ein Contao-Modul, indem du die Daten mit json_decode umwandelst, dann überprüfst(!) und weiterverarbeitest.
    Geändert von stefan.sl (20.03.2017 um 15:51 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    25.01.2016.
    Beiträge
    64

    Standard

    Okay das hilft mir schon mal weiter dankeschön.
    Gibt es irgendwo bereits eine Anleitung, bei der json_encode mittels eines Moduls beschrieben wird?
    Brauche ich dann keine Contao Erweiterung wie zum Beispiel jsonapi?

    Die Daten ändern sich stets und sollen live im Front End ausgegeben werden.

  4. #4
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Nö, wofür? Schau dir das mal an: http://php.net/manual/de/function.json-decode.php
    Und dann schau dir einmal an, wie man ein Frontend-Modul in Contao baut.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Wenn man ein eigenes Modul einfügen möchte, welches keine Backend Eingabemöglichkeiten benötigt, empfehle ich folgende Vorgehensweise:

    • Lege im Ordner /templates ein Template an, das mit mod_ beginnt, bspw. mod_jsondata.html5.
    • In diesem Template programmierst du dein Modul, bspw.
      PHP-Code:
      <?php

      $data 
      json_decode(file_get_contents('https://example.org/json'));
    • Lege ein neues Modul vom Typ Eigener HTML-Code an.
    • Fülle HTML-Code mit einem beliebigen HTML Kommentar, bspw.
      HTML-Code:
      <!-- jsondata -->
    • Wähle unter Template-Einstellungen » Individuelles Template das vorhin erstellte Template aus.
    • Füge das Modul in deinem Seitenlayout oder als Inhaltselement ein.

  6. #6
    Contao-Nutzer
    Registriert seit
    25.01.2016.
    Beiträge
    64

    Standard

    Habe nun das Template mit folgendem Code erstellt
    PHP-Code:
    <?php

    $data 
    json_decode(file_get_contents('https://www......')); 

    var_dump($datatrue);

    ?>
    Dann hab ich auch ein HTML Modul das entsprechende Template ausgewählt und mit untenstehendem Code abgespeichert:
    HTML-Code:
    <!-- jsondata -->
    Zuletzt hab ich das Modul in Seite per Inhaltselement eingefügt.


    Funktioniert super dankeschön für eure Hilfe!

    Kann man die Ergebnisse auch schön und einzeln, zum Beispiel in DIV's ausgeben lassen (damit ich sie später stylen kann).
    Geändert von sss (21.03.2017 um 12:48 Uhr)

  7. #7
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Zitat Zitat von Spooky
    empfehle ich folgende Vorgehensweise
    Stimmt, so geht's einfacher

    Zitat Zitat von sss Beitrag anzeigen
    Habe nun das Template mit folgendem Code erstellt
    Wie kann das sein? Hab ich einen Fehler gemacht?
    Du decodierst Deine Daten doppelt. Versuch's mal nur mit var_dump($data);

    Edit: ok, du hast es jetzt selbst gefunden

  8. #8
    Contao-Fan Avatar von stefan.sl
    Registriert seit
    19.06.2009.
    Ort
    Iserlohn
    Beiträge
    352
    Partner-ID
    1371

    Standard

    Zitat Zitat von sss Beitrag anzeigen
    Kann man die Ergebnisse auch schön und einzeln, zum Beispiel in DIV's ausgeben lassen (damit ich sie später stylen kann).
    Du solltest dich ein bisschen mehr mit PHP, bzw. Programmierung auseinandersetzen.
    Nachdem du decodiert hast, bekommst du ein Array zurück. Sämtliche Werte darin sind einzeln aufrufbar.

    http://php.net/manual/de/language.types.array.php

    PHP-Code:
    <div><?= $data['name'?></div>

  9. #9
    Contao-Fan Avatar von PaddySD
    Registriert seit
    26.10.2016.
    Ort
    Andechs
    Beiträge
    656

    Standard

    Zitat Zitat von stefan.sl Beitrag anzeigen
    Aber grundsätzlich:
    Erstelle ein Contao-Modul, indem du die Daten mit json_decode umwandelst, dann überprüfst(!) und weiterverarbeitest.
    Das hier bitte nicht vergessen!

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von sss Beitrag anzeigen
    PHP-Code:
    var_dump($datatrue); 
    var_dump() hat keinen zweiten Parameter den man auf true setzen könnte. Du testest also einmal $data und einmal true, wobei letzteres nur true zurückgeben kann.

    Tipp: Benutze die Contao-Funktion dump($myFoo, $myBar) https://github.com/contao/core/blob/....php#L464-L484, die macht dir auch automatisch ein PRE drumherum und entscheidet automatisch ob print_r() oder var_dump() benutzt wird.
    PHP-Code:
    dump($data); // gibt $data aus 
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  11. #11
    Contao-Nutzer
    Registriert seit
    25.01.2016.
    Beiträge
    64

    Standard

    Danke für eure Hilfe!!!

  12. #12
    Contao-Fan
    Registriert seit
    01.07.2009.
    Beiträge
    348

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    [*]Lege ein neues Modul vom Typ Eigener HTML-Code an.[*]Fülle HTML-Code mit einem beliebigen HTML Kommentar, bspw.
    HTML-Code:
    <!-- jsondata -->
    [*]Wähle unter Template-Einstellungen » Individuelles Template das vorhin erstellte Template aus.[*]Füge das Modul in deinem Seitenlayout oder als Inhaltselement ein.[/list]
    Hallo, ich habe eine ähnliche Problematik und versucht, dieses Szenario durchzuspielen. Ich finde aber bei der Erstellung des Moduls «Eigenener HTML-Code» keine Möglichkeit, ein Template auszuwählen –*auch nicht dann, wenn ich versuche, das Modul als Element in einen Artikel zu stellen...

    Weiss jemand Genaueres?

    Grüsse, Chris

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Welche Contao Version verwendest du? Du solltest auf jeden Fall auf Contao 3.5.25 aktualisieren.

  14. #14
    Contao-Fan
    Registriert seit
    01.07.2009.
    Beiträge
    348

    Standard

    Läuft noch auf 3.2.15 –*danke für den Hinweis. Heisst das, dass mit dieser Version JSON nicht klappen wird?

    Gruss, Chris

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Mit JSON hat das nichts zu tun. In deiner Contao Version kannst du schlicht und einfach diese Template Auswahl nicht treffen - daher musst du das Script bzw. Template einfach anders einbinden, bspw. über den {{file::…}} Insert Tag.

    Unabhängig davon solltest du dringend auf Contao 3.5.25 aktualisieren.

  16. #16
    Contao-Fan
    Registriert seit
    13.12.2012.
    Beiträge
    621

    Standard

    Jetzt muss ich aber auch noch mal nachfragen, die Ausgabe funktioniert bei mir:

    PHP-Code:
    $data json_decode(file_get_contents('http://....jason'));

    dump($data); 
    Lasse ich jetzt den "dump" weg und nutze:
    HTML-Code:
    <div><?= $data['name'] ?></div>
    Bekomme ich eine Weise Seite und das steht in der Log:
    [06-Jun-2017 11:17:43 GMT] PHP Fatal error: Cannot use object of type stdClass as array in /wwwroot.wwwnew/templates/mod_json_import.html5 on line 8.

    Muss ich das Objekt erst umwandeln?

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    http://php.net/manual/en/function.json-decode.php

    Wenn du den Parameter $assoc, welcher by default false ist, nicht auf true setzt, dann werden JSON Objekte auch als Objekte erzeugt. Wenn du $assoc auf true setzt, werden statt dessen Assoziative Arrays daraus gemacht.

  18. #18
    Contao-Fan
    Registriert seit
    13.12.2012.
    Beiträge
    621

    Standard

    habe ich auch gerade gelesen...Danke.^^

  19. #19
    Contao-Fan
    Registriert seit
    13.12.2012.
    Beiträge
    621

    Standard

    Wie komme ich jetzt aber vom array auf diese "effectivURL"?
    2017-06-06_13-39-49.jpg

  20. #20
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Verstehe die Frage nicht ganz. Meinst du
    PHP-Code:
    <?= $data['images'][0]['effectiveUrl'?>
    ?

  21. #21
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    images hat ja mehrere Variablen 0, 1, ...

    Die möchtest du doch bestimmt in einer Schleife abarbeiten.
    PHP-Code:
    foreach($images as $key => $value)
    // oder
    foreach($images as $value
    Da kannst du innerhalb der Schleife auch einen dump() auf $key o. $value machen, dann müsste es sich dir erschließen.

    ps Aus dem Object hättest du die Variablen wahrscheinlich mit $data->name anstatt $data['name'] holen müssen.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

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