Hello! I integrated a category section in my blueprints and followed the tutorial on youtube and the documentation for a filterable menu in the php section of this. Now i have two problems.
First, for my filter bar, only the pages from the current pagination get shown, might also be a typo or wrong order.
My php for that looks like this:
<?php
$filterBy = get('filter');
$program = $page
->children()
->listed()->flip()
->when($filterBy, function($filterBy) {
return $this->filterBy('category', $filterBy, ',');
})
->paginate(20);
$filters = $program->pluck('category', ',', true);
$pagination = $program->pagination();
?>
Second, is it possible that i let my customer create categories and manage categories from the panel page itself?
Best regards.
Your code looks absolutely correct and should filter all pages (but of course, always return a paginated result).
Yes, you can have a field somewhere where users add categories, and then in your category field query those categories as options: Multiselect | Kirby CMS
I will implement the mulsiselect, thanks for this.
Ill try to explain the problem above a bit better, i just saw i misstyped “pages” when i ment “categories”.
I want a filterbar that can show all categories of all pages. However , my filterbar only returns the categories of pages which are shown in the pagination.
My filterbar after the code i posted above looks like this:
<?php foreach ($filters as $filter) : ?>
<a href="<?= $page->url() ?>?filter=<?= $filter ?>">
<?= $filter ?>
</a>
<?php endforeach?>
Thanks for the help!
You don’t have to, you can do the same with the tags field.
The problem is the order in your code, because you are only fetching the categories of the already filtered pages:
<?php
$filterBy = get('filter');
$programPages = $page->children()->listed();
$filters = $programPages->pluck('category', ',', true);
$program = $programPages
->when($filterBy, function($filterBy) {
return $this->filterBy('category', $filterBy, ',');
})
->paginate(20);
$pagination = $program->pagination();
?>