Add slugified_categories URL placeholder (#8094)

Merge pull request 8094
This commit is contained in:
Ashwin Maroli 2020-04-13 13:21:33 +05:30 committed by GitHub
parent 6db506651a
commit 30e7d5ea53
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 0 deletions

View File

@ -258,6 +258,26 @@ Here's the full list of placeholders available:
</p>
</td>
</tr>
<tr>
<td>
<p><code>slugified_categories</code></p>
<small>{% include docs_version_badge.html version="4.1" %}</small>
</td>
<td>
<p>
The specified categories for this post but <em>slugified</em>. If a category is a
composite of multiple words, Jekyll will downcase all alphabets and replace any
non-alphanumeric character with a hyphen. (e.g. <code>"Work 2 Progress"</code>
will be converted into <code>"work-2-progress"</code>)
</p>
<p>
If a post has multiple categories, Jekyll will create a hierarchy
(e.g. <code>/work-2-progress/category2</code>).
Also Jekyll automatically parses out double slashes in the URLs,
so if no categories are present, it will ignore this.
</p>
</td>
</tr>
</tbody>
</table>
</div>

View File

@ -129,6 +129,48 @@ Feature: Post data
And the _site directory should exist
And I should see "Post category: movies" in "_site/movies/2009/03/27/star-wars.html"
Scenario: Use post.categories when category is a composite of multiple words
Given I have a Sci-Fi Movi3s directory
And I have a Sci-Fi Movi3s/_posts directory
And I have a _layouts directory
And I have the following post in "Sci-Fi Movi3s":
| title | date | layout | category | content |
| Star Wars | 2020-04-03 | simple | vintage | Luke, I am your father. |
And I have a "_layouts/simple.html" file with content:
"""
Post categories: {{ page.categories | join: ', ' }}
Post URL: {{ page.url }}
"""
When I run jekyll build
Then I should get a zero exit status
And the _site directory should exist
And I should see "Post categories: Sci-Fi Movi3s, vintage" in "_site/sci-fi movi3s/vintage/2020/04/03/star-wars.html"
And I should see "Post URL: /sci-fi%20movi3s/vintage/2020/04/03/star-wars.html" in "_site/sci-fi movi3s/vintage/2020/04/03/star-wars.html"
Scenario: Use post.slugified_categories to generate URL when category is a composite of multiple words
Given I have a Sci-Fi Movi3s directory
And I have a Sci-Fi Movi3s/_posts directory
And I have a _layouts directory
And I have the following post in "Sci-Fi Movi3s":
| title | date | layout | category | content |
| Star Wars | 2020-04-03 | simple | vintage | Luke, I am your father. |
And I have a "_layouts/simple.html" file with content:
"""
Post categories: {{ page.categories | join: ', ' }}
Post URL: {{ page.url }}
"""
And I have a "_config.yml" file with content:
"""
collections:
posts:
permalink: "/:slugified_categories/:year/:month/:day/:title:output_ext"
"""
When I run jekyll build
Then I should get a zero exit status
And the _site directory should exist
And I should see "Post categories: Sci-Fi Movi3s, vintage" in "_site/sci-fi-movi3s/vintage/2020/04/03/star-wars.html"
And I should see "Post URL: /sci-fi-movi3s/vintage/2020/04/03/star-wars.html" in "_site/sci-fi-movi3s/vintage/2020/04/03/star-wars.html"
Scenario: Use post.tags variable
Given I have a _posts directory
And I have a _layouts directory

View File

@ -35,6 +35,14 @@ module Jekyll
category_set.to_a.join("/")
end
# Similar to output from #categories, but each category will be downcased and
# all non-alphanumeric characters of the category replaced with a hyphen.
def slugified_categories
Array(@obj.data["categories"]).each_with_object(Set.new) do |category, set|
set << Utils.slugify(category.to_s)
end.to_a.join("/")
end
# CCYY
def year
@obj.date.strftime("%Y")