El error, en realidad, no tiene sentido explicarlo y las soluciones para evitarlo deben ser varias pero, como no soy versado en esto del JavaScript, se me ocurre que lo más simple es lo más seguro aunque no sea demasiado profesional así que, cumplo con Ariane y trataré de explicar la idea general que podría aplicarse en cualquier modelo de diseño ya que esto es posible agregarlo en la plantilla, en un widget de tipo HTML, en una página estática o incluso en un post.
Primero el script que podemos poner antes de </head>:
<script language="JavaScript"> //<![CDATA[ imgr = new Array(); var contarlabels = 0; // esto es lo que deberíamos configurar imgr[0] = "URL_imagenxdefecto"; // establecer la imagen por defectoq euse va a utilizar showRandomImg = true; // poner false si no se quiere que la imagen sea aleatoria summaryPost = 60; // cantidad de caracteres del resumen summaryTitle = 25; // cantidad de caracteres del título numposts = 5; // cantidad de entradas a ser mostradas // la lista de etiquetas que queremos mostrar; acá hay dos pero puede haber mas // siempre entre comillas y separadas por una coma labelname = new Array("iconos","Twitter"); // los nombres de las etiquetas a mostrar labeltitle = new Array("iconos","Twitter"); // los títulos a mostrar // esta es la función general que elimina las etiquetas HTML function removeHtmlTagEtiquetas(strx,chop){ var s = strx.split("<"); for(var i=0;i<s.length;i++){ if(s[i].indexOf(">")!=-1){ s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length); } } s = s.join(""); s = s.substring(0,chop-1); return s; } // esta es la función que analiza las entradas y las muestra function showrecentpostsetiquetas(json) { var salida = ""; var salidainner= ""; j = (showRandomImg) ? Math.floor((imgr.length+1)*Math.random()) : 0; img = new Array(); for (var i = 0; i < numposts; i++) { var entry = json.feed.entry[i]; if (i == json.feed.entry.length) break; // el titulo de la entrada var posttitle = entry.title.$t; // buscamos al url del post var posturl; for (var k = 0; k < entry.link.length; k++) { if (entry.link[k].rel == "alternate") { posturl = entry.link[k].href; break; } } // buscamos el contenido del post if ("content" in entry) { var postcontent = entry.content.$t; } else if ("summary" in entry) { var postcontent = entry.summary.$t; } else var postcontent = ""; // aquí se busca entre las imágenes y se selecciona una if(j>imgr.length-1) j=0; img[i] = imgr[j]; s = postcontent; a = s.indexOf("<img"); b = s.indexOf("src=\"",a); c = s.indexOf("\"",b+5); d = s.substr(b+5,c-b-5); if((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!="")) img[i] = d; // terminada la lectura de cada post, se crea el HTML del contenido var trtd = ""; trtd += '<a href="' + posturl + '"><img src="' + img[i] + '"></a>'; trtd += '<a class="tlabel" href="' + posturl + '">' + removeHtmlTagEtiquetas(posttitle,summaryTitle) + '</a><br/>'; trtd += removeHtmlTagEtiquetas(postcontent,summaryPost); trtd += ' ...<div class="botline"></div>'; // y continuamos con el siguiente salidainner += trtd; j++; } // una vez que se lee la cantidad de posts indicada en numposts, se crea el HTML del DIV y se muestra salida += '<div class="featured">'; salida += '<h3>' + labeltitle[contarlabels] + '</h3>'; salida += salidainner; salida += '<a class="morelabels" href="http://vagabundia.blogspot.com/search/label/' + labelname[contarlabels] + '?max-results=10">ver otras entradas de '+ labelname[contarlabels] +'</a>'; salida += '</div>'; document.write(salida); contarlabels ++; } //]]> </script>
<style> .featured { /* es el rectángulo contendor de cada etiqueta */ float: left; font-size: 11px; height: 390px; margin: 0 10px; overflow: hidden; padding: 10px; width: 270px; } .featured h3 { /* el título general */ background-color: #555; border-bottom: 1px solid #888; color: #BBB; margin: 0 0 10px; padding: 5px 0; text-align: center; } .featured img { /* las miniaturas */ background-color: #555; float: left; height: 50px; margin: 0 8px 0 0; padding: 2px; width: 50px; } .featured .botline { /* la línea divisoria */ border-bottom: 1px dotted #555; clear: both; margin-bottom: 5px; padding: 0 0 5px; } .featured a.tlabel { /* el título de cada post */ font-size: 11px; display: block; float: left; max-width: 205px; overflow: hidden; white-space: pre; } .featured a.morelabels { /* el enlace final a las etiquetas */ background-color: transparent; color: #AAA; display: block; padding: 4px 0; text-align: center; } .featured a.morelabels:hover {background-color: #555;} </style>
<div id="miejemplo"> <script src="http://miblog.blogspot.com/feeds/posts/default/-/UNA_ETIQUETA?max-results=5&orderby=published&alt=json-in-script&callback=showrecentpostsetiquetas"></script> <script src="http://miblog.blogspot.com/feeds/posts/default/-/OTRA_ETIQUETA?max-results=5&orderby=published&alt=json-in-script&callback=showrecentpostsetiquetas"></script> <!-- y seguimos agregando todos los que se nos ocurra mostrar --> </div> <div style="clear:both;"></div>
50 comentarios:
Una vez que se aprende a manejar los feeds, se puede hacer cosas geniales para mostrar de una manera un poquito más dinámica todo lo que se guarda uno en el blog. Son hermosos...
Hola
he tratado pero no me funciona... estoy haciendolo en las nuevas plantillas de Blogger. en que lugar va id="miejemplo" en el CSS ?
Sólo he podido echar un primer vistazo a todo esto y de momento se me escapa totalmente; pero he visto el ejemplo de "Feminina Magazine" y todavía no puedo cerrar la boca por la sorpresa de ver que esto es posible en Blogger. Impresionante, ya está en mis favoritos...
Qué bonito queda, la plantilla de Ariane es preciosa, delicada, prolija...como dijo alguien, algo así como un arte :P
Creo que con prudencia, es una manera interesante de experimentar. El código siempre es el mismo así que ahí no hay secretos y lo que va variando es la forma de mostrar las cosas. A veces es engorroso pero no tanto.
Sin la menor duda, la plantilla de Ariane es de lo mejor ... como siempre :D
La Tobonera:
Eso no sería el CSS sino los DIVs donde se moratrará el resultado, así que todo eso debe ir en un post o en un elemento HTML o directamente en la plantilla, allí donde quieras que se muestre. Funcioanrá en cualquier palntilla, incluso las nuevas.
Extraordinario JMiur, muy bien explicado. Hay muchas veces que se necesita hacer eso para configurar más estilo y dejarlo más bello en el blog. Una pregunta, ¿esto también se puede hacer con los "miniposts"?
Saludos desde Chile!
Imagino que sí, no sé cuál es el método que estás utilizando pero, si esos miniposts tienen una etiqueta, puede hacerse exactamente lo mismo.
Hola que tal, buscaba hace mucho algo como lo que explicas aqui pero queria saber que cambiar en el script para que en lugar de redimensionar las imagenes de un post, se utilicen las miniaturas que blogger crea de las imagenes alojadas en Picasa.
Gracias y Feliz Año...
Combinado esto con lo que muestra una entrada anterior
// buscamos la miniatura de la imagen de la entrada
if ("media$thumbnail" in entry) {
postimg = entry.media$thumbnail.url; // si hay una imagen la guardamos
} else {
// si no hay una imagen, usaremos una imagen por defecto
postimg = "URL_imagen_por_defecto";
}
postimg contendrá la URL de la miniatura de la imagen
He escrito a un amigo hablándole de este superhallazgo y parece que la demo no se puede ver... ¿Alguien sabe dónde hay algún otro ejemplo parecido?
Seguramente, cuando Arianne complete la plantilla, será publicada.
Hola, me parece bastante útil este tutorial sin embargo lo he implementado en mi blog y no he conseguido lograr mostrar los post en un gadget html, me podrías guiar como debe ser el script exacto que debo escribir. El blog donde lo estoy tratando de implementar es demacondoalaleph.blogspot.com
No sé cuál es tu ejemplo para ver si hay algún error; el llamado al script sería tal como dice el post:
<script src='http://demacondoalaleph.blogspot.com/feeds/posts/default/-/NOMBRE_ETIQUETA?max-results=5&orderby=published&alt=json-in-script&callback=showrecentpostsetiquetas'></script>
con el nombre de la etiqueta que quieras mostrar, escrital tal cual está definida ya que es sensible a mayúsuclas y minúsculas.
Hola nuevamente.
Lo que he hecho hasta ahora del tutorial es:
1. Agregar la función tal como dices, editando los nombres de las etiquetas. Al final del código hay una linea que hace referencia al feed que es para mostrar el texto "más entradas sobre ETIQUETA", tambien lo he modificado.
2. Coloco el CSS antes de ]]> cuando lo coloco ahí me da el problema que me salen unos caracteres en la parte superior del blog que desplazan todos los elementos hacia abajo. Sospecho que aquí esta mi problema.
3. Finalmente voy a diseño -> agregar gadget javascript/html y llamo a la función tal como lo has escrito sin embargo no funciona.
Mi idea es colocar tres gadgets en el footer del blog donde aparezcan las últimas entradas de las etiquetas más importantes.
Te agradezco la ayuda.
Saludos.
Veo que el script está pero no veo ni esos divs ni ningún script que llame a la función showrecentpostsetiquetas por lo que no puedo decirte dónde está el error.
Ya he hecho todo los pasos que escribí en la anterior respuesta, fijate que en el footer del post dice "consejos para tus viajes" pero no aparece los post ni nada. El código que pegué en el gadget html es:
(agregué los * porque no me deja mandar el mensaje con etiquetas html)
Gracias por el seguimiento que le has hecho al problema.
Como te dije antes, los scripts son sensibles a mayúsculas y minúsculas y el script alli dice esto:
http://demacondoalaleph.blogspot.com/feeds/posts/default/-/consejos viaje
cuando en realidad, deberíadecir esto:
http://demacondoalaleph.blogspot.com/feeds/posts/default/-/Consejos Viaje
ya que la etiqueta se llama Consejos Viaje y no consejos viaje
Como estás utilizando un elemento HTML, deberás cambair las comilla simples por dobles ya que en Blogger parece haber un bug que cambia las letras mayúsculas por minúsculas cuando el atributo está entre comillas simples.
Listo, ya funcionó. Tendré que hacer unos ajustes para que coincida con la plantilla.
Una última pregunta porqué cuando coloco el segundo trozo de código el que hace referencia al Style antes de ]]>, me aparece un --> en la parte superior izquierda del blog que corre todos los elementos hacia abajo, fijate en el header. Alguna idea para que no aparezca.
Bien. Me alegra que se fuera resolviendo.
Lo de --> es porque dentro de b:skin tienes una etiqueta <style> </style> que debes eliminar porque no pueden anidarse etiquetas allí dentro.
Disculpa que cada vez que se soluciona un problema aparece otro pero es que cuando elimino la etiqueta style, se corren todo el gadget incluido los textos en el footer.
Tienes un error de sintaxis y debes quitar esas etiquetas. Tal vez hay otras; lo que ves en al plantilla es distinto de l oque se ve online. BSKIN comienza así:
<b:skin><![CDATA[
y termina así:
]]></b:skin>
entre ambas no debe haber ninguna otra etiqueta HTML.
Hola Jmiur, he hecho lo del script, pero algunas entradas que tienen imagenes aparecen sin miniatura. ¿Es porque están alojadas en servicios externos? ¿Sólo funciona con imagenes del propio Blogger?
No sé cuál es tu blog. Deberías ver en el código fuente de esas entradas donde no se muestran imágenes y ver si allí encuentras este codigo:
<link rel="image_src" href="...............
Esa es la imagen que detecta Blogger y que utiliza este script. No importa si está alojada en Blogger mismo o es una imagen externa.
no comprendo donde pongo eso codigos? hay no dice solo dice modifarlo xD
Pués el post dice:
... primero el script que podemos poner antes de ...
...
... que es lo que haremos a continuación de lo anterior ...
...
... y colocamos esos scripts exactamente allí donde quisiéramos que se mostraran ...
hola Jmiur!, justo lo que estaba buscando, lo implmenté en mi blog en esta entrada http://www.aguaysig.com/2010/04/shape-y-proyecciones.html, pero tengo un problema no se ven las imagenes, no se que hice mal... Muchas muchas gracias...
Hola jmiur, perdona no terminé el comentario anterior, como te comenté lo implementé en la entrada: http://www.aguaysig.com/2010/04/shape-y-proyecciones.html, pero no me está mostrando las miniaturas de cada entrada (todas mis entradas tienen imágenes) y también como yo tengo muchas etiquetas en la parte superior me debería salir Proyecciones y me aparece Spatial Analyst... me gusta como quedó, ojalá me ayudes a correjir lo que hecho mal.. muchas gracias!
En este momento, esa página y todo el dominio parece inaccesible.
Hola Jmiur, arreglé el inconveniente de las imagenes, se presentaba porque tenía el feed en corto, pero aun no puedo arreglar el inconveniente de las etiquetas en la parte superior, pues siempre me aparece la misma: Spatial Analyst... se ve muy bien, muchas gracias
Porque estás ejecutando la función una sola vez; el post dice:
Hecho todo eso no pasará nada; nos falta llamar a la función tantas veces como etiquetas queramos ver y eso, lo hacemos con otro script tal como lo hacemos en todos los ejemplos anteriores y colocamos esos scripts exactamente allí donde quisiéramos que se mostraran; por ejemplo ...
Hola Jmiur, que pena...lo que sucede es que yo quiero mostrar solo una etiqueta determinada en esa entrada...si vuelvo a llamar la función me va a colocar otra etiqueta y agregar una nueva lista de post,... La idea que tengo es mostrar las etiquetas y las listas en entradas separadas no en un mismo post.. bueno no se si me expliquè... muchisimas gracias pro tu ayuda, Tu blog me ha ayudado mucho a mejorar el mío.
El script que estás usando hace lo que dice la entrada, colocar varias etiquetas.
Si en otra entrada quieres mostrar otra etiqueta, debes usar otro tipo de script; similar pero distinto, algo como estos 1, 2
Hola JMiur, me quedé con el script, se ve muy bien el resultado... lo que para no ver las etiquetas en el CCS le dije que no me mostrara el nombre y listo. Pero he notado que en algunas paginas no me muestra las entradas parece que puede ser temporal, sin embargo no se que esta pasando, reviso el código y tod esta bien.. por ejemplo en esta página no me muestra nada:
http://www.aguaysig.com/2011/05/3d-analyst.html
http://www.aguaysig.com/2010/04/modelbuilder.html,
lo mas extraño es que el primer día que implementé el Script me mostró todas las entradas bien.. muchas gracias!!
En los dos enlaces que colocas, se ven entradas.
JMiur
Holaaaaa, ¡¡estoy que no me lo creo!!, llevo unos días que me sale todo lo que intento hacer, desde que me hablaste de ésta entrada, intenté hacerlo y algo hacía mal porque no me salía pero, hoy, ¡¡lo conseguí!!, tengo que pulir algunas cosas, lo he puesto en una entrada antigua pero aún no está publicada, está en borradores, hasta que consiga que todo quede a mi gusto
Como te dije, tengo cosas que pulir y no dudes que igual te tengo que molestar para preguntarte alguna cosa, aunque, antes de preguntarte intentaré hacerlo yo sola, así aprendo un poco
Gracias, gracias y más gracias, jajajajaja
Perfecto, Ana :-D
Aquí vuelvo, ya sabía yo que te iba a tener que preguntar alguna cosa
- ¿Se podrían poner las entradas por orden alfabético?
- A pesar de haber puesto 0 en la cantidad de caracteres del resumen, me salen tres puntos en su lugar, he probado quitando esa línea entera pero, entonces no se ven ni miniaturas, ni nada, ¿que debería poner o quitar para que no me salgan esos puntos?
- No me sale en dos columnas como en tu ejemplo, ahora he modificado alguna cosa pero, antes de modificarlo, tampoco me salía
- Me pasaba como en un comentario que te han hecho, me salía en la cabecera del blog --> , pero, he puesto lo de style así:
</style>
........
<:/style>
Y se ha solucionado ¿está bien puesto o eso crea algún problema en la plantilla?
-¿Puedo alojar el script en un servidor?, si lo alojo ¿la carga del blog sería más rápida o daría igual?
Aún no está completo, no he puesto todas las etiquetas, lo he puesto de manera que se vean todos los posts de cada etiqueta, supongo que, cuando ponga todas las etiquetas, eso hará que se ralentice la carga de esa página,, bueno, ya lo iré viendo, por si quieres ver como queda ahora, te paso la dirección:
http://vientoybambu.blogspot.com/2008/12/indice-con-miniatura-de-imagen.html
Espero que no me eches de tu blog por tanta pregunta, jeje
Un abrazo
Para ponerlas en orden habría que leerlas todas, guardarlas, ordenarlas y luego mostrarlas. No sería sencillo.
Si no quieres ver el resumen de las entradas, borra esta línea:
trtd += removeHtmlTagEtiquetas(postcontent,summaryPost);
Eso de que se ve --> es porque hay algo la colocado o mal cerrado; lo que estás escribiendo, si es tal cual lo muestras, también es un erro:
</style&t;
........
<:/style>
</style> cierra una etiqueta <style&t; abierta previamente; <:/style> no significa nada.
No sé donde has puesto todo eso ¿será que estás colocando el estilo dentro de <b:skin> </b:skin> ? Si es así, las etiquetas <style> y </style> no deben colocarse.
¿Qué tipo de columnas serían? La lista de entradas de una etiqueta en dos columnas? Si es así, deberían agregar algo al script; "rodear los enlaces" con un DIV, cambiando esto:
salidainner += trtd;
por algo así:
salidainner += "<div class='cadauna'>"+trtd+"</div>";
y luego, establecer las propiedades de estilo para esa clase a la que en este caso llamo cadauna pero podría ser cualquier nombre que te guste.
Hola
Me temo que copié mal lo del style, lo puse así
<:style>
........
<:/style>
pero si eso está mal puesto ¿en que zona de la plantilla debería poner el estilo?, he probado a ponerlo sin esas etiquetas pero entonces no se ve nada en la entrada
Para que no se vieran esos 3 puntos que te decía, he borrado la línea que me dices pero, seguía igual, y borré también la siguiente línea y así ya ha funcionado, he borrado todo ésto:
trtd += removeHtmlTagEtiquetas(postcontent,summaryPost);
trtd += ' ...<div class="botline"></div>';
De momento, lo de las columnas no me sale pero seguiré intentándolo
Saludos
No veo los famosos tres puntitos. Al quitar eso que te he dicho, simplemente, no muestras un resumen de la entrada que es lo que los generaba.
No sé si estás escribiéndolo mal en el comentario o en la plantilla pero, esto es erróneo:
<:style>
........
<:/style>
esos dos puntos delante deben quitarse, debería ser así:
<style>
........
</style>
Los famosos tres puntos ya los eliminé al quitar del script esas dos lineas que te dije en mi comentario anterior
Y esos dos puntos si que están puestos en la plantilla y al ponerlos se me quitó lo que veía arriba de la portada del blog -->, alquien me dijo hace tiempo que pondría esos dos puntos en otra ocasión que me pasó algo igual, pero no recuerdo quien fue y, por eso los puse ahora pero, si es erróneo los quito
Muchas gracias JMiur, que tengas un buen día y perdona las molestias
Sí. esos dos puntos son un error.
El problema más común cuando se ven cosas como --> es que se agregaron comentarios dentro de una etiqueta STYLE o dentro de B:SKIN con este formato:
<!-- un comentario cualquiera -->
cosa que es errónea ya que en CSS los comentarios deben tener este otro formato:
/* un comentario cualquiera */
Hola JMiur;
he estado revisando tus entredas para hacer un nuevo diseño y este truco me ha gustado.
Queria preguntarte si seria posible agregarle a cada post de cada etiqueta, la fecha y el numero de comentarios que tiene cada entrada!!
Una vez mas, gracias...
Si, es posible, debes leerlos en el bucle principal . Allí, algo así guardaría la cantidad de comentarios en una variable:
var cantidad_comentarios entry.thr$total.$t;
y esto guardaría al fecha:
var fecha = entry.published.$t ;
pero, esta última habrá que decodificarla y convertirla en un formato más legible.
te agradezco la pronta respuesta JMiur, y siendo pesado te diré, que no lo he entendido demasiado. Por intuicion he colocado las lineas que me dices despues de:
// el titulo de la entrada
var posttitle = entry.title.$t;
pero no funciona, se deja de mostrar todo el contenido.
Allí donde lo has puesto esta bien, tal vez faltaría el signo = que parece haberse perdido en el comentario:
var cantidad_comentarios = entry.thr$total.$t;
var fecha = entry.published.$t ;
De todos modos, a eso deberás agregarle el HTML o sea, ponerlo en alguna parte de la variable que en este caso, se llama salida:
salida += algo que muestre esos datos;
Una cosa mas Jmiur, que se me olvidaba.
Digamos que quiero utilizar esto para varias etiquetas, pero quiero un css diferente para cada una de ellas.
¿se podria?
Un abrazo...
Si, se podría, deberías identificarlas coon alguna clase; por ejemplo, en lugar de esto:
salida += '<div class="featured">';
poner esto donde la clase será el nombre de la etiqueta:
salida += '<div class="featured'+labelname[contarlabels] +'">';
y de ese modo, usar reglas de estilo particulares:
.featured.etiqueta_1 { ....... }
.featured.etiqueta_2 { ....... }
Pues no lo consigo. Con tu permiso pongo el enlace al archivo .js modificado por si puedes o quieres echarle un vistazo.
https://dl.dropbox.com/u/45505801/Scripts/JSON%20Etiquetas%20-%20Vagabundia.js
Algo debo estar haciendo mal, pero no se que es...
Primero que nada, la sintaxis de esta línea es errónea:
salida += ' + cantidad_comentarios + ';
debería ser;
salida += cantidad_comentarios;
pero, colocada allí, sól ote mostrará un resultado, si vas a mostrar los comentarios de cada una de las entradas, debería ir en el bucle superior y usar alguna etiqueta apra identificarla; por ejemplo:
// y continuamos con el siguiente
trtd += '<p>'+cantidad_comentarios+'</p>';
salidainner += trtd;
¿Quiere dejar un comentario?
recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...
Nota: sólo los miembros de este blog pueden publicar comentarios.
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 ...