pages - jekyll url
Jekyll-¿Cambiar diseño si la página es una publicación? (6)
¿Declarar un diseño de publicación en primer plano no es suficiente? Si su publicación utiliza un diseño de post
, está seguro de que la página es una publicación y no necesita agregar lógica adicional
---
layout: post
---
Por cierto, una forma rápida y sucia (muy sucia) de determinar el tipo de página consiste en verificar la ruta de la página, generalmente las publicaciones están en el directorio _posts
para que pueda verificarlo
{% if page.path contains ''_posts'' %}
This page is a post
{% else %}
This page is a normal page
{% endif %}
En un diseño de Jekyll, ¿hay alguna forma de detectar si la página es una página normal o una publicación? Quiero mostrar títulos de post, pero no títulos de página. Me gusta esto:
{% if page.is_post? %}
<h2>{{ page.title }}</h2>
{% endif %}
{{ content }}
Así es como resolví el problema:
- Crear un enlace simbólico desde
_layouts/post
→_layouts/main
Cambiar el diseño de las publicaciones para
post
:--- layout: post ---
Agregue una sentencia if en
_layouts/main
así:{% if page.layout == ''post'' %} <h2>{{ page.title }}</h2> {% endif %}
Sin embargo, una mejor manera de resolver esto podría ser utilizar los archivos incluidos y tener dos diseños separados, como dijo @dafi.
Desde Jekyll 2.0, puede usar los valores predeterminados de Front Matter :
defaults:
-
scope:
path: "" # empty string for all files
type: posts # limit to posts
values:
is_post: true # automatically set is_post=true for all posts
luego puede usar {{ page.is_post }}
para verificar si la página es de publicación.
No tengo idea de por qué Jekyll no establece page.type
por defecto.
La forma más fácil y sencilla de determinar si es una página o una publicación es usar page.id
{% if page.id %}
This is a post
{% endif %}
Personalmente, uso este método en la página de diseños para determinar si es una página o publicación, por lo que puedo mostrar enlaces a publicaciones anteriores / siguientes solo si es una publicación.
_layouts / default.html
<!DOCTYPE html>
<html lang="en">
{% include head.html %}
<body>
{% include header.html %}
{{ content }}
<!-- If this is a post, show previous/next post links -->
{% if page.id %}
{% if page.previous.url %}
<a href="{{page.previous.url}}">{{page.previous.title}}</a>
{% endif %}
{% if page.next.url %}
<a class="button is-link ellipsis" title="{{page.previous.title}}" href="{{page.next.url}}">{{page.next.title}}</a>
{% endif %}
{% endif %}
{% include footer.html %}
</body>
</html>
Las date
vienen con una variable de date
, mientras que las páginas no.
Aunque no es a prueba de balas, esta solución no requiere configuración adicional:
{% if page.date %}
<h2>{{ page.title }}</h2>
{% endif %}
puede configurar el tipo, en los valores por defecto de _config.yml
para todos los tipos:
defaults:
- scope:
path: ""
type: "pages"
values:
type: "pages"