Cambiar el widget de Archivos por un Calendario

JMiur [E]

En una de las últimas entradas de BloggerSPhera nos muestran la forma de modificar la forma en que vemos el elemento Archivos de Blogger, reemplazando las listas por un calendario.

Aunque no lo he implementado acá, en este blog de pruebas se lo puede ver funcionando y quedará algo así:


Lo que veremos será un control para seleccionar el mes, un calendario donde estarán resaltados los días donde existan entradas en ese mes, una barra de navegación para avanzar y retroceder mes a mes y debajo, una lista con los enlaces a las entradas correspondientes. Tanto con el selector como con los enlaces de navegación, podremos desplazarnos a lo largo de las listas de archivos, sin cambiar de página.

Para aplicarlo, lo primero es descargar el script correspondiente que está en este archivo ZIP , ya traducido al español. Aunque no es necesario modificarlo para que funcione, podría editarse y cambiarse algunos detalles como los textos que se muestran por defecto.

Podemos agregarlo de dos maneras, lo alojamos en un servidor o bien copiamos y pegamos el contenido dentro de estas etiquetas, justo antes de </head>:
<script type='text/javascript'>
//<![CDATA[
// aquí pegamos el contenido del archivo
//]]>
</script>
Inmediatamente después, agregamos la llamada a la función con esto:
<script chartset='utf-8' src='/feeds/posts/summary?max-results=0&amp;alt=json-in-script&amp;callback=timezoneSet'/>
Ahora, con los artilugios expandidos, vamos a buscar el widget de Archivos:
<b:widget id='BlogArchive1' locked='false' title='XXXXXXX' type='BlogArchive'>
.......
</b:widget>
Eliminaremos todo lo que está entre la apertura y el cierre de la etiqueta y lo reemplazaremos. Terminará quedando esto:
<b:widget id='BlogArchive1' locked='false' title='NOMBRE' type='BlogArchive'> 
<b:includable id='toggle' var='interval'> <!-- Toggle not needed for Calendar --> </b:includable>
<b:includable id='interval' var='intervalData'> </b:includable>
<b:includable id='flat' var='data'>
<div id='bloggerCalendarList'>
<ul>
<b:loop values='data:data' var='i'>
<li class='archivedate'>
<a expr:href='data:i.url'><data:i.name/></a> (<data:i.post-count/>)
</li>
</b:loop>
</ul>
</div>
<div id='blogger_calendar' style='display:none'>
<table id='bcalendar'><caption id='bcaption'></caption>
<thead id='bcHead'/>
<tbody><tr><td id='cell1'> </td><td id='cell2'> </td><td id='cell3'> </td><td id='cell4'> </td><td id='cell5'> </td><td id='cell6'> </td><td id='cell7'> </td></tr>
<tr><td id='cell8'> </td><td id='cell9'> </td><td id='cell10'> </td><td id='cell11'> </td><td id='cell12'> </td><td id='cell13'> </td><td id='cell14'> </td></tr>
<tr><td id='cell15'> </td><td id='cell16'> </td><td id='cell17'> </td><td id='cell18'> </td><td id='cell19'> </td><td id='cell20'> </td><td id='cell21'> </td></tr>
<tr><td id='cell22'> </td><td id='cell23'> </td><td id='cell24'> </td><td id='cell25'> </td><td id='cell26'> </td><td id='cell27'> </td><td id='cell28'> </td></tr>
<tr><td id='cell29'> </td><td id='cell30'> </td><td id='cell31'> </td><td id='cell32'> </td><td id='cell33'> </td><td id='cell34'> </td><td id='cell35'> </td></tr>
<tr id='lastRow'><td id='cell36'> </td><td id='cell37'> </td></tr></tbody>
</table>
<table id='bcNavigation'><tr><td id='bcFootPrev'/><td id='bcFootAll'/><td id='bcFootNext'/></tr></table>
<div id='calLoadingStatus' style='display:none; text-align:center;'>
<script type='text/javascript'>bcLoadStatus();</script>
</div>
<div id='calendarDisplay'/>
</div>
<script type='text/javascript'> initCal();</script>
</b:includable>
<b:includable id='menu' var='data'> </b:includable>
<b:includable id='posts' var='posts'> <!-- posts not needed for Calendar --> </b:includable>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<div id='ArchiveList'>
<div expr:id='data:widget.instanceId + &quot;_ArchiveList&quot;'>
<b:if cond='data:style == &quot;HIERARCHY&quot;'>
<b:include data='data' name='interval'/>
</b:if>
<b:if cond='data:style == &quot;FLAT&quot;'>
<b:include data='data' name='flat'/>
</b:if>
<b:if cond='data:style == &quot;MENU&quot;'>
<b:include data='data' name='menu'/>
</b:if>
</div>
</div>
</div>
</b:includable>
</b:widget>
Guardamos y para que esto funcione, deberemos verificar que la configuración del widget sea correcta y esté seleccionada Lista:

Estilo Lista Menú desplegable

Sólo nos faltaría establecer las propiedades CSS para el calendario, eso lo hacemos agregando el estilo antes de </b:skin>:
#blogger_calendar { /* es el bloque donde lo mostraremos */
margin:0 auto; /* centrado */
width: 190px; /* el ancho */
}

#bcaption { /* el rectángulo superior con los meses */
height:20px;
text-align:right;
}
#bcaption select { /* este es el selector de los meses */
background-color: #345;
border: 1px solid #567;
color: #DDD;
font-family:Tahoma;
font-size:11px;
padding: 0 0 0 10px;
width:100px
}

table#bcalendar thead tr th { /* cada una de las celdas con los nombres de los dias de la semana */
background: #345;
border: 1px solid #567;
color: #EEE;
font-family: Tahoma;
font-size: 11px;
font-weight: bold;
padding: 2px;
text-align: center;
width: 20px;
}

table#bcalendar tbody tr td { /* cada celda con el número del dia */
background: #567;
border: 1px solid #789;
color: #ABC;
text-align: center;
padding: 2px;
-moz-border-radius: 2px;
}

td.highlightCell { /* las celdas donde hay entradas */
background-color: #9AB !important;
}
table#bcalendar tbody tr td a { /* el enlace de esas celdas */
color: #000;
font-weight: bold;
}

td.firstCell { /* las celdas vacias del inicio */
visibility: hidden; /* podemos hacerlas visibles usando visible */
}
td.emptyCell { /* las celdas vacias del final */
visibility: hidden;  /* podemos hacerlas visibles usando visible */
}
td.filledCell {background: #FFF;} /* el color de esas celdas vacias si es que están visibles */

table#bcNavigation { /* es la barra de navegación inferior */
color: #DDD;
background-color: #123;
border: 1px solid #234;
font-family:Tahoma;
font-size:10px;
margin: 5px 0 0 0;
padding: 0 ;
text-align:center;
width:190px;
}
table#bcNavigation a {color: #ABC;} /* el color del texto */
td#bcFootPrev {float: left; width: 10px;} /* el enlace hacia atrás */
td#bcFootNext {float: right; width: 10px;} /* el enlace hacia adelante */
#calendarDisplay{ /* debajo se muestra la lista de entradas */
}

/* esta es la lista inferior donde se muestran las entradas del mes */
ul#calendarUl { }
ul#calendarUl li { }
ul#calendarUl li a { /* cada item de la lista es un enlace */
color: #9AB;
display: block;
font-size:11px;
padding-left:30px;
}

REFERENCIAS:BloggerSPhera

36 comentarios:

Delyriaz

intentando

Delyriaz

listo ya lo ise :D al principio el único error mió fue que no tenia mi archivo del blog como lista una ves puesto a si me sorprendí son los resultados

proteo

Que tal, gracias por la contribución, sólo tengo una duda, funciona como debe ser?, pues tengo implementado uno similar, pero al parecer tiene un erorcillo por alguna parte, pues después de algún tiempo, algunos de los días, los marca como que no existen entradas, y cómo es molesto eso, pero como no había otro, pues...
Otra cosa, no hay manera de que muestre el año?...
Gracias, nos vemos..

Graciela

fantástico JMIUR ya probaré hacerlo, buen lunes :)

Bonzu Pipinpadaloxicopolis III

Lo malo es que no muuestra un enlace directo a la entrada, usa uno como este http://jmiur.blogspot.com/search?updated-max=2010-06-05T23%3A59%3A59-03%3A00&updated-min=2010-06-05T00%3A00%3A00-03%3A00
Se podrá cambiar para que muestre un enlace directo?

JMiur

Delyriaz: ¡Qué velocidad! Perfecto :D

proteo: Por lo que veo, funciona ien pero no puedo saber si produce conflictos, simplemente muestra lo mismo que muestra el elemento Archivos. No tengo forma de comprobarlo. Lo del año, no sabría contestarte.

Graciela: Inténtalo, es bastante sencillo de poner :)

Bonzu: Ningún modelo de calendario haría eso ya que en una misma fecha podría haber varias entradas distintas por lo tanto, sería imposible.

Bonzu Pipinpadaloxicopolis III

Cierto olvidaba ese detalle :$

proteo

Que tal, una pregunta, hay manera de quitar la lista con los enlaces a las entradas correspondientes o cuando menos de limitarla un poco, pues algunos días, tengo hasta 20 entradas, y eso lo haría demasiado largo, y con lo del año, pues ni modo, ojalá que saquen alguno que contenga el año, nos vemos...

Jabba

¡Qué buen truco! Lo he visto en el blog de pruebas y sin duda queda más retro que el típico listado del archivo de Blogger. Yo lo eliminé de la sidebar hace tiempo pero pienso probar esto a ver qué tal.

Un saludo maestro. Espero que todo siga genial ;) .

JMiur

Ocultarla es posible:
#calendarDisplay {display:none;}

Para quitarla habría que modificar el script.

JMiur

Saludos, Jabba ¡tanto tiempo sin saber de usted! Es una alternativa interesante si no hay demasiadas entradas mensuales, se ve bien y puede crearse cualquier diseño. Espero que lo aplique para verlo :D

proteo

Que tal, desgraciadamente, parece arrastrar el mismo error que el calendario anterior, al parecer, al ser muchas entradas en un mes, el calendario no puede soportarlo, pues en un mes tengo 250, y es en ese mes, en el que tengo el error, lástima:$, ojalá alguien sepa y avise como poder arregrarlo, pues se ve más presentable el archivo del blog así, pero para el que le sirva, si se puede poner el año, sólo hay que configurarlo para que lo muestre (enero 2009), y en el CSS, ajustar la caja haciendola más grande, nos vemos...

JMiur

proteo:
La cantidad de feeds que pueden leerse está limitada a un máximo de 100 entradas. Lo único que puede hacerse es agregarle un valor más alto lo que no significará que funcione, sólo que es posible:

<script chartset='utf-8'
src='/feeds/posts/summary?max-results=500&amp;alt=json-in-script&amp;callback=timezoneSet'/>

proteo

Que tal, gracias por el tip, lo probé, pero no funciona, así que en el inter, lo dejaré así, a lo mejor más adelante, que más gente lo pruebe, encontrarán la solución, otra cosa, no sabrás de casualidad porque al entrar al link que muestra el calendario en cierto día y mandarte a la página individual, este ya no se muestra, nos vemos...

proteo

Hola, retiro la pregunta, no se muestra porque le dejé una condicional, y nunca la borré, nos vemos...

Oloman

Mu chulo. Hace tiempo busqué algo así, aunque ahora ya me da más pereza implantarlo. Echaba de menos los títulos de los post, pero al ver el ejemplo de prueba me he dado cuenta de que son los textos que salen debajo. Un saludo.

JMiur

Sí, lo que se muestra debajo son los títulos de los posts del mes.

Gian ♫

Hola, gracias por el post buenísimo
pero a mi no me salen los números y ya revise todo que
habrá pasado se me habrá olvidado algún código o que falta.

JMiur

Pués no lo veo en ninguno de tus blogs, Gian.y necesitaría verlo para responderte.

Solidaridad

Hola JMIUR, dime entube mirando que cada ves que coloco una entrada el widget de archivo que muy generosamente tome de esta entrada se expande en su parte de inferior, haciendo referencia a cada post, observe si veía algún numero que las redujera pero no lo halle... la pregunta que tengo que cambiar para congelar la cantidad de post que aparecen en ese sitio. la otra pregunta se puede centrar o dar propiedades a un widget o un gadyed de imagen que no tiene por donde agregarle nada. gracias maestro

JMiur

No hay forma de controlar la cantidad. Puedes mostrarlos o no mostrarlos (como en el ejemplo de este post). Eventualmente, podrías dimensionar la altura y que aparezca una barra de desplazamiento:

ul#calendarUl { height: valorpx; overflow-y: auto; }

El elemento Imagen no tiene opciones así que sólo es posible darle propiedades si usas el ID de ese elemento:

#NOMBRE { ........ }

Es más sencillo colocar las imágenes en un elemento HTML que te permite poner culaquier tipo de código.

xRojôx

Hola Jmiur una duda como puedo hacer para que no muestre los post mas recientes debajo del calendario ya lo intente pero no puedo espero me puedas ayudar Gracias...

JMiur

xRojôx:
Coloca esto:

ul#calendarUl {display:none;}

y con eso las ocultas. No pueden sacarse, son aprte del script pero si pueden ocultarse porque si son muchas son molestas.

xRojôx

muchas gracias por contestar tan rapido aprovecho para agradecerte por este blog que me ha servido de mucho en el blog Saludos Jmiur suerte en tus proyectos

JMiur

Gracias, xRojôx. Me alegro que sirviera de algo.

Blog

Hola JMiur,
He seguido todos los pasos pero no se implanta como debiera. No aparecen los números de los días ni los enlaces.
Es muy probable que haya metido la pata en algo, pero he repetido el proceso y me vuelve a ocurrir lo mismo. ¿Qué puede ser?
La dire del blog: www.raulfernandezdepablo.blogspot.com

JMiur

Como ese blog sólo acepta invitados, no sabíra decirte cual es el problema.

galo

Hola Jmiur me funcionó perfecto y quedo buenisimo. Lo que me paso muy extraño es que cuando me pase a un dominio personalizado .com.ar dejo de funcionar y me muestra la lista normal. Lo mismo me pasa con otros artilugios tuyos que implemente como el de ultimos comentarios ("ya mismo") y el de ultimos post con miniatura. Lo mas raro es que en la vista previa se ve perfectamente funcional :S
Por supuesto que cambie las direcciones de los feeds que ya estan funcionando normalmente con el nuevo dominio. ¿alguna idea?

JMiur

galo:
No sabría responderte. No debería pasar ya que se leen feeds ¿Será un problema de los feeds? ¿Faltará redireccionarlos al nuevo dominio?

galo

Es notable el hecho de que la vista previa funcione perfecto y volviendo al dominio blogspot tambien. No lo pego aca por que como mi actividad es comercial no queda bien. Si te interesa te mando por mail el link como curiosidad por que se ve que es un tema que esta fuera de nuestro alcance.

JMiur

galo: Envíalo, no hay problema. Tal vez vea algo que sirva para buscar la solución, no perdemos nada probando :)

galo

Jmiur hice como me dijiste por mail y pegué los scritps en la plantilla, quedo todo funcionando perfectamente. Debí hacerte caso cuando planteaste tus dudas en otro post donde dije que google sites ahora podia alojar scripts .js sin cambiar la extensión. Eso me funcionó pero inexplicablemente (al menos para mi) solo mientras el dominio era de blogspot. De todos modos aclaro que con el dominio personalizado y cambiando la extension de los scripts también funciona alojándolos en google sites. Muchas gracias por tu ayuda.

JMiur

Me alegra que se resolviera, Galo. No es la primera vez que veo que pasa eso con Google Sites; como no lo uso no sabría decirte por que ocurre, ¿habrá alguna restricción?

galo

Si algo asi es lo que conjeturé. Ahora no me acuerdo bien, pero en un momento habia notado que algunas imagenes funcionaban o no segun si el link incluyera el parametro ?attredirects=0 , que no se que es, pero asi es como aparece cuando uno copia la direccion directamente desde el objeto en cuestion en google sites.

JMiur

Suena a un parámetro interno. Acabo de leer esto en un Grupo de Ayuda. Tal vez, es un parámetro obligatorio açun en los scripts.

Gabriel Schvartz

De acuerdo a lo que he estado probando, el número de celdas del calendario debería ser 42, y no 37 como está actualmente publicado el código.

¿Quiere dejar un comentario?

Hay varios métodos posibles.

Uno de ellos es el formulario de comentarios que tan generosamente nos ha regalado Blogger y que funciona sólo de tanto en tanto. Su uso es aconsejable sólo en caso de ser una de esas personas a las que les gustan los retos y los desafíos.
¿No quiere arriesgarse? Haga click para ocultarlo y utilice las otras opciones.

Todos los archivos y demos alojados en Fileden han sido redireccionados y deberían estar funcionando correctamente.
De todos modos, también puede accederse a ellos a través de SkyDrive

Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.

Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...

Los comentarios están siendo moderados y serán publicados a la brevedad.