I establish my Blog with the help of jekyll bootstrap and deploy it on github. Here is my question:
I want to add a sidebar which lists my newest 10 posts. When I use the code below, it lists all my posts:
<ul>
{% for post in site.posts %}
li>{{ post.title }}</li>
{% endfor %}
</ul>
BUT, I only want to list the newest 10 posts(if the num of all posts less than 10, list all),how can I do?
Thank You for your answer!
I don't have the environment to test it, but you might want to try limit keyword, see documentation here. I assume it will show all if limit is not reached.
<ul>
{% for post in site.posts limit:10 %}
<li>{{ post.title }}</li>
{% endfor %}
</ul>
Related
I was thinking of using the following code snippet but it does not return anything...
{% for category in site.categories %}
<li><strong>{{ category.title }}</strong></li>
{% endfor %}
I'm also using Jekyll's original category page generator plugin, but I cannot figure out how to list all the post categories (for a blog page sidebar) that are being used?
Try this:
{% for category in site.categories %}
<li><strong>{{category|first}}</strong></li>
{% endfor %}
Not sure if something has changed, but something bad happened when I used Leon's answer (seemed like the loop never ended and I got an OOM). Here is what did work for me:
{% for category in site.categories %}
{% capture category_name %}{{ category | first }}{% endcapture %}
{{category_name}}
{% endfor %}
Source is the ever-helpful https://blog.webjeda.com/jekyll-categories/
I have a newspaper running on Jekyll. On the home page there’s a bunch of the most recent posts and below them there are posts grouped by various interesting topics. For example:
Current Headlines (site.posts[1..9])
Opinions (site.categories['opinions'])
Culture (site.tags['culture'])
…
Now, when rendering the opinions, I don’t want to repeat the stories that are already listed under Current Headlines. Is there an easy way to express that in Liquid, without any Jekyll plugins?
Loop through all posts with an offset and use an if statement for the category. Offset can be found here: https://help.shopify.com/themes/liquid/tags/iteration-tags
{% for post in site.posts offset:9 %}
{% if post.categories contains 'mycat' %}
{{ post.title }}
{% endif %}
{% endfor %}
I'm iterating over all the posts in my site like so
{% for post in site.posts %}
// code
{% endfor %}
I want to access some variable that I have stored at the page level. How can access it? I wasn't able to find anything after googling for awhile. I want to do something like
{% for post in site.posts %}
post.page.special_var
{% endfor %}
Jekyll support both post and page, so it is depend on you, which type of variable you want to access.
For example here is your post front matter.
---
layout:post
title: jekyll test
categories: jekyll
---
So in head.html, I am using this.
<title>{% if page.title %}{{ page.title }}{% endif %}</title>
I am using page to access that variable because there are too many pages like about or contact or privacy policy that does not belongs to jekyll post,so there you can't use post for example post.title to access that variable.
Now, look out these codes
{% for post in site.categories.jekyll reversed limit:10 %}
<span><a href="{{ post.url }}">{{ post.title}}<a/></span>
{% endfor %}
Here you note that, I am using loop, because I want to access same variable from multiple post, and that variable was jekyll .
Here I am using post.title but you can even use page.title, because it is globally accessible.
For fun :
I am using reversed, so you can order your post in which date you are created, older post will show at first.
I am using limit:10 because, I want to show only 10 post per page.
If you have a special_var variable defined in a post front matter you can get it like this :
{% for post in site.posts %}
<p>This is my var {{ post.special_var }}.</p>
{% endfor %}
See Jekyll documentation here.
I've got the following page:
---
layout: default
status: publish
published: true
title: Categories
author:
display_name: lucas
---
{% for category in site.categories %}
<li><a name="{{ category | first }}">{{ category | first }}</a>
<ul>
{% for posts in category %}
{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}
{% endfor %}
</ul>
</li>
{% endfor %}
Instead of listing the hrefs per categery, it somehow gets code highlighting:
Can anyone help me out preventing the code getting highlighted? Thanks!
As mentioned by #David Jacquel, .md files are automatically parsed as markdown, in which four space indentations are treated as preformatted code.
I followed his suggestion on my website: change all files to .html. This disabled Markdown parsing in the file. However, if you are unwilling to write in pure HTML and would still like to use Markdown, there is a workaround.
For each element that you would like Markdown to ignore, give it the attribute markdown="0".
For each element that you would like Markdown to parse, give it the attribute markdown="1".
In your case, the following is a possible implementation.
...
<div markdown="0">
{% for category in site.categories %}
<li><a name="{{ category | first }}">{{ category | first }}</a>
<ul>
{% for posts in category %}
{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}
{% endfor %}
</ul>
</li>
{% endfor %}
</div>
Is it a .md file ? If yes, try to change for an .html extension.
In markdown four space indentation is used to print code tag.
I can't find a solution. I have three categories: tuts, news, code.
The newest post is categorized in tuts. But I want to show the last and newest post in news. I tried the following, but obviously it doesn't show anything, because if I limit the loop to the first item, which is the tuts item, the loop stops.
{% for post in site.posts limit:1 %}
{% if post.categories contains 'news' %}
NEWS</strong> › {{ post.title }}
{% endif %}
{% endfor %}
How do I show the first posting from a special category? Can I loop directly through a chosen category like this? If yes, what is the correct syntax?
{% for post in site.posts.categories.news limit:1 %}
NEWS</strong> › {{ post.title }}
{% endfor %}
Yes, it's possible to directly loop all posts for a certain category or tag.
It's just:
{% for post in site.categories['news'] limit:1 %}
{{ post.title }}
{% endfor %}
It's the same for tags, you just have to replace site.categories['news'] by site.tags['news'].