diff --git a/wire/core/PageFinder.php b/wire/core/PageFinder.php index 57ae59c7..3e869f09 100644 --- a/wire/core/PageFinder.php +++ b/wire/core/PageFinder.php @@ -683,13 +683,26 @@ class PageFinder extends Wire { } else if($quote == '(') { // selector contains an OR group (quoted selector) // at least one (quoted selector) must match for each field specified in front of it - $groupName = $this->wire('sanitizer')->fieldName($selector->getField('string')); + $groupName = $selector->group ? $selector->group : $selector->getField('string'); + $groupName = $this->wire('sanitizer')->fieldName($groupName); if(!$groupName) $groupName = 'none'; if(!isset($this->extraOrSelectors[$groupName])) $this->extraOrSelectors[$groupName] = array(); if($selector->value instanceof Selectors) { $this->extraOrSelectors[$groupName][] = $selector->value; } else { - $this->extraOrSelectors[$groupName][] = $this->wire(new Selectors($selector->value)); + if($selector->group) { + // group is pre-identified, indicating Selector field=value is the OR-group condition + $s = clone $selector; + $s->quote = ''; + $s->group = null; + $groupSelectors = new Selectors(); + $groupSelectors->add($s); + } else { + // selector field is group name and selector value is another selector containing OR-group condition + $groupSelectors = new Selectors($selector->value); + } + $this->wire($groupSelectors); + $this->extraOrSelectors[$groupName][] = $groupSelectors; } return false; diff --git a/wire/core/Selectors.php b/wire/core/Selectors.php index 4689b19c..5a4b5d0a 100644 --- a/wire/core/Selectors.php +++ b/wire/core/Selectors.php @@ -423,7 +423,7 @@ class Selectors extends WireArray { } $group = $this->extractGroup($str); $field = $this->extractField($str); - $operator = $this->extractOperator($str, $this->getOperatorChars()); + $operator = $this->extractOperator($str, self::getOperatorChars()); $value = $this->extractValue($str, $quote); if($this->parseVars && $quote == '[' && $this->valueHasVar($value)) {