Hello,
I am trying to filter by two different fields but struggling to succeed. I do not need to filter by both at once—just one or the other.
For instance, we would like to filter journalEntries by the containsMedia field or by the entryType field (but not both at once). Each of the filters seem to work individually when I remove the other function, however, I have been struggling to make them work the way I’ve described. I imagine this is because journalEntries is defined in both functions although I could be wrong about that…
Is this something anyone could lend me a hand with?
Thank you for your time
<?php
// Entry-type filter
$filterByEntry = get('entry');
$unfilteredByEntry = $page->children()->listed();
$journalEntries = $unfilteredByEntry
->when($filterByEntry, function($filterByEntry) {
return $this->filterBy('entryType', $filterByEntry);
});
$entryFilters = $unfilteredByEntry->sortBy('entryType', 'asc')->pluck('entryType', null, true);
// Contains-media filter
$filterByMedia = get('media');
$unfilteredByMedia = $page->children()->listed();
$journalEntries = $unfilteredByMedia
->when($filterByMedia, function($filterByMedia) {
return $this->filterBy('containsMedia', $filterByMedia, ',');
});
$mediaFilters = $unfilteredByMedia->sortBy('containsMedia', 'asc')->pluck('containsMedia', ',', true);
?>
<nav class="filters">
<!-- Entry-type filter nav-->
<ul>
<li>Entry Type:</li>
<?php foreach ($entryFilters as $entryFilter): ?>
<li><a href="<?= $page->url() ?>?entry=<?= $entryFilter ?>"><?= $entryFilter ?></a></li>
<?php endforeach ?>
</ul>
<!-- Contains-media filter nav-->
<ul>
<li>Contains Media:</li>
<?php foreach ($mediaFilters as $mediaFilter): ?>
<li><a href="<?= $page->url() ?>?media=<?= $mediaFilter ?>"><?= $mediaFilter ?></a></li>
<?php endforeach ?>
</ul>
</nav>