Hur delar man lättast kalendrar mellan två webbplatser?

Events happening in the community are now at Drupal community events on www.drupal.org.
Ubbe's picture

Mitt mål är att visa kalenderhändelser från en webbplats i ett block på en annan webbplats.
Hur gör man detta på lättaste sätt?

Comments

Detta inbegriper två delar:

solipsist's picture

Detta inbegriper två delar: sidan som inkluderar ditt kalender och sidan som genererar kalendern. Du kan inkludera kalendern genom generellt sett tre olika metoder:

  • IFRAME - kalendern ligger i en iframe på din sida
  • SSI - server side include, Drupal hämtar in sidans innehåll och lägger in på din sajt
  • AHAH eller AJAX - JavaScript använder XHR för att hämta in sidan från den andra sajten och bädda in den på sidan

Beroende på metod behöver sajten som tillhandahåller kalendern förpacka den på lämpligt sätt.

Om du använder en IFRAME tag bör den andra sajten tillhandahålla ett komplett HTML-dokument med body, head et c, med andra ord valideras som en webbsida. Om du använder SSI eller AHAH är det enklast att skicka ett fragment, det vill säga ett litet stycke HTML som du stoppar in i din sida. Om du använder AJAX måste sajten på andra sidan skicka XML, eller som är vanligtast: JSON, som du sedan parsar och genererar HTML utav.

Det absolut snyggaste sättet enligt mig, även om det ändå inte är det lättaste, att göra detta på är att använda modulen Views Calendar, skapa en kalendervy som ett block eller en sida och sedan installera modulen AJAX Endpoints for Views. Den sistnämnda modulen tillhandahåller style-pluginer för Views så att du kan visa din vy som JSON, XML eller förenklad HTML. Ställ in att ändpunkten ska generera HTML. Du kan då med jQuery på den andra sajten hämta in ditt block:

$.get('http://kalendersida.se/kalender/ajax', {}, function(data) { $('#block-block-0 .content').append(data); });

I exemplet ovan antar jag du har ett block du skapat själv (skapat med 'Lägg till block' på blockadministrationssidan). Det blocket kommer få innehållet från den andra sajten.

Du kan också använda drupal_http_request() för att använda dig av SSI genom att placera denna PHP-kod i ditt egenskapade block:

print(drupal_http_request('http://kalendersida.se/kalender/ajax'));

Resutatet kommer vara detsamma. Skillnaden är att med SSI gör webbservern jobbet. Med AHAH är det webbläsaren som hämtar in data. Det finns för- och nackdelar med båda lösningarna.

Du kan också använda en IFRAME som visar en sidan på andra sajten som innehåller kalendern. Låt oss säga att den sidan har adressen http://kalendersida.se/kalender/iframe. Skapa en kopia av page.tpl.php i ditt tema som du döper till page-kalender-iframe.tpl.php. Rensa ut all ovidkommande HTML i denna, ha bara med det allra viktigaste (t ex $script, $styles, $content et c). Rensa sedan Drupalsajtens cache (admin/settings/performance). Om du går till kalenderns sida (http://kalendersida.se/kalender/iframe) ska du nu se en väldigt enkel sida med bara din vy. Med HTML kan du sedan placera den i en IFRAME, så här:

<iframe src="http://kalendersida.se/kalender/iframe" width="300" height="150"></iframe>

IFRAME-metoden är enklast och kräver enbart kunskaper i theming. De andra två metoderna kräver att man kan programmera lite.

Vi använder ofta en kombination av dessa tekniker beroende på ändamål och krav.


Jakob Persson - NodeOne

iCal?

itangalo's picture

En annan variant vore väl att låta första kalendern mata ut exempelvis ett iCal-feed, som du sedan importerar till kalender två.
Det kräver att båda kalendrarna stödjer iCal-formatet (eller något annat gemensamt format), men så länge du använder Drupal borde det inte vara något problem.

//Johan Falk, NodeOne
**
Vill du lära dig mer om Drupal? Kolla in samlingen av tips och guider!
Har du en fråga om Drupal? Missa inte FAQ-sidan på forumet!
Kolla in min senaste guide: Sju steg mot svart bälte i att tema Drupal

Sweden

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: