it-swarm.com.de

Wie lese ich JSON von einer externen URL und zeige es in einem Block an?

Ich möchte einige JSON-Daten von einer externen URL laden und in einem Block anzeigen.

Wie gehe ich vor?

4
uwe

Für die einfachste Lösung müssten Sie:

Eine komplexere Version Ihres benutzerdefinierten Moduls kann beispielsweise die Implementierung von hook_block_configure umfassen, um die URL über die Benutzeroberfläche konfigurierbar zu machen, mithilfe von Designfunktionen die HTML-Ausgabe zu generieren und den Rückgabewert zwischenzuspeichern/speichern.

Ein völlig anderer Ansatz, der in Ihrem Fall angemessen sein kann oder nicht, wäre die Verwendung des Moduls Feeds , um den JSON abzurufen und die Daten als Knoten zu speichern, und verwenden Sie das Modul Ansichten Modul zum Generieren eines Blocks, in dem diese Knoten aufgelistet sind.

7
marcvangend

Vielleicht ein zu einfacher Ansatz, aber wenn Sie wirklich nur JSON-Daten anzeigen möchten (keine Notwendigkeit, sie zu speichern), würde ich einen neuen Block als "Full HTML" hinzufügen und dann etwas JQuery hinzufügen.

Um ein HTML-Snippet einzubetten, wäre es:

<script type="text/javascript">
(function ($) {
$(document).ready(function(){
  $('#remoteFeed').load('http://example.com/path/to/page #some-div-id');
});
})(jQuery);
</script><div id="remoteFeed"></div>

Die Methode wäre für JSON ähnlich, nur müssten Sie die Rückgabe formatieren, die für Ihre Anwendung benutzerdefiniert wäre.

Hier ist ein Arbeitsbeispiel aus JQuery.getJSON-Dokumentation , das ganz leicht angepasst wurde, um in einem Drupal Block:

<script type="text/javascript">
(function ($) {
$(document).ready(function(){
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?jsoncallback=?",
  {
    tags: "awesome",
    tagmode: "any",
    format: "json"
  },
  function(data) {
    $.each(data.items, function(i,item){
      $("<img/>").attr("src", item.media.m).appendTo("#flickr-images");
      if ( i == 3 ) return false;
    });
  });
});
})(jQuery);
</script>
<div id="flickr-images"></div>
2
Brent