Dit is de eerste keer dat ik een website aan het bouwen ben (ja, daar is het al
). De website is opzich redelijk draaiend mbv wordpress. Alles werkt prima, op 1 ding na, elke pageload moet de website een javascript uitvoeren om de kalenderevents van Google Calendar in te laden.
Ik wil dit op een of andere manier cachen naar de server oid zodat het opvragen van die kalender niet steeds 1 tot 2 seconden in beslag neemt, want het is gewoon erg lelijk.
Hoe de kalender werkt:
Deze geeft een output vanuit javascript. Welke in de browser zo wordt weergegeven:
En na enkele seconden komt er ter vervanging van <div class="ko-calendar-widget-loading"> dit te staan, de lijst met afspraken.
Wat ik nu wil is deze lijst (inclusief een deel van de bovenstaande code) cachen. Maar ik krijg dit maar niet voor elkaar.
Wat ik al geprobeerd heb:
Ligt dit misschien aan de mogelijkheid dat er eerst nog wat gereken op de computer zelf plaats moet vinden? (Of ligt het echt aan de traagheid van het inladen van de bestanden vanaf Google?)
Een alternatief mbv een ics bestand is ook prima, zolang dat irritante laaddingetje maar verdwijnt.

Ik wil dit op een of andere manier cachen naar de server oid zodat het opvragen van die kalender niet steeds 1 tot 2 seconden in beslag neemt, want het is gewoon erg lelijk.
Hoe de kalender werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| the_widget("WP_Widget_KO_Calendar", array( 'title' => '', 'url' => 'https://www.google.com/calendar/feeds/[KALENDER]', 'url2' => 'https://www.google.com/calendar/feeds/[KALENDER]', ), array('before_widget' => '<div class="calendarwidget">', 'after_widget' => '</div>', 'before_title' => '<div class="calendartitle">', 'after_title' => '</div>' )); |
Deze geeft een output vanuit javascript. Welke in de browser zo wordt weergegeven:
HTML:
1
2
3
4
5
6
7
8
9
10
11
| <div class="calendarwidget"> <div class="calendartitle"> <div id="widget-ko_calendar--1-widget_title" class="ko-calendar-widget-title"></div> </div> <div id="widget-ko_calendar--1-widget_events" class="ko-calendar-widget-events"> <div class="ko-calendar-widget-loading"> </div> </div> <script defer="defer" type="text/javascript"> ko_calendar.loadCalendarDefered('widget-ko_calendar--1-widget_title', 'widget-ko_calendar--1-widget_events', 5, false, 'https://www.google.com/calendar/feeds/[KALENDER]', 'https://www.google.com/calendar/feeds/[KALENDER]', '', '[STARTTIME - ][TITLE]'); </script> |
En na enkele seconden komt er ter vervanging van <div class="ko-calendar-widget-loading"> dit te staan, de lijst met afspraken.
code:
1
2
3
4
5
6
7
8
9
10
| <div class="ko-calendar-date" classname="ko-calendar-date">08 jul</div> <div class="ko-calendar-event-list" classname="ko-calendar-event-list"> <div class="ko-calendar-date" classname="ko-calendar-date">19 jul</div> <div class="ko-calendar-event-list" classname="ko-calendar-event-list"> <div class="ko-calendar-date" classname="ko-calendar-date">29 jul</div> <div class="ko-calendar-event-list" classname="ko-calendar-event-list"> <div class="ko-calendar-date" classname="ko-calendar-date">07 aug</div> <div class="ko-calendar-event-list" classname="ko-calendar-event-list"> <div class="ko-calendar-date" classname="ko-calendar-date">10 aug</div> <div class="ko-calendar-event-list" classname="ko-calendar-event-list"> |
Wat ik nu wil is deze lijst (inclusief een deel van de bovenstaande code) cachen. Maar ik krijg dit maar niet voor elkaar.
Wat ik al geprobeerd heb:
- De Google Calendar zelf lokaal op te slaan, en deze eens in de zoveel tijd te laten update. Dit werkt niet omdat de javascript hem dan niet meer uit kan lezen oid.
- Dit:
PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
<?php if ( is_user_logged_in() ) { $cache_file = $_SERVER['DOCUMENT_ROOT'].'/[---knip---].xml'; if (file_exists($cache_file)) { $cache_time = 3600*24; $timedif = @(time() - filemtime($cache_file)); if($timedif > $cache_time) { ob_start(); the_widget("WP_Widget_KO_Calendar", array( 'title' => '', 'url' => 'https://www.google.com/calendar/feeds/[KALENDER]', 'url2' => 'https://www.google.com/calendar/feeds/[KALENDER]', ), array('before_widget' => '<div class="calendarwidget">', 'after_widget' => '</div>', 'before_title' => '<div class="calendartitle">', 'after_title' => '</div>' )); $str = ob_get_contents(); ob_end_clean(); $file = fopen($cache_file, 'w'); fwrite ($file, $str, strlen($str)); fclose($file); } } } ?>
Maar dan krijg ik alleen de oproep van het script te zien in de xml, en niet wat hij na die paar seconden pas laadt. - De widget caching plugin voor Wordpress. Maar die haalt ook niet zoveel uit.
Ligt dit misschien aan de mogelijkheid dat er eerst nog wat gereken op de computer zelf plaats moet vinden? (Of ligt het echt aan de traagheid van het inladen van de bestanden vanaf Google?)
Een alternatief mbv een ics bestand is ook prima, zolang dat irritante laaddingetje maar verdwijnt.
[Voor 0% gewijzigd door RobIII op 29-06-2011 02:55. Reden: Code tag gefixed]