Blogs 10月CMS(Rainlab博客)-同一类别的下一篇和上一篇文章链接

Blogs 10月CMS(Rainlab博客)-同一类别的下一篇和上一篇文章链接,blogs,octobercms,octobercms-plugins,Blogs,Octobercms,Octobercms Plugins,我有一个博客帖子页面,我在其中使用类别作为url中的硬编码参数 url类似于 url = "/category1/:slug" 我正在这个布局中使用blogPost组件。 我可以使用模板中的以下代码获取nextPost和prevPost链接 {% set nextPost = blogPost.post.nextPost %} {% set prevPost = blogPost.post.previousPost %} 但我想限制nextPost和prevPost与blogPost.pos

我有一个博客帖子页面,我在其中使用类别作为url中的硬编码参数

url类似于

url = "/category1/:slug"
我正在这个布局中使用blogPost组件。 我可以使用模板中的以下代码获取
nextPost
prevPost
链接

{% set nextPost = blogPost.post.nextPost %}
{% set prevPost = blogPost.post.previousPost %}
但我想限制
nextPost
prevPost
blogPost.post
属于同一类别,即
category1

blogPost.post
只属于一个类别

我已经检查了
Post
模型是否有方法
scopeFilterCategories
但我不知道如何使用它,或者它是否有同样的用途

代码

这是配置部分

title = "Category1 post"
url = "/category1/:slug"
layout = "default"
is_hidden = 0
robot_index = "index"
robot_follow = "follow"

[blogPost]
slug = "{{ :slug }}"
categoryPage = "category1"

看来你们不是开箱即用

我已经创建了可以完成这项工作的片段

在您
页面的代码块中
添加此代码段[
下一个上一个
基于
已发布\u在
字段(以表单形式发布)]

nextPost公共功能($post){
//得到当前的猫
$postCats=$post->categories->pull('id')->toArray();
//在这里,你需要通过它,因为我们是
//在URL中硬编码类别段塞,因此我们没有类别数据
//如果你不想猫从邮局来
//您可以将它们硬编码为$POSTATS=['2']
//这里2是类别的id
//用这只猫来观察
$nextPost=$post->isPublished()->applysiling(-1)
->过滤器类别($postCats)->first();
//检查next是否不可用,然后返回false
如果(!$nextPost){
返回false;
}
//在同一页面中创建页面链接
$postPage=$this->page->getBaseFileName();
//设置URl以便我们可以直接访问。URl
$nextPost->setUrl($postPage,$this->controller);
//设置Cat URl,以便我们可以在需要时直接使用它
$nextPost->categories->each(功能($categority){
$category->setUrl($this->categoryPage,$this->controller);
});
返回$nextPost;
}
公共职能部门以前的职位($职位){
//得到当前的猫
$postCats=$post->categories->pull('id')->toArray();
//如果你不想猫从邮局来
//您可以将它们硬编码为$POSTATS=['2']
//这里2是类别的id
//用这只猫来观察
$prevPost=$post->isPublished()->ApplySiling(1)
->过滤器类别($postCats)->first();
//检查上一个ext是否不可用,然后返回false
如果(!$prevPost){
返回false;
}
//在同一页面中创建页面链接
$postPage=$this->page->getBaseFileName();
//设置URl以便我们可以直接访问。URl
$prevPost->setUrl($postPage,$this->controller);
//设置Cat URl,以便我们可以在需要时直接使用它
$prevPost->categories->each(功能($categority){
$category->setUrl($this->categoryPage,$this->controller);
});
返回$prevPost;
}
标记区域中
可以添加此代码

{%component'blogPost%}
{%set-nextPostRecord=this.controller.pageObject.nextPost(blogPost.post)%}
{%set-previousPostRecord=this.controller.pageObject.previousPost(blogPost.post)%}
{%if-previousPostRecord%}
{%endif%}
{%if nextPostRecord%}
{%endif%}
这将尊重
类别
,并仅显示该类别的帖子


如果有任何疑问,请发表评论。

我在第
{%set-nextPostRecord=this.controller.pageObject.nextPost(blogPost.post)%%行的模板呈现部分上遇到一个错误“尝试获取非对象的属性”。当我转储
this.controller
时,它不会显示任何
pageObject
命名方法或变量OK,我想出来了。我将语句更改为
{%set pageObject=this.controller.getPageObject()%}{%set nextPostRecord=pageObject.nextPost(blogPost.post)%}{%set previousPostRecord=pageObject.previousPost(blogPost.post)%}
但还有一个问题。当使用这些链接进行导航时,在某一点上,它们只能在两篇文章之间导航。在“M”后按prev键进入“N”后,在“N”后按prev键进入“M”后,并不断重复。这背后的原因可能是什么。当我使用默认的nextPost和prevPost方法时,这个问题就出现了。你知道为什么会这样吗?顺便说一句,谢谢你的代码片段:)如果在同一天发布多篇文章,那么在
上发布的
似乎是一团糟。是的,我忘了只提到不同日期的内部逻辑工作,我也面临同样的问题,但当我更改日期时,它的工作很好。。。。我猜您只是从post模型中提取逻辑并在代码部分中编写。你自己纠正的逻辑,它应该会起作用
{% component 'blogPost' %}

{% set nextPostRecord = this.controller.pageObject.nextPost(blogPost.post) %}
{% set previousPostRecord = this.controller.pageObject.previousPost(blogPost.post) %}

{% if previousPostRecord %}
    <a href="{{ previousPostRecord.url }}"> Previous </a>    
{% endif %}

{% if nextPostRecord %}
    <a href="{{ nextPostRecord.url }}"> Next </a>    
{% endif %}