rainlab / blog-plugin
October CMS的博客插件
Requires
- php: >=7.0
- composer/installers: ~1.0
README
October CMS的一个简单、可扩展的博客平台。
编辑帖子
该插件使用Markdown标记语言来标记帖子。您可以使用任何Markdown语法以及一些特殊标签来嵌入图像和视频(需要RainLab Blog Video插件)。要嵌入图像,请使用图像占位符
![1](image)
第一部分中的数字是占位符索引。如果您在一个帖子中使用多个图像,您应该为每个图像使用一个唯一的索引
![1](image)
![2](image)
您也可以通过使用markdown extra语法给图像添加类或ID
![1](image){#id .class}
摘要与“阅读更多”
通过从菜单中选择博客 > 帖子来管理帖子。每个帖子都可以通过在管理选项卡中的此字段输入一些文本来包含摘要。此内容使用博客帖子的summary
属性在页面上显示。
{{ post.summary|raw }}
或者,此字段可以留空,摘要可以从主要内容(编辑选项卡)中捕获。使用特殊标签<!-- more -->
指定摘要,所有此标签之上的内容都将被视为摘要。例如
This is a great introduction to a great blog post. This text is included as part of the excerpt / summary.
<!-- more -->
Let's dive in to more detail about why this post is so great. This text will not be included in the summary.
最后,如果没有指定摘要且未使用“更多”标签,博客帖子将捕获内容的前600个字符并使用此内容作为摘要。
实现前端页面
该插件提供了一些组件来构建帖子列表页面(存档)、分类页面、帖子详情页面以及侧边栏的分类列表。
帖子列表页面
使用blogPosts
组件在页面上显示最新的博客帖子列表。该组件具有以下属性
- pageNumber - 此值用于确定用户所在的页面,它应该是默认标记的路由参数。默认值是{{ :page }},用于从路由参数
:page
获取值。 - categoryFilter - 用于过滤帖子的分类别名。如果为空,则显示所有帖子。
- postsPerPage - 每页显示的帖子数量(自动支持分页)。默认值是10。
- noPostsMessage - 空帖子列表中显示的消息。
- sortOrder - 用于帖子排序顺序的列名和方向。默认值是published_at desc。
- categoryPage - 分类页面的路径。默认值是blog/category - 它与主题目录中的pages/blog/category.htm文件匹配。此属性用于默认组件部分,用于创建博客分类的链接。
- postPage - 帖子详情页面的路径。默认值是blog/post - 它与主题目录中的pages/blog/post.htm文件匹配。此属性用于默认组件部分,用于创建博客帖子的链接。
- exceptPost - 通过其别名或唯一ID忽略单个帖子。被忽略的帖子将不会包含在列表中,这对于显示其他/相关帖子很有用。
- exceptCategories - 忽略由逗号分隔的别名列表中的帖子,这些别名是唯一的。被忽略的帖子将不会包含在列表中。
blogPosts组件将以下变量注入到使用它的页面中
- posts - 从数据库加载的博客文章列表。
- postPage - 包含
postPage
组件属性的值。 - category - 从数据库加载的博客分类对象。如果找不到分类,变量值是 null。
- categoryPage - 包含
categoryPage
组件属性的值。 - noPostsMessage - 包含
noPostsMessage
组件属性的值。
该组件支持分页并从 :page
URL 参数中读取当前页码索引。以下示例显示了在博客主页上基本组件的使用
title = "Blog"
url = "/blog/:page?"
[blogPosts]
postsPerPage = "5"
==
{% component 'blogPosts' %}
以下示例显示了带有分类过滤器的基本组件使用
title = "Blog Category"
url = "/blog/category/:slug/:page?"
[blogPosts]
categoryFilter = "{{ :slug }}"
==
function onEnd()
{
// Optional - set the page title to the category name
if ($this->category)
$this->page->title = $this->category->name;
}
==
{% if not category %}
<h2>Category not found</h2>
{% else %}
<h2>{{ category.name }}</h2>
{% component 'blogPosts' %}
{% endif %}
文章列表和分页是在默认组件部分 plugins/rainlab/blog/components/posts/default.htm
中编写的。如果默认标记不适合您的网站,您可以自由地将其从默认部分复制,并将上述示例中的 {% component %}
调用替换为部分内容。
文章页面
使用 blogPost
组件在页面上显示一篇博客文章。该组件具有以下属性
- slug - 用于通过其 slug 查找文章的值。默认值是 {{ :slug }},以从路由参数
:slug
获取值。 - categoryPage - 分类页面的路径。默认值是blog/category - 它与主题目录中的pages/blog/category.htm文件匹配。此属性用于默认组件部分,用于创建博客分类的链接。
组件将其以下变量注入到使用它的页面中
- post - 从数据库加载的博客文章对象。如果找不到文章,变量值是 null。
以下示例显示了在博客页面上基本组件的使用
title = "Blog Post"
url = "/blog/post/:slug"
[blogPost]
==
<?php
function onEnd()
{
// Optional - set the page title to the post title
if ($this->post)
$this->page->title = $this->post->title;
}
?>
==
{% if post %}
<h2>{{ post.title }}</h2>
{% component 'blogPost' %}
{% else %}
<h2>Post not found</h2>
{% endif %}
文章详细信息是在默认组件部分 plugins/rainlab/blog/components/post/default.htm
中编写的。
分类列表
使用 blogCategories
组件显示带有链接的博客文章分类列表。该组件具有以下属性
- slug - 用于通过其 slug 查找当前分类的值。默认值是 {{ :slug }},以从路由参数
:slug
获取值。 - displayEmpty - 确定是否显示空分类。默认值是 false。
- categoryPage - 分类页面的路径。默认值是blog/category - 它与主题目录中的pages/blog/category.htm文件匹配。此属性用于默认组件部分,用于创建博客分类的链接。
组件将其以下变量注入到使用它的页面中
- categoryPage - 包含
categoryPage
组件属性的值。 - categories - 从数据库加载的博客分类列表。
- currentCategorySlug - 当前分类的 slug。此属性用于在分类列表中标记当前分类。
该组件可以在任何页面上使用。以下示例显示了在博客主页上基本组件的使用
title = "Blog"
url = "/blog/:page?"
[blogCategories]
==
...
<div class="sidebar">
{% component 'blogCategories' %}
</div>
...
分类列表是在默认组件部分 plugins/rainlab/blog/components/categories/default.htm
中编写的。
RSS 订阅源
使用 blogRssFeed
组件显示包含最新博客文章的 RSS 订阅源。支持以下属性
- categoryFilter - 用于过滤帖子的分类别名。如果为空,则显示所有帖子。
- postsPerPage - 在订阅源中显示的文章数量。默认值是 10。
- blogPage - 主博客页面的路径。默认值是 blog - 它与主题目录中的 pages/blog.htm 文件匹配。此属性用于在 RSS 订阅源中创建指向主博客页面的链接。
- postPage - 文章详细信息页面的路径。默认值是 blog/post - 它与主题目录中的 pages/blog/post.htm 文件匹配。此属性用于在 RSS 订阅源中创建指向博客文章的链接。
该组件可以在任何页面上使用,它将劫持整个页面周期以以 RSS 格式显示订阅源。以下示例显示了如何使用它
title = "RSS Feed"
url = "/blog/rss.xml"
[blogRssFeed]
blogPage = "blog"
postPage = "blog/post"
==
<!-- This markup will never be displayed -->
配置
要覆盖默认配置,创建 config/rainlab/blog/config.php
。您可以仅返回您想要覆盖的值。
摘要
为每篇文章生成一个摘要属性。
如果您手动输入摘要,则它将被用作摘要。或者,您可以使用summary_separator
(默认为<!-- more -->
)来标记摘要的结束。如果帖子中没有分隔符,文本将在summary_default_length
指定的字符数之后截断(默认为600个字符)。
Markdown指南
October支持标准Markdown语法以及扩展Markdown语法
类和ID
您可以将类和ID添加到图像和其他元素中,如下所示
[link](url){#id .class}
![1](image){#id .class}
# October {#id .class}
代码块
Markdown extra使得使用代码块成为可能。使用代码块时,您不需要在您想标记为代码的区域进行缩进
```
Code goes here
```
您还可以使用~
符号
~~~
Code goes here
~~~
表格
一个简单的表格可以定义如下
First Header | Second Header
------------- | -------------
Content Cell | Content Cell
Content Cell | Content Cell
如果您想的话,也可以添加前导和尾随管道
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
要添加单元格的对齐,您只需在分隔符的开始或末尾添加一个:
| First Header | Second Header |
| :------------ | ------------: |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
要使单元格居中对齐,只需在两侧都添加:
| First Header | Second Header |
| ------------- | :-----------: |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
定义列表
下面是一个简单的定义列表的例子
Laravel
: A popular PHP framework
October
: Awesome CMS built on Laravel
一个术语也可以有多个定义
Laravel
: A popular PHP framework
October
: Awesome CMS built on Laravel
: Supports markdown extra
您还可以将多个术语与一个定义关联
Laravel
October
: Built using PHP
脚注
使用markdown extra,您可以使用引用样式脚注
This is some text with a footnote.[^1]
[^1]: And this is the footnote.
缩写
使用markdown extra,您可以在您的标记中添加缩写。首先创建一个定义列表来使用此功能
*[HTML]: Hyper Text Markup Language
*[PHP]: Hypertext Preprocessor
现在markdown extra将转换所有出现的HTML
和PHP
,如下所示
<abbr title="Hyper Text Markup Language">HTML</abbr>
<abbr title="Hypertext Preprocessor">PHP</abbr>