使用OctoberCMS RainLab Blog获取不同类别的组合帖子

时间:2017-01-09 02:05:38

标签: laravel octobercms octobercms-plugins

我在10月CMS中使用Rain Lab Post。 我使用blogPost组件没有问题,并从单个类别发布。例如。这是显示类别

中最后5个帖子的部分内容
[blogPosts]
pageNumber = "{{ :page }}"
categoryFilter = "{{ slug }}"
postsPerPage = 5
noPostsMessage = "No news in this category"
sortOrder = "published_at desc"
categoryPage = 404
postPage = "singlePost"
==
<li> <a href="#">{{category.name}}</a>
    <ul class="drop-down full-width col-5 hover-expand">
        <li class="validation">
            <h2 class="mm-title">{{category.name}}</h2>
        </li>
        {% for post in posts %}
        <li>
            {% for image in post.featured_images|slice(0,1) %}
                <a href="{{ post.url }}"><img src="{{ image.path }}" alt=""></a>
            {% endfor %}
            <h3><a href="{{ post.url }}">{{post.title}}</a></h3>
        </li>
        {% endfor %}
    </ul>
</li>

但是现在,我正在主页上工作并希望显示所有类别的最后一篇文章。每类1个,5个类别,合并。

有人知道怎么做?

提前致谢

2 个答案:

答案 0 :(得分:5)

感谢Ahmed Essam的第一次接受,我将在下一个方面解决这个问题:

function onStart(){
   $categories = Db::table('rainlab_blog_categories')->get();
   foreach ($categories as $key=>$category){
      if($category->slug != 'uncategorized'){
         $first = \Rainlab\Blog\Models\Category::with('posts')->where('id',$category->id)->first();
         $data[] = $first->posts[0];
      }
   }
   $this['posts'] = $data;
}

在模板中,我可以这样使用

{% for post in posts %}
    <li class="col-md-6 col-sm-6">
        <div id="container">

            {% for image in post.featured_images | slice(0,1) %}
               <div class="thumb"><img src="{{image.path}}" alt=""></div>
            {% endfor %}

            <div class="content">

                {% for category in post.categories %}
                    <div class="cat">{{category.name}</div>
                {% endfor %}

                <h3><a href="{{ post.url }}">{{ post.title )}}</a></h3>
            </div>
        </div>
    </li>
{% endfor %}

答案 1 :(得分:0)

这样您就必须在页面/布局的代码部分手动获取数据。

function onStart() {
$first_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 1)->first();
$second_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 2)->first();
$third_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 3)->first();
$fourth_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 4)->first();
$fifth_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 5)->first();

$array = $first_category_post->merge($second_category_post);
$array = $array->merge($third_category_post);
$array = $array->merge($fourth_category_post);
$array = $array->merge($fifth_category_post);

$this['posts'] = $array;
}

另一个解决方案是使用通常的php array_merge

function onStart() {
$first_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 1)->first();
$second_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 2)->first();
$third_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 3)->first();
$fourth_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 4)->first();
$fifth_category_post = \Rainlab\Blog\Models\Post::orderBy('id', 'desc')->where('category_id', 5)->first();

$array = array_merge($first_category_post->toArray(), $second_category_posts->toArray());
$array = array_merge($array, $third_category_post->toArray());
$array = array_merge($array, $fourth_category_post->toArray());
$array = array_merge($array, $fifth_category_post->toArray());

$this['posts'] = $array->toJson();
}