Si bien es cierto que los
feeds dan muchas posibilidades para leer los datos de nuestro
blog usando
JSON de manera relativamente simple, esto tiene dos limitaciones importantes, una objetiva y otra subjetiva. La primera es que no podemos leer
TODO ya que siempre nos toparemos con que hay un máximo de 500 items; la segunda es que aún así, cargar cantidades importantes es impráctico porque el tiempo de ejecución se multiplica de manera significativa e incluso, hará que aparezcan ventanas de alerta en los navegadores si ese tiempo supera
el tiempo máximo establecido por cada uno de ellos y se nos solicitará autorización para continuar o cancelar.
La combinación de ambas limitaciones es el motivo fundamental por la cual debemos usar valores pequeños; leer sólo una cantidad de entradas y mostrar eso pero claro, uno siempre quiere más; entonces se hace imprescindible que tengamos alguna clase de paginación o navegación que nos permita ir mostrando pedacitos de información e irlas cargando a medida que el usuario las solicita.
Acá es cuando podemos hacer uso del parámetro
start-index que es el que nos permite solicitar datos a partir de determinada entrada; por ejemplo, esto cargaría las últimas 10 entradas:
http://miblog.blogspot.com/feeds/posts/default?start-index=1&max-results=10&orderby=published&alt=json-in-script&callback=mifuncion
y esto las siguientes diez:
http://miblog.blogspot.com/feeds/posts/default?start-index=11&max-results=10&orderby=published&alt=json-in-script&callback=mifuncion
y así, sucesivamente:
http://miblog.blogspot.com/feeds/posts/default?start-index=21&max-results=10&orderby=published&alt=json-in-script&callback=mifuncion
http://miblog.blogspot.com/feeds/posts/default?start-index=31&max-results=10&orderby=published&alt=json-in-script&callback=mifuncion
Podría, entonces, combinarse eso con alguno de los tantos
scripts que hay pero sería engorroso y además, terminaríamos llenando la memoria con tanta cosa que en algún momento colapsaría el navegador o se haría imposible de usar.
Muchos podrían decir que, sin embargo, hay decenas de sitios donde parece que esto de la paginaciòn funciona ya que podemos navegar por la información sin salir de la página, vemos alguna clase de imagen de carga y avanzamos o retrocedemos pero, ese tipo de sitios suele usar PHP o Ajax, dos cosas que en Blogger nos están vedadas así que hay que buscar una solución alternativa y una de ellas es utilizar la idea de
cargar scripts de manera dinámica de tal forma que si eso lo combinamos con lo inverso y podemos
remover el script, solucionaríamos el problema y podríamos cargar los datos, usarlos y deshacernos de ellos.
Entonces, vamos a tratar de usar eso para mostrar
TODAS las entradas del
blog en una misma página sin colapsarla, agregándole la posibilidad de navegar por ellas.

Paginar: he ahí el dilema y, como esto va a ser una mezcolanza de cosas, para poder hacer una buena paginación, lo que debemos hacer es usar algo que ya exista; en este caso, uno de los tantos scripts de PHP que hay pero traducido a JavaScript.
¿Cómo paginamos algo? Necesitamos tres datos: saber la cantidad total de entradas, determinar la cantidad de entradas por página que se mostrarán y saber en qué página estamos; lo primero es un dato que tiene el mismo
feed así que podemos leerlo ya que hay muchos
gadgets que muestran la
cantidad de entradas publicadas:
postporpagina = 50; // es un dato que definimos nosotros
cantidadposts = parseInt(json.feed.openSearch$totalResults.$t); // leemos la cantidad de entradas publicadas
cantidadpaginas = parseInt(cantidadposts / postporpagina) + 1; // y calculamos la cantidad total de páginas
El
script completo se puede ver en
este archivo de texto pero, de todas maneras, acá van las explicaciones: Ver/Ocultar
[+]// estos son los datos que debemos establecer
var postporpagina = 60; // la cantidad de entradas a mostrar por página
var urlsitio = "http://miblog.blogspot.com"; // la url de nuestro blog
var minpaginas = 5; // la cantidad mínima de páginas a mostrar
var maxpaginas = 10; // la cantidad máxima de páginas a mostrar
var imgxdefecto = "http://xxxxxxxxxxx"; // la dirección de la imagen por defecto a ser utilizada
var firsttime = 0; // lo usamos para detectar la primera vez que se ejecuta
var paginaactual = 1; // contendrá el número de página donde estemos
var cantidadpaginas = 0; // contendrá el número total de páginas
var cantidadposts = 0; // contendrá el número total de entradas
// la función que interpreta los feeds y que siempre es más o menos la misma
function showpageposts(json) {
var entry, posttitle, posturl, postimg;
var salida = "";
// la primera vez que se ejecuta la función, leemos la cantidad de entradas que hay y calculamos la cantidad de páginas
if(cantidadpaginas==0) {
cantidadposts = parseInt(json.feed.openSearch$totalResults.$t);
cantidadpaginas = parseInt(cantidadposts / postporpagina) + 1;
}
// leemos los datos que luego mostraremos
for (var i = 0; i < postporpagina; i++) {
if (i == json.feed.entry.length) { break; } // si no hay más, salimos
entry = json.feed.entry[i];
// el título de las entradas
posttitle = entry.title.$t;
// buscamos la url de las entradas
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
posturl = entry.link[k].href;
break;
}
}
// buscamos la imagen de las entradas o usamos la que establecimos por defecto
if ("media$thumbnail" in entry) {
postimg = entry.media$thumbnail.url;
} else {
postimg = imgxdefecto;
}
// armamos el código HTML de salida de manera similar a lo que se veía en una <a href="http://vagabundia.blogspot.com/2010/12/usar-json-para-mostrar-las-entradas-del.html" target="_blank">entrada anterior</a>
salida += "<div class='paginaposts'>";
salida += "<a href='" + posturl + "' target='_blank'><img src='" + postimg + "' /></a>";
salida += "<h6><a href='" + posturl + "' target='_blank'>" + posttitle + "</a></h6>";
salida += "</div>";
}
// listo, ahora lo mostramos
document.getElementById("resultados").innerHTML = salida;
// y ejecutamos la función para paginar
paginacion();
}
// esta es la función que muestra la paginación
function paginacion() {
contadorP = 0;
salida = "";
// dependiendo de donde estamos, ponemos un enlace para retroceder o no
if(paginaactual>1) {
salida += "<a class='antesdespues' href='javascript:incluirscript(" + parseInt(paginaactual-1) + ")'>anterior</a>";
} else {
salida += "<span class='deshabilitado'>anterior</span>";
}
// se calcula y se muestran los números de las primeras páginas, una sepación y las últimas páginas
if (cantidadpaginas<(maxpaginas+1)) {
for (contadorP = 1; contadorP <= cantidadpaginas; contadorP++){
if (contadorP==paginaactual) {
salida += "<span class='actual'>" + contadorP + "</span>";
} else {
salida += "<a href='javascript:incluirscript(" + contadorP + ")'>" + contadorP + "</a>";
}
}
} else if(cantidadpaginas>(maxpaginas-1)) {
if(paginaactual<minpaginas) {
for (contadorP=1; contadorP<(maxpaginas-2); contadorP++){
if (contadorP == paginaactual) {
salida += "<span class='actual'>" + contadorP + "</span>";
} else {
salida += "<a href='javascript:incluirscript(" + contadorP + ")'>" + contadorP + "</a>";
}
}
salida += " ... ";
salida += "<a href='javascript:incluirscript(" + parseInt(cantidadpaginas-1) + ")'>" + parseInt(cantidadpaginas-1) + "</a>";
salida += "<a href='javascript:incluirscript(" + cantidadpaginas + ")'>" + cantidadpaginas + "</a>";
} else if(cantidadpaginas-(minpaginas-1)>paginaactual&&paginaactual>(minpaginas-1)) {
salida += "<a href='javascript:incluirscript(1)'>1</a>";
salida += "<a href='javascript:incluirscript(2)'>2</a>";
salida += " ... ";
for (contadorP=paginaactual-2; contadorP<=paginaactual+2; contadorP++) {
if (contadorP==paginaactual) {
salida += "<span class='actual'>" + contadorP + "</span>";
} else {
salida += "<a href='javascript:incluirscript(" + contadorP + ")'>" + contadorP + "</a>";
}
}
salida += " ... ";
salida += "<a href='javascript:incluirscript(" + parseInt(cantidadpaginas-1) + ")'>" + parseInt(cantidadpaginas-1) + "</a>";
salida += "<a href='javascript:incluirscript(" + cantidadpaginas + ")'>" + cantidadpaginas + "</a>";
} else {
salida += "<a href='javascript:incluirscript(1)'>1</a>";
salida += "<a href='javascript:incluirscript(2)'>2</a>";
salida += " ... ";
for (contadorP=cantidadpaginas-(minpaginas+1); contadorP<=cantidadpaginas; contadorP++) {
if (contadorP==paginaactual) {
salida += "<span class='actual'>" + contadorP + "</span>";
} else {
salida += "<a href='javascript:incluirscript(" + contadorP + ")'>" + contadorP + "</a>";
}
}
}
}
// dependiendo de donde estamos, ponemos un enlace para avanzar o no
if (paginaactual<contadorP-1) {
salida += "<a class='antesdespues' href='javascript:incluirscript(" + parseInt(paginaactual+1) + ")'>siguiente</a>";
} else {
salida += "<span class='deshabilitado'>siguiente</span>";
}
// mostramos el resultado
document.getElementById("paginacion").innerHTML = salida;
// y eventualmente, podemos mostrar la cantidad total
var iniciopagina = (paginaactual * postporpagina) - (postporpagina - 1);
var finalpagina = paginaactual * postporpagina;
var totales = "Total de entradas publicadas: " + cantidadposts + " - Mostrando entradas " + iniciopagina + " a " + finalpagina;
document.getElementById("totales").innerHTML = totales;
}
// esta es la función que escribe y ejecuta el script de manera dinámica
function incluirscript(pagina) {
// salvo que sea la primera vez, antes, borramos el script
if(firsttime==1) {removerscript();}
// borramos todo y mostramos algún mensaje de carga
document.getElementById("resultados").innerHTML = "<div id='loadingscript'>cargando ...</div>";
document.getElementById("paginacion").innerHTML = "";
document.getElementById("totales").innerHTML = "";
// calculamos el valor a colocar en start-index
var iniciopagina = (pagina * postporpagina) - (postporpagina - 1);
// y armamos la url del feed
var archivo = urlsitio + "/feeds/posts/default?start-index=" + iniciopagina;
archivo += "&max-results=" + postporpagina;
archivo += "&orderby=published&alt=json-in-script&callback=showpageposts";
// cargamos y ejecutamos el script de manera dinámica
var nuevo = document.createElement('script');
nuevo.setAttribute('type', 'text/javascript');
nuevo.setAttribute('src', archivo);
nuevo.setAttribute('id', 'TEMPORAL');
document.getElementsByTagName('head')[0].appendChild(nuevo);
// establecemos los nuevos datos
firsttime = 1;
paginaactual = pagina;
}
// esta es la función que elimina un script previamente agregado utilizando su ID
function removerscript() {
var el = document.getElementById("TEMPORAL");
var padre = el.parentNode;
padre.removeChild(el);
}
// ejecutamos la función por primera vez cuando se termina de cargar nuestro sitio
onload=function() { incluirscript(1); }
Como todo
script, lo colocamos entre etiquetas
<script type='text/javascript'> </script> aunque imagino que lo ideal sería usar una página estática y, en ese caso si colocamos el
script en la plantilla deberíamos condicionarlo o bien alojarlo en algún servidor externo como
DropBox o similar.
Faltaría darle alguna clase de estilo y allí, las posibildiades son muchas; en este ejemplo, usé algo así: Ver/Ocultar
[+]<style>
#resultados { /* es el rectángulo del DIV donde se mostrarán */ }
#loadingscript { /* es el texto de "cargando" */ }
/* estas son las reglas de estilo para las entradas */
.paginaposts { /* cada rectángulo */
border: 1px solid #555;
float: left;
height: 35px;
margin: 1px;
padding: 5px;
width: 197px;
}
.paginaposts a { /* los enlaces */
color: #DDD;
display: block;
font-size: 11px;
text-decoration: none;
}
.paginaposts img { /* la imagen miniatura */
float: left;
height: 36px;
width: 36px;
}
.paginaposts h6 { /* el título de las entradas */
float: right;
height: 45px;
margin: 0;
width: 145px;
}
.paginaposts:hover { /* un efecto hover */
background-image: -moz-linear-gradient(100% 100% 90deg, #338, #33F);
background-image: -webkit-gradient(linear, left bottom, left top, from(#338), to(#33F));
filter:progid: DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#FF3333FF', EndColorStr='#FF333388');
border: 1px solid #33F;
}
/* estas son las reglas de estilo para la paginación inferior */
#paginacion { /* el rectángulo contenedor */
color: #BBB;
font-family: Lucida Grande;
font-size: 24px;
font-weight: bold;
height: 35px;
line-height: 28px;
padding: 20px 0;
text-align: center;
}
#paginacion span, #paginacion a { /* cada número, texto o enlace */
border: 1px solid #444;
color: #BBB;
display: inline-block;
font-family: Lucida Grande;
font-size: 24px;
font-weight: bold;
margin: 0 2px;
padding: 0 5px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
#paginacion span.actual { /* resaltamos la página actual */
color: #FFF;
padding: 0 5px;
-moz-box-shadow: 0 0 30px #DDD inset;
-webkit-box-shadow: 0 0 30px #DDD inset;
box-shadow: 0 0 30px #DDD inset;
}
#paginacion a:hover { /* efecto hover sobre los enlaces */
color: #FFF;
-moz-box-shadow: 0 0 20px #666 inset;
-webkit-box-shadow: 0 0 20px #666 inset;
box-shadow: 0 0 20px #666 inset;
}
#paginacion .antesdespues { border: none; }
#paginacion .antesdespues:hover {
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
#paginacion span.deshabilitado { /* los enlaces deshabilitados */
border: none;
color: #666;
}
/* la salida de la cantidad total */
#totales {text-align:center;}
</style>
Entonces, ya tenemos todo así que en este
demo online lo que he creado es una página estática y allí he puesto lo siguiente:
<style>
/* la reglas de estilo
</style>
<!-- cargo el script -->
<script src="URL_miscript.js"></script>
<!-- los divs contenedores -->
<!-- aquí se mostrarán los posts -->
<div id="resultados"> </div>
<!-- elimino flotaciones -->
<div style="clear:both;"> </div>
<!-- aquí se mostrará la paginación -->
<div id="paginacion"> </div>
<!-- aquí se mostrará el texto con los totales -->
<div id="totales"> </div>
74 comentarios:
¿Nota usted maestro que esto de JSON es muy enviciante? :)
Excelente JMiur.
muy bonito
Guau chuli! queda precioso :D
Hola!!!!..Siempre lo sigo aun cuando no escriba!!!....una pregunta:
que iria debajo de:
-- los divs contenedores --
Y si se puede poner esto en un gadget sólo en la portada para no poner los ultimos posts al inicio...
Gracias!!!
Saludos!!!
Sin palabras, me quedé sin palabras.
¿Dije que no tengo palabras?
Voy a intentarlo :)
Buuuuf, esto me viene demasiado grande. Ya lo he intentado según lo he entendido y nada. El efecto es increíble pero llevarlo a la práctica, para mi, es bastante complicado.
Tenemos que copiar el script en nuestro bloc de notas (poniendo nuestra url y los valores que se ajusten al número de entradas y páginas). Dicho script copiado lo colocamos entre etiquetas < script type='text/javascript'> Lo alojamos en un servidor.
Luego en una página estática copiamos tal cual lo pusiste tú, copiando las reglas de estilo.
Así lo he hecho yo y nada. Supongo que hubiera sido un milagro que me hubiera salido.
Saludos.
Felipe:
Lo noto pero para eso no hay cura.
Gra:
No iría nada, esos textos sólo comentan que es cada cosa; el HTML es simplemente esto:
<div id="resultados"></div>
<div style="clear:both;"></div>
<div id="paginacion"></div>
<div id="totales"></div>
que son los distintos DIVs donde el script mostrará los resultados.
Sí, puede usarse en un elemento HTML sin problemas; si te fijas en mi sidebar, en las entradas individuales uso algo similar a esto y que será tema de otra entrada.
Para verlo en el home simplemente deberás condicionar ese elemento.
Gem@
Eso dijo :D Pruebe y me cuenta.
Daniel Cana:
Sí, así es, exacto. Debería ver tu ejemplo para decirte donde está el error.
Luce genial JMiur!, lo probaré en cuanto pueda :P
Que tengas un estupendo día!
Gracias!!!!!....Me tiro a la pileta y le cuento!!!! Para mí tambien es complicado!!!
Saludos!!!
Saludos, Karla :D
Gra: es ... engorroso más que complicado pero adelante; todo es cuestión de intentarlo :D
hmmmm...still confused with spanish language :-|
but this is look great :O
ugh ugh :(
Gracias JMiur, es un excelente post.
Saludos.
Hola Jmiur es la primera vez que comento en tu blog pero ya llevo tiempo siguiendo tu blog, para mi el mejor sobre trucos para blogger.
Ahora que he visto esta entrada me preguntaba si tu podrías, hacer un script que mostrara todas las entradas de una etiqueta como con el script "tableindex" pero mezclado con el script "sweet pages" que descubri hace tiempo y que sirve crear lista con paginación.
La idea es que quede una lista de entradas y que por cada 25 items cree una nueva página ,por ejemplo.
Saludos!
Posdata: Por alguna extraña razón mi blog no muestra el número de entradas que le solicito, actualmente lo tengo para que muestre 9 entradas pero hay veces que muestra 3 o 4 o 6, se descontrola cada vez que publico algo nuevo, he revisado la platilla pero no encuentro el error y no creo que sea por lo que publico ya que mis entradas son muy sencillas.Si puedes date una vuelta, tal vez sepas que es lo que le ocurre a mi blog :(
Uchiha Madara:
Tanto como hacerlo, n osé si podría ya que no conozco cuáles son esos scripts pero, la próxima semana habra algo respecto la paginación de entradas por categoría que es lo que utilzo en la sidebar de este blog que "pagina mostrando griupos de cinco.
Gracias JMiur estaré esperando esa entrada :D
Lo añadí en mi blog sin problemas en la pestaña del menú "Contenido" pero noto algo extraño y es que la imagen por defecto para las entradas sin imagen se muestra aún teniendo imagen la entrada ¿alguna sugerencia?
I tried to use the script provided in the post, do not good well...
Then I tried to see the script from the demo, all went is good well.
All my scripts and CSS input via the Add a Gadget HTML/Javascript and well all went is good well.
Is there something wrong with the script on your post?
Love this hack, this is really great... :)
Thanks, maybe i'll repost after practice² ;) :D
Jorge, esto es facinante¡ trate de armar un índice como el que tenías hecho manualmente pero no pude :$ resultó muy dificil y despues de molestarte tanto para que explicaras como hacerlo :0, ahora nos traes este que está muy bueno.
Gracias una vez más aunque solo pueda copiar y pegar ya que cuando de asimilar se trata allí si que me pongo como burro en aguacero :X
Gem@:
Eso es algo que no podemos controlar ya que ese dato (la imagen por defecto) es agregada por Blogegr mismo según su capricho. Si miras el código fuente de las entradas donde se ve esa miniatura, verás que en alguna parte dice:
<link rel="image_src" ..................
que es justamente esa miniatura. Cuando via JSon no se muestra es justamente porque Blogger no ha agregado esa etiqueta y por lo tanto, no aparece en el feed.
Recuerdo que en algún script de Ariane hay algo que permite detectar las etiquetas IMG de una entrada y sería cosa de adaptar eso a estos gadgets para no depender de Blogger. Voy a pensarlo y lo agregaré :D
Beben Koben:
I have checked both codes and I see no difference between them except for the URLs. So it's a mystery
CUENTAGOTAS:
Paciencia, paciencia y más paciencia :D
Excelente me funciona muy bien, pero solo algo, que pasa cuando los titulos de las entradas son muy largos? hay alguna manera de que se muetren mas cortos en estos cuadritos pequeños... algouna manera de que se 'resuman' estos titulos de las entradas que son muy extensos?
http://www.vacilandounrap.com/p/resultados-es-el-rectangulo-del-div.html
saludos espero tu respuesta.
Si, no hay problema; si te fijas, en una línea, el script dice esto:
posttitle = entry.title.$t;
ese es el ítulo del post así que debajo de esa línea, pones esto:
posttitle = posttitle.substring(0,20);
donde, ese número 20 es la longitud máxima de caraceteres, usa el valor que quieras; si eltítulo tiene menos caracteres que ese valor, no pasará nada y se mostrará completo.
Jmiur, no entiendo. me siento tonto.
no entiendo como hay que hacer y molesta mucho porque es muy bueno el truco.
lo que hice fue pegar todo en una pagina estatica, luego de subir el script a dropbox y pegarlo como vos decis.
pero lo unico que aparece es la palabra "cargando..."
qué estoy haciendo mal???
No sé dónde está tu ejemplo para mirarlo.
te dejo la pagina donde lo puse.
espero que me puedas ayudar.
http://epidemia-mella.blogspot.com/p/resultados-es-el-rectangulo-del-div.html
No tienes definida la URL de tu sitio en el script:
// estos son los datos que debemos establecer
var postporpagina = 60; // la cantidad de entradas a mostrar por página
var urlsitio = "http://miblog.blogspot.com"; // la url de nuestro blog
var minpaginas = 5; // la cantidad mínima de páginas a mostrar
var maxpaginas = 10; // la cantidad máxima de páginas a mostrar
var imgxdefecto = "http://xxxxxxxxxxx"; // la dirección de la imagen por defecto a ser utilizada
wow!!!
era tan simple!!
muy bueno, te felicito, me quedó genial!!
Muchas gracias!!
Perfecto :D
Hola...
Utilizé este script y siguiendo tus tutoriales le agregué un resumen del contenido y la fecha más el título completo en el atributo"title"...
mi pregunta es.. ¿cómo debo hacer para que el resumen del contenido no me corte la última palabra?
He aprendido mucho en tu blog... gracias.
EnerDelSur:
Mo sé cuál de todas las funciones para resumir estás utilizando porque, para conseguir eso, justamente, hay que modificar esa parte.
Escribo acá una función a ver si se puede ver correctamente:
function eliminartags(cual,longitud){
var r = cual.split("<");
for(var i=0;i<r.length;i++){
if(r[i].indexOf(">")!=-1){
r[i] = r[i].substring(r[i].indexOf(">")+1,r[i].length);
}
}
r = r.join("");
var sss = "", p;
var r2 = r.split(" ");
for(var i=0;i<r2.length;i++){
p = sss + r2[i] + " "
if(p.length>=longitud) {break;}
sss = p;
}
sss += "…"
return sss
}
No se si posee el mismo nombre
postcontent = eliminartags(entry,40);
Lo que hace eso es, en lugar de contar 40 caracteres, cuenta 40 caracteres espacio y de ese modo, las palabras no se cortan.
Hola he probado el truco y pss.. me ha quedado bien.. jeje gracias por ponerlo hace tiempo buscaba algo asi...
Ahora tengo una duda con eso de las imagenes miniatura... porque solo me muestra las imagenes alojadas en blogger con miniatura... vi cada una de las imagenes en miniatura que mostraba y todas eran de blogger... las demas con la que esta por si no hay...
ahora bien con lo que esta en este post http://vagabundia.blogspot.com/2010/12/json-y-las-etiquetas.html
Ahi si me muestra todas las imagenes alojadas en blogger y no alojadas en blogger...
Imagino que ha de ser por esta parte..
// 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;
se podria poner eso en este Script para que se vean todas..???
Estare pendiente a tu respuesta..
Muchas Gracias.....
Raios no habia visto esta entrada... http://vagabundia.blogspot.com/2011/05/json-detectar-la-primera-imagen-de-cada.html ya lo arregle.. y me funciono de maravilla.. XD
Perfecto, Meme007 :D
JMiur
¡¡¡¡gracias!!!
Me salió... aunque cambié una línea, se me cortaba el texto a pocos caracteres así que cambié esto:
if(p.length>=longitud) {break;}
por esto:
if(i==longitud) {sss = p+"..."; break;}
también evité que me agregara los puntos suspensivos aunque el título no llegara a la longitud determinada.
Así va...
http://energiadelsur.blogspot.com/p/mural-de-entradas.html
¡¡muchas gracias!!
Sinceramente no entendi nada de lo que explicaste y donde va todo ese codigo :-(
¿Y qué quieres que te conteste?
Ya está en mi blog, funciona sin problemas; el proceso para instalarlo me ha dado algunos problemas que gracias a su ayuda he ido solventando.
Me alegro que se resolviera :D
hola JMiur donde que cambiar el valor para que cambiar el color que tiene al pasar el mouse,
gracias saludos lerh!!
¿El color de cada rectangulito? El color de fondo lo colocas en:
.paginaposts { ....... }
y el efecto hover sería:
.paginaposts:hover { ....... }
muchas gracias JMiur era en este:
. pagina posts { ....... }
Hola Jmuir cuanto tiempo que no te visito, me pase a wordpress después de meses de usar blogger :).. me gusta este script se podrá usar en wordpress? se que tus tutos son para blogger pero cualquier consejo vale.. saludos!
bueno estuve intentando pero creo que el problema esta en la url del feed :S
Supongo que podría usarse pero n otiene mucho sentido ya que en WP puedes acceder a la base de datos y por lo tanto, paginar es mucho más simple.
También puedes usar algún plugin; hay cientos de ellos.
no entiendo nada este post :s y me gusta como resumista las entradas :s
Hola! no se si seguiras por aqui... pero tengo una pregunta como puedo añadir la fecha y un resumen del contenido en cada entrada? gracias!
Cambiando el script, leyendo esos datos y agregando la salida. Fíjate en esta entrada para entender cómo funciona json y que datos puedes leer.
Hola, Jmiur! Muy bueno, el truco lo hemos implementado en nuestro blog www.lapequenagrecia.com. Muchas gracias!! Saludos!!!
Eres un verdadero Ingeniero de los Códigos!!!
Sócrates Tsokonas
Feliz 2012 para ti y para los tuyos! El truco lo conseguí a través del blog de Gem@.
Gracias, Sócrates. fel año :D
Fantástico blog, y fantástico post, que he utilizado en mi blog.
Dado que aún no tengo muchas entradas en el mismo, me he percatado de un pequeño detalle: en la última página no corresponde bien el texto salvo que el total de post sea múltiplo del número de posts que se muestra en cada página del resumen.
Ello se resuelve muy fácilmente añadiendo una línea de código justo antes de var totales = "Total de entradas publicadas..., que sería la siguiente:
if (finalpagina > cantidadposts) {finalpagina = cantidadposts};
Un pequeño detalle.
Nunca he notado ese detalle así que será cosa de probarlo, Miguel :-D
El resultado se puede ver aquí.
Hola, JMiur. Muchas gracias por la explicación. Agregué todo en una página estática, lo personalicé y quedé muy satisfecho con el resultado (botón "Mosaico" del menú superior). Pero (dicen que siempre hay uno) me gustaría mostrar un resumen o sumario de cada entrada en un tooltip, como se ve en esta otra tabla de contenido:
http://vagabundia.blogspot.com/2007/11/blogger-tabla-de-contenidos.html
Intenté hacerlo solo, comparando los dos códigos, pero no pude. ¿Qué debería agregar en este código de "Resumen de entradas con paginación" para lograr que al pasar el puntero sobre el título y/o la imagen se viera un sumario de, por ejemplo, 250 caracteres?
Gracias de nuevo, y saludos.
Para empezar, deberías leer ese texto en al función showpageposts(json):
if ("content" in entry) {
var texto = entry.content.$t;
} else if ("summary" in entry) {
var texto = entry.summary.$t;
}
y usar alguna función para eliminar las etiquetas y cortar ese texto, busca alguna en las otras entradas que hablan de json:
texto = eliminartags(var texto,250);
por último, debería crear el HTML del tooltip que no se cuál es, modificando la variable salida
Todo esto, dicho muy en el aire, claro.
Tema resuelto, JMiur.
Ya había intentado por el camino que me indicaste y lo volví a hacer, pero sin éxito. Entonces, con las pistas "muy en el aire" (pero no tan alto como para no servirle a mi vuelo rasante), retomé la comparación con el código del Blog Toc que te mencioné en el comentario anterior y pude resolverlo.
Gracias otra vez por la respuesta rápida y tu tiempo.
La solución que te mencioné en el comentario anterior funcionó... para la primera página solamente. En las siguientes se repetían los tooltips de la primera (¿hablabas de magia negra?). En lugar de averiguar por qué, retomé las indicaciones de tu respuesta #55 y ahora sí lo solucioné. Por si le puede servir a alguien, lo comparto acá.
Primero, al comienzo del script, puse la función de eliminar etiquetas que das en esta entrada, combinada con la que das en el comentario #31 (para que no se corte la palabra de un tooltip si su caracter número 250 --en mi caso-- no es un espacio en blanco). Este es el código resultante:
function eliminattags(cual,longitud){
var resumen = cual.split("<");
for(var i=0;i")!=-1){
resumen[i] = resumen[i].substring(resumen[i].indexOf(">")+1,resumen[i].length);
}
}
resumen = resumen.join("");
var sss = "", p;
var resumen2 = resumen.split(" ");
for(var i=0;i=longitud) {break;}
sss = p;
}
sss += "..."
return sss
}
Segundo, en los datos a establecer (o sea, cantidad de caracteres del sumario) agregué esta línea debajo de "var imgxdefecto" (que define la imagen a usar en caso de que la entrada no tenga una):
var lenresumen = 250;
Tercero, ya dentro de la función "showpageposts(json)", debajo del código que lee la URL de la entrada agregué el que lee su contenido extractado (mismo código de tu otra entrada mencionada):
postcontent = "";
if ("content" in entry) {
postcontent = entry.content.$t;
} else if ("summary" in entry) {
postcontent = entry.summary.$t;
}
postcontent = eliminattags(postcontent,lenresumen);
Cuarto y último paso, modifiqué la salida del título (etiqueta h6; no lo hice con la de la imagen, que está arriba, pero el agregado sería el mismo) para que ese extracto de 250 caracteres se muestre en un tooltip. Para que el editor de comentarios no me siga rechazando el html, lo describo: dentro del link ("a href=") de la etiqueta h6, hay que agregar después de '" + posturl + "' esto:
title='" + postcontent + "'
Ojalá le sea útil a alguien más, y gracias de nuevo por tu laburo. Lo mío sólo fue maña bruta :D
Hola! instale este código modificandolo un poco, el resultado fantástico, lo único que me gustaría quitar es el espacio en blanco que queda encima ¿Se puede hacer? aquí un ejemplo http://elsecretodeltriunfo.blogspot.com/p/ninal.html
El espacio en blanco es porque hay dos saltos de línea <br/> creados por el mismo editor de entradas. Somplemente, no dejes líneas en blanco en las etiquetas script y style o agregalas todas en una sola línea.
Interesante JMiur. Lo encontre gracias al blog de Gem@ y voy a probarlo a ver quetal
Hecho! Este script no se lleva muy bien con el menu tipo doc que tengo en el footer, pero me ha venido muy bien.
una pregunta, que veo que tenga dificil respuesta. Estoy creando una agenda de conciertos, que dentro de una pagina estatica ocupa mucho espacio, es posible crear una pagincaion sin tener que crear varias paginas diferentes????
No sé cuál es exactamente tu idea pero puedes usar algún tipo de script que mantenga oculto cierto contenido y se despliegue o algún tipo de acordeón. Sea como sea, el contenido estará todo en la misma página por lo que el tiempo de carga será el mismo y sólo será afectado el aspecto visual.
Gracias por la respuesta Jmiiur, pero no son validos... La idea que quiero es algo tipo esto:
http://www.musikazuzenean.com/agenda
En ese sitio, lo que ocurre es que el calendario var cargando distintas páginas web ya definidas, usando un plugin de jQuery llamado datepicker o algo similar:
http://jqueryui.com/demos/datepicker/
Fíjate que la URL cambia en función de la fecha:
http://www.musikazuzenean.com/agenda/eguna/data/2012-02-07
http://www.musikazuzenean.com/agenda/eguna/data/2012-02-12
No hay una paginación sino enlaces a páginas varias cuyas URL, seguramente se arman de modo sistemático: AÑO-MES-DIA.
Entonces, la unica manera de realizarlo, o me creo una paginacion casera o me creoo un blog aparte pare la agenda?
Supongo que este lugar llevara el mismo sistema no?
http://www.laganzua.net/conciertos/agendaconciertos.php?pagina=2&comunidad=Euskadi
gracias por tu ayuda
Parecido. Fíjate en la URL. Cambia con las distintas opciones:
http://www.laganzua.net/conciertos/agendaconciertos.php
http://www.laganzua.net/conciertos/agendaconciertos.php?orden=grupos
http://www.laganzua.net/conciertos/agendaconciertos.php?pagina=21
Hola JMiur necesito algunos trucos para mi blog.
quiero saber si hay algun código que muestre las entradas de los post como en el siguiente enlace. http://www.laps3.com/ sólo quiero el titulo, la imágen y un pequeño resumen, he visto entradas estilo magazine pero no se como puedo hacer para conseguir lo que busco, me puedes ayudar y también entradas relacionadas, las que se ponen al final de cada post, pero que sólo muestre enlace nada de imágenes. gracias espero respuesta.
Es exactamente lo que dices, un resumen de las entradas como cualuqiera que hays visto en los estilos magazine al que luego, deberías personalizar si es que quieres que la forma de mostrarse sea de un tip odeterminado.
Lo básico es esto
Una pregunta Jmiur, como podria hacer para agregarle un buscador a la lista?
No sé. No tengo idea.
Recién me han avisado que no funcionaba este sistema en mi blog, lo que hice fue verificar si la url del script seguía funcionando como así era y a partir de ahí empezó a funcionar de nuevo pero ahora vuelve a fallar el invento y veo que aquí también ocurre.
Me da que todo esto está relacionado con los últimos cambios ¿no crees?
No veo problemas con mi ejemplo pero, efectivamente, no veo el tuyo.
El navegador me dice que hay un error en el script. Puede ser un problema en Google Sites porque tampoco veo que funcione iBox en tu blog y ambos scripts están en el mismo servidor ¿Será un problema de permisos?
No, no es problema de estar accesible el archivo y encima ahora funciona es para volverse locos, gracias por mirarlo :)
Tal vez. sólo se tomó vacaciones de fin de semana :-)
¿Quiere dejar un comentario?
recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...
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 ...