Jump to content

Recommended Posts

Posted

I have a page reference field that only shows certain pages based on a field on the the chosen page that also exists at the parent page.  To get the allowed pages I added in ready.php

$wire->addHookAfter('InputfieldPage::getSelectablePages', function($event) {
	if ($event->object->hasField == "my_page_reference_field") {
		$page = $event->arguments(0);
		$zv = $page->parent->name;
		$event->return = $event->pages->find("template=myTeplate, searchterm=$zv");
	}
});

As long as I use radiobuttons or select field this works great. But using automplete I get all the pages from the whole site.

Does anybody know why this happens?

Posted

This is because Page Autocomplete doesn't use InputfieldPage::getSelectablePages. Instead, it sends a live query to ProcessPageSearch. Unfortunately, this means that the field settings are written to the JS config, and support for selectors is somewhat limited there.

There's been a github issue around for some time with a workaround, which unfortunately means adding a few lines to a core js file, so it needs to be reapplied after every update: https://github.com/processwire/processwire-issues/issues/1374#issuecomment-835032978

  • Like 4
Posted

Thanks a lot. In that case I just use the normal select. Changing core files only leads to trouble and I try to avoid it if not absolutely necessary.  

  • Like 1
Posted
On 4/27/2023 at 8:04 PM, torf said:

To get the allowed pages I added in ready.php

$wire->addHookAfter('InputfieldPage::getSelectablePages', function($event) {
	if ($event->object->hasField == "my_page_reference_field") {
		$page = $event->arguments(0);
		$zv = $page->parent->name;
		$event->return = $event->pages->find("template=myTeplate, searchterm=$zv");
	}
});

You can actually adapt that to a selector string that will allow you to use Page Autocomplete:

image.png.42b18cf55ab221e46151b7b826fa3ac4.png

In a Page Reference field selector string, "page" is a special keyword that PW converts into "the page that is open in Page Edit". This isn't documented anywhere as far as I know, but it would be good if it was @ryan.

  • Like 3
Posted

Wow. Cool one. It absolutely works. I cannot use it in my special case as I have to use ready.php (the field is used in two templates and only one uses the parent as selector. So I need to use an if statement to determine the actual template), but it's good to know it works that way as well.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...