Skip to content

Instantly share code, notes, and snippets.

@blynx
Last active July 23, 2017 23:08
Show Gist options
  • Save blynx/5076dd5f450f24b51f10d74f56520196 to your computer and use it in GitHub Desktop.
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.
/**
* 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