Como pista, cuando queramos hacer un OR (esto o aquello), normalmente servirá con hacer dos condiciones sucesivas una para cada cosa, siempre que no se solapen en tipo de páginas. Esto ocurre por ejemplo con las Index y el Home, que tienen en común precisamente esta última. Por el contrario, cuando queramos simular un AND (esto y aquello), por lo general tendremos que meter condiciones una dentro de otra, de manera que si se cumple una y la anidada, se darán por cumplidas ambas.
Situación en la que algo se podrá ver en algo sólo en páginas de navegación y de archivo, pero no en la de Inicio.
Index y Archive son excluyentes por lo que tenemos que hacer dos comprobaciones seguidas.
- Primero vemos si la página es del tipo Archive y en caso afirmativo, ejecutamos por ahí. En la siguiente condición no se llegará a entrar porque Archive != Index.
- Por el contrario, si no es Archive entraremos en la segunda condición y si es tipo Index se hace una tercera para verificar que NO estamos en Inicio (Home), que también es del tipo Index. Sólo en ese caso mostramos.
- En todos los demás casos, páginas estáticas o post individuales (Item), tampoco se muestra nada porque no entramos en el cumplimiento de ninguna de las dos condiciones.
<b:if cond='data:blog.pageType == "archive"'>
<!-- Estamos en una página tipo Archive -->
Mostramos por ser página Archive
</b:if>
<b:if cond='data:blog.pageType == "index"'>
<!-- Estamos en una página tipo Index -->
<b:if cond='data:blog.url != data:blog.homepageUrl'>
Mostramos por ser página Index pero no Home
</b:if>
</b:if>
¿Y si queremos que algo se vea precisamente en entradas individuales y páginas estáticas pero no en todas las demás? Pues ya no bastaría con poner el signo del operador contrario, porque el anidamiento de condiciones daría un resultado indeseado. Como ambos tipos no están solapados como ocurría en el tipo Index que incluía Home, más fácil sería en este caso comprobar las dos cosas por separado.
<b:if cond='data:blog.pageType != "static_page"'>
<!-- Estamos en una página estática -->
Mostramos por ser página estática
</b:if>
<b:if cond='data:blog.pageType == "item"'>
<!-- Estamos en una entrada individual -->
Mostramos por ser una entrada
</b:if>
El uso de else que permite anidar condiciones también nos puede ser práctico. Es una segunda oportunidad de seguir comprobando cosas dentro de una misma condicion, cuando no se cumple la primera opción.
Mostrar un contenido en Home y otro distinto en las páginas Index (distintas de Home), Archivo y Estáticas:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
Se ejecuta sólo en Home
<b:else/>
<b:if cond='data:blog.pageType == "index"'>
Se ejecuta sólo en páginas Index (y Estáticas)
</b:if/>
<b:if cond='data:blog.pageType == "static_page"'>
Se ejecuta sólo en páginas Estáticas (e Index)
</b:if/>
</b:if/>
Obsérvese que las páginas individuales (item) no entrarían por ninguna de las condiciones, tal y como nos proponíamos en el enunciado.
Y para terminar, no con todas las combinaciones pero sí con un anidamiento que nos permitirá discriminar todos los casos uno por uno. Ahí va eso:
<b:if cond='data:blog.pageType == "index"'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
Se ejecuta sólo en Home
<b:else/>
Se ejecuta sólo en Etiquetas/Recientes/Antiguas
</b:if>
<b:else/>
<b:if cond='data:blog.pageType == "static_page"'>
Se ejecuta sólo en páginas Estáticas
<b:else/>
<b:if cond='data:blog.pageType == "archive"'>
Se ejecuta sólo en páginas de Archivo
<b:else/>
Se ejecuta sólo en posts individuales
</b:if>
</b:if>
</b:if>














