У тебя у категорий установлена обратная связь со статьями hasMany
?
Если нет, то создай ее, будет легче дергать посты из категорий.
Так-же вопрос, у тебя "родительские" категории сделаны через Simple Tree
или Nested Tree
?
А для твоего макета подойдет примерно такой код.
В компоненте:
use OctoClub\Articles\Models\Category;
public function onRun()
{
$this->page['category'] = Category::where('slug', $this->property('slug'))->first();
}
В шаблоне компонента:
<h1>{{ category.name }}</h1>
{% for sub_cat in category.getChildren() %} <!-- у Nested Tree есть метод для захвата всех "дочерних" категорий или может немного отличается, сделай dump(category), точно не помню -->
<h2>{{ sub_cat.name }}</h2>
{% for post in sub_cat.posts|slice(3) %} <!-- Берем 3 поста по связи hasMany -->
<span class="headline">{{ post.name}}</span>
{% endfor %}
{% endfor %}
Как видишь, использовать TWIG не очень страшно, и достаточно красиво)