11bits
1
I’m using the modules plugin and I want to filter the module subpages to not be shown in a submenu.
This is my approach:
$children = $item->children()->visible()->filterBy('template', '!=', 'module.name1')->filterBy('template', '!=', 'module.name2' )->filterBy('template', '!=', 'module.name3' )...;
Is there a simpler way to do it?
This should work:
$children = $items->children()->visible()->filterBy('template', '*=', 'module.');
If not, use a filter with callback and check if the string starts with module
…
11bits
3
It works! (adding the exclamation mark !*=
).
Thanks Sonja.
Oh, yes, of course, doing too many things at the same time right now.
11bits
6
I thought it worked, but it doesn’t return any page.
I found another solution in Filtering compendium:
$children = $item->children()->visible()->filterBy('template', 'not in', ['module.name1', 'module.name2',...]);
In this way, I do not have to repeat filterBy
for each template.
It could be even better if I could indicate module.*
just once.
What exactly. are you trying to fetch, what is $items. in your example above? It should be a single page but seems to be a collection of pages?
But then your variable should be $item->children()->visible()->filter()
not $items->children()->etc()
…
11bits
10
Yes, I already changed it, in my last example is as you say.
Ok, I. think the problem is the template filter, a module doesn’t have template, should work if you use intendedTemplate
instead:
$modules = $item->children()->filterBy('intendedTemplate', '*=', 'module');
$children = $item->children()->not($modules);
As far as I can see, there is no !*=
operator?
11bits
12
It seems to work with template
too.
The key was the operator, using your code now it works.
Thanks