En Blogger, hay una forma bastante sencilla de colocar condiciones de tal manera que el blog se muestre diferente en función del tipo de página donde nos encontramos. Básicamente, lo que podemos detectar es si estamos en una página de entradas individuales o no; para eso, hay un dato interno que lo indica:
data:blog.pageType = "e;item"e;
Si esto es así, entonces, también sería sencillo hacer que ciertos elementos de la sidebar se muestren o se oculten según sea el tipo de página.
Todos los elementos que agregamos tiene la misma estructura; por ejemplo, si agregáramos un elemento HTML con el título MI ELEMENTO; podría verse esto:
<b:widget id='HTML7' locked='false' title='MI ELEMENTO' type='HTML'>
<b:includable id='main'>
[ ... el código interno ... ]
</b:includable>
</b:widget>
Blogger no nos deja colocar código antes de b:widget así que colocaremos la condición adentro:
<b:widget id='HTML7' locked='false' title='MI ELEMENTO' type='HTML'>
<b:includable id='main'>
<b:if cond='data:blog.pageType == "e;item"e;'>
[ ... el código interno ... ]
<b:else/>
<style>#HTML7 {display: none;}</style>
</b:if>
</b:includable>
</b:widget>
La condición inversa sería no mostrar el elemento en las páginas individuales; para eso, lo más fácil es usar:
<b:if cond='data:blog.pageType != "e;item"e;'>
<b:if cond='data:blog.pageType != "e;item"e;'>
<div id='sidebar-wrapper'>
<b:section class='sidebar' id='sidebar' preferred='yes'>
[ ... el código de los diferentes elementos de la sidebar de la página principal ... ]
</b:section>
</div>
<b:else/>
<div id='sidebar-wrapper-2'>
<b:section class='sidebar' id='sidebar-2' preferred='yes'>
[ ... el código de los diferentes elementos de la sidebar para entradas individuales ... ]
</b:section>
</div>
</b:if>
47 comentarios:
Muy buena la entrada, la verdad... muy bueno tu blog... trato de aprender de él, a ver si mejoro el mio. Si podés, pasá quiero tener una opinion de alguien que sabe del tema, un saludo grande.
Ahora ya me lo sé de memoria, pero hasta hace un tiempo entraba acá a ver como era el código que tenía que poner y dónde :D
Hola JMiur me encanto tu blog hoy que entre, me encantaria que me pudieras ayudar en esta pagina http://www.veocine.es ponen los videos incrustados desde su pagina web y se me hizo muy interesante.
Espero que tengas un excelente dia y me pudieras ayudar =)
De nuevo yo, disculpa jeje mira para ser mas exacto es esta la url http://www.veocine.es/60154/pelicula/cuatro_vidas aunque me gustaria hacerlo un poquito mas pegado al video asi no se tendrian que salir de mi pag y hacerlo grande ahi mismo
¿esta padre la idea no?
Pegaso:
Én ese sitio no hay videos incrustados; lo que se ve es un IFRAME de Megauploads.
Muchas Gracias JMiur y creeme que cualquiera se molestaria, pero bueno no hablare mas del tema ya que seria agrandar mas el problema
Agradezco tus atenciones y el tener un blog asi =)
No sé a que problema te refieres o si la página que quieres ver es otra. En este sitio:
http://www.veocine.es/60154/pelicula/cuatro_vidas
No hay videos incrustados. Sólo un IFRAME que dice:
<iframe id="veocine" class="veocine" frameborder="0" scrolling="no" src="http://www.megavideo.com/?v=24KYXSWG">
Es sumple de comprobar. Mira el código funte y busca etiquetas EMBED u OBJECT y verás que no hay ninguna. Así que deberías aclarme un poco que es lo que quieres hacer o que es lo que te ha llamado la atención.
Hola JMiur me resulto perfecto el post que encontre en Vagabundia del IFRAME.
Al problema al que me referia es a el chavo este desconocido que entro reclamando injustamente del post y pues yo tambien me hubiera molestado por su forma de reclamar.
Que bueno que lo borraste.
Una disculpa por el malentendido y me encanta tu blog.
No hay problema, no te preocupes. Es que ese tipo de páginas pueden cambiar dinámicamente y tal vez, yo veia una diferente a la que tu veías o mi navegador bloqueaba alguna parte; por eso preguntaba qué parte exactamente era la que te interesaba.
Como tú dices que todo es posible... (jajaja también para los novatos como yo?)lo intentaré esta noche y te cuento.
Gracias, besazo.
Oh sí, Maite, seguro que sí. Sólo se necesita paciencia y más paciencia :)
Hola,
seguí las instrucciones y tuve algún problema, conseguí sacar de la pagina del post partes de la sidebar pero en la página principal no veo los titulos....
por otro lado, será posible esconder todos menos uno de los elementos de la sidebar, sin tener que hacerlo uno por uno?
agradecería tu ayuda!!! gustavo - gh@lenoardofinotti.com
Si no ves los títulos, es posible que hayas eliminado el código, por lo general, dice esto:
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
Esconder todos menos uno; dependería de que escondas, si son identificados como IDs no, pero, podrías colocar la condicion de ocultos en el head:
<b:if cond='data:blog.pageType == "item"'>
<style>
#HTML1, #HTML3, #Label1 #HTML7 {display: none;}
</style>
</b:if>
Es una respuesta un poco ambigua porque todo dependerá de la plantilla o de la forma de aplicar estas cosas.
Hola, ha funcionado el segundo, y ha sido muy facil
Podes verlo en http://leonardofinotti.blogspot.com
Gracias, y acepto otras sugerencias!!!
Perfecto, gh :D
hola
vengo con otra pregunta, será posible hacer esto mismo para el footer en vez de la sidebar
pensaba usar el footer como página de inicio, una imágen, y luego sacarlo en las entradas, trabajando solo con etiquetas y sin posts a la vista
gracias como siempre, tu blog es importante!
gh
Sí. Puede hacerse con cualquier DIV o sección del blog. Busca el ID que lo identifica y listo. Por defecto sería footer-wrapper.
estimado
sigo con esto de esconder el footer
no entendí bien, el div footer-wrapper, es ahi donde debo poner el codigo o debo modificar el código para que actúe ahi?
disculpá la burrada
abrazo
gh
No sé exactamente tu idea pero, si quieres que el footer se expanda y contraiga, debes ocultarlo y colocar en alguna parte algún enlace que ejecute el script.
Jmiur!! hoy te mandé un correo preguntandote por alguna de estas cosas porque yo siempre lo hacia mal!! y ahora encuentro más entradas tuyas sobre condicionales :)
Ya he conseguido del todo ocultar el estilo de mis gadgets en la "portada" de nuestra página... y hacerlos diferentes para las páginas individuales :)
Ahora solo me falta la idea de poner sidebars diferentes dependiendo de la sección a la que entren desde esas secciones que hay en la página principal :)
Si tienes alguna idea de como podría hacerlo, te dejo la dire para que veas como está organizado y lo que quisiera:
http://pruebasdeuve-miradas6.blogspot.com
Ló unico que se me ocurre es detectar la URL de la página o su título. para eso, hay dos datos:
<data:blog.pageName/>
y
<data:blog.pageTitle/>
Habría que probar pero, creo que si las secciones on etiquetas, data:blog.pageName contienen el nombre de la etiqueta.
Sólo es una idea genérica, no lo he intentado.
Gracias Jmiur por contestar tan rápido :)
probaré y te cuento como lo llevo, jejeje ¡tardé mucho en ver como ocultar totalmente algo!
aunque he visto que podría hacer que algo (como una sección) se mostrara de manera diferente según la página que se abriera, he querido prevenir por si en algún momento algo fallaba, y ya que cada sección es un widget con su sidebar y estilos propios, lo que he hecho es crear mas sidebars para que se muestren en las demás páginas...
A ver si esto me sale :)
Saludos!
Por ahora todos los intentos han sido malos...
no se como hacer para que solo aparezca ese gadgets donde hay una entrada con X etiqueta, como hago con las últimas entradas publicadas de esa sección al decirle qué entradas son las que quiero que me muestre :(
Otra pregunta que quería hacerte, era...
en la sección de "blogger feliz" he utilizado los minipost... he creado una entrada con ese texto, y luego le he dado con css ese estilo para que aparezca así en mi sección. ¿Es posible poner un enlace?? por ejemplo en el actual que hay ahora... donde dice "mistico" que enlace a su blog...
Saludos :)
Uve:
Eso de detectar la etqiueta es muy complejo. La unica forma de hacerlo es con alguna clase de script dentro del blucle de cada post.
Lo de los miniposts no lo comprendí. Explícame un poco más.
Muy buen artículo, utilizo esos elementos condicionales para no alargar la carga en cada post individual.
Una pregunta, hace poco sin yo tocar nada a veces le da por cargarse y a veces no mi "recent comments" y mi "recent post", tiene ambas "display: block" en las propiedades.
A qué se puede deber que según tengan el día se muestren o no?
Muchas gracias JMiur
Con display: block le dices al navegador que ese elemento se muestre (es el valor por defecto). Eventualmente, puede ocurrir ue eso que quiere mostrarse sea inaccesible, ya sea un script, un feed o una imagen. Ahí ya el tema es otro y el código agregado no influye.
Si esto pasa seguido habría que verificar esos elementos porque no es normal, puede ocurrir pero no habitualmente.
Ya por eso lo puse como para que saliese de todas, todas pero el caso es que al principio no pasaba es desde hace un tiempo y yo no he modificado nada para que no salga.
Ya te digo son los "Recent Comments" y "Recent Post", no es algo raro es algo que viene predefinido y funcionada correctamente.
Compararé la plantilla original y la mia para ver las diferencias (ya que la original supongo que no tendrá éstos problemas) y a ver cuales son las diferencias.
Si se te ocurriese algo te agradecería que me lo dijeses te lo agradeceré.
Un saludo.
Onetwothree:
En este momento, se ve un mensaje de error en el código fuente. Dice:
The resource from this URL is not text: http://money4jacky.googlepages.com/blogger-widget.js
Y entonces, ese script no se ejecuta. No sé si eso tendrá influencia ya que no sé que hace ese script.
No encuentro esta etiqueta en mi código data:blog.pageType = "item" habrá alguna equivalente, gracias.
Seguramente está en alguna parte. Busca: data:blog.pageType == "e;item"e;
De todas formas, no improta si está o no está, los códigos condicionales se agregan donde se quieran utilizar.
Hola JMiur, antes que nada quiero felicitarte por tu blog, es genial, uno puede aprender mucho aunque en mi caso particular, soy totalmente novato en esto, y no entendí mucho sobre este tutorial... En ninguna parte de mi plantilla encontré este código interno que tu citas
data:blog.pageType = "e;item"e
lo más similar fue data:blog.pageTitle y además los elementos de mi sidebar tienen la siguiente estructura
similar pero no igual a la que tu mencionas que es la siguiente
[ ... el código interno ... ]
Si me puedes ayudar te lo agradecería, mi blog es www.rallyderanchos.blogspot.com
No se ve el código de lo que has escrito.
data:blog.pageType = "e;item"e
seguramente está porque sino, no podrían verse los comentarios en las páginas individuales, de todos modos, eso no importa ya que es una condición que se agrega indiscriminadamente.
Si el código (es eque no se ve) varía, es normal, no es problema siempre que logres identificar de que se trata. No sé, excatamente qué quieres hacer. Explícame un poco más.
Hola JMiur gracias por responder tan rapidamente, no sé si pasaste por mi blog, pero lo que quiero hacer es que algunos elementos de mi sidebar, aparezcan en la portada o pagina principal, y otros que aparezcan en las otras pestañas... Espero haberme explicado, y te pido disculpas por mi ignorancia.
En el comentario anterior lo que no se ve es lo siguiente: te decía que los elementos de mi sidebar tienen una estructura similar a la que vos describiste pero no igual ... en mi plantilla los elementos tienen la siguiente estructura
asi los describiste vos
[ ... el código interno ... ]
de nuevo gracias...
P.D.: a que llamas codigo interno??
No puede agregarse código directamente en un comentario.
Todos los elementos agregados son similares y para condicionarlos, hay que colocar ese IF rodeando el contenido:
<b:if cond='data:blog.pageType == "item"'>
........... esto no se verás ...........
</b:if>
Así que, en general sería algo asi:
<b:widget id='XXXXXXX' locked='false' title='XXXXXXX' type='HTML'>
<b:includable id='main'>
<b:if cond='data:blog.pageType == "item"'>
....... ....... ....... .......
....... aqui puede ser que haya cualquier otro código que es el que se va a ocultar .........
....... ....... ....... .......
</b:if>
</b:includable>
</b:widget>
Ahí, XXXXXXX indica cualquier dato que haya, son el tipo y nombre del elemento. Eso de ... el código interno, es, justamente l oque se va a ocultar y da lo mismo que se acualquier cosa salvo en algún elelemento especial como Archivos; en el resto, es indiferente.
Hola Jmiur! Estoy armando un blog y tengo un problema. Con las indicaciones de este post logré esconder la sidebar en el "home" pero el main queda del tamaño que está en todas las entradas, claro, y me gustaría que quede del ancho total. Es decir, que en el home pueda poner el main de otro tamaño.
Por ejemplo, este es el home: http://bmeni-web.blogspot.com/
Y así se ve una entrada común: http://bmeni-web.blogspot.com/2010/05/cortadoras-de-cesped-electricas-sin.html
Espero puedas ayudarme, saludos!
Filigrana.
No sé cuál es el resultado final que quieres obtener pero, así como ocultas la sidebar, condicionándola, lo mismo puedes hacer con el CSS; en este caso, poniendo algo así antes de </head>
<b:if cond='data:blog.pageType != "e;item"e;'>
<style>
#main-wrapper { width:950px; }
</style>
</b:if>
En ese ejemplo, cambias el ancho del DIV main para que ocupe también el espacio de la sidebar oculta. Puedes poner cualquier valor o agregarle o cambairle propiedades que sólo serán efectivas en las páginas que no sean entradas.
Gracias Jmiur! Pero pruebo y al poner vista previa me pone un error bX-r68sfo (lo sentimos pero no hemos podido llevar a cabo su petición) y si pongo guardar cambios me pone "TEMPLATE ERROR: LHS of numeric is null before 26 in data:blog.pageType != item" ...que puede ser?
Lo que yo quiero lograr es que al entrar al blog no haya sidebar y el main ocupe todo el ancho, y que solo cuando se entre a las entradas individuales aparezcan.
Gracias por tu ayuda!
Estaba mal escrito. Intento otra vez:
<b:if cond='data:blog.pageType != "item"'>
espero que ahora salga bien :
Si si si perfecto! Millones y millones de gracias Jmiur, era lo que me faltaba resolver para terminar el blog. Gracias! :D
Saludos.
Filigrana.
Genial, lamento el error anterior :D
Hola Jmiur tengo un problema he querido hacer esto que tu explicas y no logro hacerlo, te cuento que quiero que el gadget que explicas en esta entrada:
http://vagabundia.blogspot.com/2010/07/ultimas-entradas-con-miniaturas.html
Solo se muestre en la pagina principal y en las demas no se muestre este gadget...
Me podrias ayudar para lograrlo???
Saludos!!!
No sé qué estás haciendo o cúal es el código que utilizas. Así , en general sería:
<b:includable id='main'>
<b:if cond='data:blog.homepageUrl == data:blog.url'>
... el código que haya ...
</b:if>
</b:includable>
gracias!!! estaba poniendo unas letras mal jeje
Saludos!!
Holaaaaaa!!! es viejita la entrada pero me sirvió un montñon!!! Gracias.
Jmiur, quiero recuperar este tema.... ¿Habría alguna forma de sacar un tipo determinado de entradas y situarlas en la sidebar?
Por ejemplo, yo tengo un tipo de entradas diferentes condicionadas a una etiqueta concreta, "noticias". Me preguntaba si podría ponerlas en la barra lateral, y que esta actuara como una especie de segundo "main" con los gadgets al principio, y a continuación las entradas de noticias.
Es dificil de explicar pero....
-Main- Sidebar
Entradas Entradas
tipo 1 tipo2
Mas o menos esa era la idea que tenia, cuando pense en poner noticias.
Colocar otro elemento Blog no ya que eso no permite controlar las etiquetas. Debes usar Json y leer los feeds.
Ganaste, felicitaciones!! muy profundo tu conocimiento de Blogger, muchas gracias por compartir
¿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 ...