Last active
July 23, 2017 23:08
-
-
Save blynx/5076dd5f450f24b51f10d74f56520196 to your computer and use it in GitHub Desktop.
PHP, ProcessWire function: Get fields inside fieldsets of Template or Page objects. Choose to retrieve FieldsArray or values as WireData.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* getFieldsetOf | |
* | |
* for ProcessWire | |
* | |
* gets fields inside a fieldset of pages or templates | |
* choose to retrieve values | |
* | |
* @param Template|Page $context the page or template | |
* @param String $fieldsetName name of the fieldset | |
* @param bool|boolean $collectValues want to collect values of the pages fieldset? | |
* @param string $fieldsetCloseIdentifier default: '_END' | |
* @return FieldsArray|WireData returns FieldsArray or if data wanted, WireData | |
*/ | |
function getFieldsetOf($context, String $fieldsetName, $collectValues = false, $fieldsetCloseIdentifier = '_END') { | |
if ($collectValues === true && $context instanceof Page) { | |
$collectedItems = new WireData(); | |
} else if($context instanceof Template) { | |
$collectValues = false; | |
$collectedItems = new FieldsArray(); | |
} else { | |
throw new WireException("getFieldsetOf: first argument must be of type Page or Template", 1); | |
} | |
if (!$context->fieldgroup->get($fieldsetName . $fieldsetCloseIdentifier)) return NULL; | |
$collecting = false; | |
foreach ($context->fieldgroup as $field) { | |
if ($field->name == $fieldsetName) { | |
$collecting = true; | |
continue; | |
} | |
if ($field->name == $fieldsetName . $fieldsetCloseIdentifier) { | |
break; | |
} | |
if ($collecting) { | |
if ($collectValues) { | |
$collectedItems->set($field->name, $context->get($field->name)); | |
} else { | |
$collectedItems->add($field); | |
} | |
} | |
} | |
return $collectedItems; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment