mirror of
https://github.com/processwire/processwire.git
synced 2025-08-06 14:57:10 +02:00
Improvements to FieldtypePage set of string value(s) to pages, so that it recognizes title and name for setting purposes.
This commit is contained in:
@@ -251,6 +251,8 @@ abstract class Process extends WireData implements Module {
|
||||
*
|
||||
*/
|
||||
public function ___breadcrumb($href, $label) {
|
||||
if(is_array($label)) return $this;
|
||||
$label = (string) $label;
|
||||
$pos = strpos($label, '/');
|
||||
if($pos !== false && strpos($href, '/') === false) {
|
||||
// arguments got reversed, we'll work with it anyway...
|
||||
|
@@ -810,6 +810,7 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
|
||||
}
|
||||
|
||||
$pages = $this->wire()->pages;
|
||||
$inputfield = null;
|
||||
|
||||
// value is an int or array of int|string|Page, load to pages, add to $pageArray
|
||||
if(!is_array($value)) $value = array($value);
|
||||
@@ -818,17 +819,24 @@ class FieldtypePage extends FieldtypeMulti implements Module, ConfigurableModule
|
||||
// Page object
|
||||
if($v->id == $page->id) continue;
|
||||
$pg = $v;
|
||||
} else if(is_int($v)) {
|
||||
} else if(is_int($v) || ctype_digit("$v")) {
|
||||
// integer page ID
|
||||
if($v == $page->id) continue;
|
||||
$pg = $pages->get($v);
|
||||
} else if(is_string($v)) {
|
||||
// path or selector string
|
||||
if(ctype_digit($v)) {
|
||||
$v = (int) $v;
|
||||
if($v == $page->id) continue;
|
||||
if(strpos($v, '/') === 0 && $this->wire()->sanitizer->pagePathName($v) === $v) {
|
||||
$pg = $pages->get($v);
|
||||
} else if(Selectors::stringHasSelector($v)) {
|
||||
$pg = $pages->get($v);
|
||||
} else {
|
||||
$pg = null;
|
||||
}
|
||||
if(!$pg || !$pg->id) {
|
||||
if(!$inputfield) $inputfield = $this->getInputfield($page, $field);
|
||||
$pgs = $inputfield->getSelectablePages($page, 'name|title=' . $this->wire()->sanitizer->selectorValue($v));
|
||||
if(count($pgs)) $pg = $pgs->first();
|
||||
}
|
||||
$pg = $pages->get($v);
|
||||
} else {
|
||||
// unrecognized type: can't make a page object from it
|
||||
continue;
|
||||
|
@@ -5,7 +5,7 @@
|
||||
*
|
||||
* Delegates the actual input control to a user-defined Inputfield derived from InputfieldSelect
|
||||
*
|
||||
* @method PageArray|null getSelectablePages(Page $page)
|
||||
* @method PageArray|null getSelectablePages(Page $page, $filterSelector = '')
|
||||
* @method PageArray findPagesCode(Page $page)
|
||||
*
|
||||
* Can be accessed from $this or from $field:
|
||||
@@ -349,10 +349,11 @@ class InputfieldPage extends Inputfield implements ConfigurableModule {
|
||||
* Return PageArray of selectable pages for this input
|
||||
*
|
||||
* @param Page $page The Page being edited
|
||||
* @param string $filterSelector Additional selector to filter selectable pages (3.0.245+)
|
||||
* @return PageArray|null
|
||||
*
|
||||
*/
|
||||
public function ___getSelectablePages(Page $page) {
|
||||
public function ___getSelectablePages(Page $page, $filterSelector = '') {
|
||||
|
||||
$pages = $this->wire()->pages;
|
||||
$lockedModes = array(Inputfield::collapsedNoLocked, Inputfield::collapsedYesLocked, Inputfield::collapsedBlankLocked);
|
||||
@@ -386,25 +387,30 @@ class InputfieldPage extends Inputfield implements ConfigurableModule {
|
||||
$selector = self::populateFindPagesSelector($page, $findPagesSelector, $instance);
|
||||
if($templateIDs) $selector = trim("$selector, templates_id=$templateIDs", ", ");
|
||||
if($this->parent_id) $selector = trim("$selector, parent_id=$this->parent_id", ", ");
|
||||
if($filterSelector) $selector .= ", $filterSelector";
|
||||
$children = $pages->find($selector);
|
||||
|
||||
} else if($this->findPagesCode) {
|
||||
// php statement that returns a PageArray or a Page (to represent a parent)
|
||||
$children = $this->findPagesCode($page);
|
||||
if($children instanceof Page) $children = $children->children(); // @teppokoivula
|
||||
if($children instanceof Page) $children = $children->children($filterSelector); // @teppokoivula
|
||||
|
||||
} else if($this->parent_id) {
|
||||
$parent = $pages->get($this->parent_id);
|
||||
if($parent) {
|
||||
if($templateIDs) {
|
||||
$children = $parent->children("templates_id=$templateIDs, check_access=0, status<$statusUnder");
|
||||
$selector = "templates_id=$templateIDs, check_access=0, status<$statusUnder";
|
||||
} else {
|
||||
$children = $parent->children("check_access=0, status<$statusUnder");
|
||||
$selector = "check_access=0, status<$statusUnder";
|
||||
}
|
||||
if($filterSelector) $selector .= ", $filterSelector";
|
||||
$children = $parent->children($selector);
|
||||
}
|
||||
|
||||
} else if($templateIDs) {
|
||||
$children = $pages->find("templates_id=$templateIDs, check_access=0, status<$statusUnder");
|
||||
$selector = "templates_id=$templateIDs, check_access=0, status<$statusUnder";
|
||||
if($filterSelector) $selector .= ", $filterSelector";
|
||||
$children = $pages->find($selector);
|
||||
|
||||
} else {
|
||||
$children = $pages->newPageArray();
|
||||
|
Reference in New Issue
Block a user