Search code examples
phplaraveloctobercmsoctobercms-plugins

Get combined post from different categories using OctoberCMS RainLab Blog


I'm using Rain Lab Post in October CMS. I have no problem using the blogPost component and get post from a single category. E.g. This is a partial where show the last 5 post from a category

[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>

But now, I'm working in the home page and want to display the last post from all categories. 1 per category, 5 categories, combined.

Somebody knows how to do this?

Thanks in advance


Solution

  • Thanks to first aproach from Ahmed Essam, I resolve this in the next way:

    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;
    }
    

    In the template I can use in this way

    {% 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 %}