site pages page new files jekyll liquid

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:

  1. Crear un enlace simbólico desde _layouts/post_layouts/main
  2. Cambiar el diseño de las publicaciones para post :

    --- layout: post ---

  3. 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"