Movable Type Ajax Calendar

  • Jul
  • 24

escribe tu comentario! 101 palabras - 1 hits

Utilizando Ajax para mejorar la utilidad del calendario incluido en Movable Type

Aprovechando el reciente articulo escrito por Arvind Satyanarayan, Ajax Archive Drop Downs, me he decidido a hacerle unas pequeñas modificaciones con la intención de cambiar el calendario que trae por defecto MT.

La idea es conseguir que al pulsar el enlace correspondiente a un día en concreto se muestren todas las entradas escritas en ese día, que en mi opinion es mas util que el comportamiento que tiene por defecto, de enlazar directamente con la última entrada escrita en el día.

Realmente Arvind nos da todos los ingredientes en su artículo, tan solo necesita unas pequeñas modificaciones.

Para empezar, crearemos una nueva plantilla, en la que tendremos que activar la publicacion dinámica, y como nombre de fichero le pondremos ajax-archives.php, dentro de esta plantilla, pegaremos el siguiente codigo:

  1.  
  2.     <?php $timestamp = preg_split('/-/', $_REQUEST['timestamp']); $this->stash('start', $timestamp[0]); $this->stash('end', $timestamp[1]); ?>
  3.     <ul>
  4.       <MTEntries current_timestamp="`$start`" current_timestamp_end="`$end`">
  5.       <li id="a<$MTEntryID pad="1"$>"><a href="<$MTEntryPermalink$>" class="title" title="<$MTEntryTitle$>" rel="bookmark"><$MTEntryTitle$></a></li>    
  6.       </MTEntries>
  7.     </ul>
  8.  

En la plantilla que vaya a contener el calendario añadiremos el codigo javascript necesario:

  1.  
  2.     <script type="text/javascript">
  3.     <!--
  4.     var xmlhttp=false;
  5.    
  6.     /*@cc_on @*/
  7.     /*@if (@_jscript_version >= 5)
  8.     try {
  9.         xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  10.         } catch (e) {
  11.         try {
  12.             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  13.             } catch (E) {
  14.             xmlhttp = false;
  15.         }
  16.     }
  17.     @end @*/
  18.     if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  19.    
  20.         xmlhttp = new XMLHttpRequest();
  21.     }
  22.     function touched(timestamp,divID) {
  23.    
  24.         if (xmlhttp) {
  25.             d=document
  26.             var oInputArray = new Array();
  27.             var requestFile = "<MTBlogURL>php/ajax-archives.php?timestamp=" + timestamp;
  28.             xmlhttp.open("GET", requestFile ,true);
  29.             xmlhttp.onreadystatechange= function () {
  30.    
  31.                 if (xmlhttp.readyState==4) {
  32.                     document.getElementById(divID).innerHTML=xmlhttp.responseText
  33.    
  34.                 }
  35.             }
  36.             xmlhttp.send(null)
  37.         }
  38.    
  39.     }
  40.     //-->
  41.    
  42.     </script>
  43.  

Y para acabar solo nos queda modificar la plantilla del calendario, añadiendo al enlace un evento onclick que se encargara de llamar al procedimiento.

  1.  
  2.     <MTCalendarIfEntries>
  3.     <MTEntries lastn="1">
  4.     <a href="<$MTEntryPermalink$>" onclick="touched('<$MTArchiveDate format="%Y%m%d000000"$>-<$MTArchiveDate format="%Y%m%d235959"$>','content');return false;" title="<$MTEntryTitle$>">
  5.     <$MTCalendarDay$>
  6.     </a>
  7.     </MTEntries>
  8.     </MTCalendarIfEntries>
  9.  

El funcionamiento del script es bastante simple, un script que realiza una llamada xmlhttprequest, y un fichero PHP que devuelve las entradas publicadas dentro de un rango de tiempo, para que la “magia” ocurra, tendremos que indicar la id del contenedor donde aparecera el contenido, en el caso del ejemplo esta indicado como content.

Realmente es una manera muy simple de sacar partido al calendario que trae MT. Si sois de los que prefieren ver el ejemplo funcionando lo podeis hacer siguiendo este enlace

ningún comentario por el momento

Escribe tu comentario

Puedes utilizar este formulario para escribir tu opinion sobre esta entrada, no existe ningun tipo de limitacion a la hora de enviar opiniones, tan solo sigue unas reglas basicas de cortesia y todos estaremos mas contentos.

Puedes identificarte utilizando OpenID, solo tienes que introducir tu URL OpenID en el siguiente campo y pulsar el boton de validar.





Instrucciones para los comentarios

El simbolo * indica que se trata de un campo obligatorio.

Este sitio usa Markdown junto con Smartypants para educar los textos, tambien esta disponible para los comentarios.

A continuación os muestro algunas de las equivalencias:

  • [enlace de ejemplo](http://example.com/) resulta enlace de ejemplo.
  • **Texto en Negrita**
  • _Italica_
  • > blockquote
  • > > nested blockquote
  • * Esto es un elemento de una lista desordenada (ul)
  • 1. Esto es un elemento de una lista ordenada (ol)

MC Puedes seguir las respuestas a tus comentarios con MyComments.