10月CMS如何过滤多个类别的博文?我正在使用RainLab Blog插件。该插件仅允许使用一个类别进行过滤。我想要一个综合的结果。请帮忙。
答案 0 :(得分:2)
您需要使用一些自定义代码根据多个类别进行过滤。如果仍使用PostList组件,请进行以下更改,您将能够根据多个类别筛选列表。
我在下面做的是修改PostList组件,首先通过分叉并用posts
变量替换filteredPosts
变量。然后,要设置filteredPosts
,编写代码以获取所有博客帖子并仅返回包含$categories
数组中类别的博客。 不可否认,这种方法绝对不是最有效的,可以进一步改进
在标记
中添加以下代码<ul class="post-list">
{% for post in filteredPosts %}
<li>
<h3><a href="{{ post.url }}">{{ post.title }}</a></h3>
<p class="info">
Posted
{% if post.categories.count %} in {% endif %}
{% for category in post.categories %}
<a href="{{ category.url }}">{{ category.name }}</a>{% if not loop.last %}, {% endif %}
{% endfor %}
on {{ post.published_at|date('M d, Y') }}
</p>
<p class="excerpt">{{ post.summary|raw }}</p>
</li>
{% else %}
<li class="no-data">{{ noPostsMessage }}</li>
{% endfor %}
</ul>
{% if posts.lastPage > 1 %}
<ul class="pagination">
{% if posts.currentPage > 1 %}
<li><a href="{{ this.page.baseFileName|page({ (pageParam): (posts.currentPage-1) }) }}">← Prev</a></li>
{% endif %}
{% for page in 1..posts.lastPage %}
<li class="{{ posts.currentPage == page ? 'active' : null }}">
<a href="{{ this.page.baseFileName|page({ (pageParam): page }) }}">{{ page }}</a>
</li>
{% endfor %}
{% if posts.lastPage > posts.currentPage %}
<li><a href="{{ this.page.baseFileName|page({ (pageParam):(posts.currentPage+1) }) }}">Next →</a></li>
{% endif %}
</ul>
{% endif %}
在CMS的代码标签中添加以下代码。
更改use RainLab\Blog\Models\Post as BlogPost;
function onStart(){
//This is where you list the categories you want to display
$categories = ['cat-a','cat-b'];
$posts = [];
foreach(BlogPost::all() as $blog){
foreach($blog->categories as $cat){
if(in_array($cat->slug, $categories)) {
array_push($posts, $blog);
break;
}
}
}
$this['filteredPosts'] = $posts;
}
答案 1 :(得分:2)
在CMS页面的“代码”标签中:
use RainLab\Blog\Models\Post as BlogPost;
function onStart(){
$this['filteredPosts'] = BlogPost::whereHas('categories', function($q) {
$q->whereIn('slug', ['cat-a','cat-b']);
})->get();
}