单个 Jekyll 网站中的多个博客

问题描述 投票:0回答:6

有没有一种方法可以让一个 Jekyll 网站拥有多个博客?我目前想在一个网站上拥有两个博客。

ruby jekyll
6个回答
30
投票

我是该页面的作者http://www.garron.me/blog/multi-blog-site-jekyll.html

考虑到您需要单独的档案页面以及每个单独博客的最新帖子。只需使用这样的东西:

创建文件 archives-blog-1.html 并填充:

{% for post in site.posts %}
  {% if post.categories contains 'blog1' %}
    <div class="post">
        <h3 class="title"><a href="{{ post.url }}">{{ post.title }}</a></h3>
        <p class="meta">Date: {{ post.date }}</p>
    </div>
  {% endif %}
{% endfor %}

这将为您提供 blog1 中所有帖子的列表,您可以对 blog2 执行相同的操作。该页面可以是您想要的任何地方。

对于最新的帖子,您可以使用相同的代码,但包含在:

{% for post in site.posts limit:5 %}
....
{% endfor %}

这将为您提供最新的 5 篇帖子...我正在使用这个

{% for post in site.posts limit:5 %}

  <div class="post">
    <ul>
      <li><a href="{{ post.url }}">{{ post.title | truncate:200 }} </a><small>{{ post.date }}</small>
         {% if post.summary %}
            <p class="entry">{{ post.summary }}</p>
         {% endif %}
      </li>
    </ul>
  </div>
{% endfor %}

在我的索引页中。 http://www.garron.me/index.html ...在副标题下(来自博客) 我不限制任何类别,因此所有博客的帖子都会出现在那里,您可以使用

{% if post.categories contains 'blog1' %}

进行限制

希望对您有帮助。


15
投票

有一个比迄今为止任何答案都更简单的解决方案。

文件夹结构:


- blog1/
  - _posts/
- blog2/
  - _posts/

然后在 blog1 的 index.html 中,使用

site.categories.blog1
而不是
site.posts

请参阅 https://jekyllrb.com/docs/variables/

中“site.categories”和“page.categories”的文档

1
投票

我使用了两个单独的 Jekyll 安装来运行同一域上的两个博客;如果您的博客将位于单独的根目录中(我的博客位于

/
/photos/
),那么我会推荐这种方法。我还描述了如何合并两个博客的 sitemap.xml 文件


0
投票

您最好的选择是研究数据文件功能。您可以将

.markdown
文件放在
source
中的单独文件夹中,并在发布时链接到它们。这确实意味着,为了发表帖子,您需要编写一个数据文件条目,但您可以托管任意数量的“博客”,每个博客都有自己的文件夹。帖子将自动将其所在的文件夹作为网址。我将这种方法用于我自己的个人博客和作品集。

无论怎样,或者您可能想查看集合:http://jekyllrb.com/docs/collections/


0
投票

添加@ggarron的答案,有一个按类别过滤的简短版本:

{% assign filtered_posts = site.posts | where_exp: "post", "post.categories contains 'blog1'" %}

分配给变量的优点是可以用

site.posts
替换所有
filtered_posts
的使用并保持一致性。例如,我有一个片段来获取列表的第一篇文章:

{% assign first_post = filtered_posts | first %}

这按预期工作。


0
投票

假设我们想要将帖子分成两个博客:

blog1
blog2

所有帖子都可以存储在一个目录中(虽然可以按照@David Röthlisberger的建议将它们放在不同的目录中,但实际上这并不重要)。为了区分哪个帖子应该进入哪个博客,我们在 .md 文件开头与帖子文本一起使用

category
属性。

接下来,我们需要在

blog1.html
目录中创建文件
blog2.html
_layouts
。在每个帖子中,我们需要分别将
site.posts
替换为
site.categories.blog1
site.categories.blog2
(另外,如果需要,您可以替换
site.posts
中的
_layouts/home.html
,以便只在主页上显示必要的帖子,不是全部)。

剩下要做的最后一件事是创建包含以下内容的文件

blog1.md
blog2.md
(以在标题中创建链接):

---
layout: blog1
title: blog1
permalink: /blog1/
---
© www.soinside.com 2019 - 2024. All rights reserved.