Accessor snippet for MODX Resource properties field.
<?php
/**
* getProps
* Snippet to access MODX Resource properties.
* @author @sepiariver
*
* @package ResourceProperties
* GPL+, no warranties express nor implied.
*
**/
// Options
// Resource ID (optional)
$id = (int) $modx->getOption('id', $scriptProperties, 0);
// Optionally get a standard Resource field
$field = $modx->getOption('field', $scriptProperties, '');
// Top-level namespace in array $properties
$namespace = (string) $modx->getOption('namespace', $scriptProperties, 'core');
// 2nd-level key at $properties[$namespace][$key]
$key = (string) $modx->getOption('key', $scriptProperties, '');
// TPL Chunk
$tpl = (string) $modx->getOption('tpl', $scriptProperties, '');
// Dump array values if no TPL?
$dump = $modx->getOption('dump', $scriptProperties, false);
// toPlaceholder
$toPlaceholder = $modx->getOption('toPlaceholder', $scriptProperties, '');
// Get $resource object
$resource = ($id) ? $modx->getObject('modResource', abs($id)) : $modx->resource;
if (!($resource instanceof modResource)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'getResourceProps snippet could not load resource object.');
return;
}
$fields = $resource->toArray();
// If $field property is set, just return it and nothing else is done
if (!empty($field) && isset($fields[$field])) {
$return = (empty($tpl)) ? $fields[$field] : $modx->getChunk($tpl, array('output' => $fields[$field]));
if (empty($toPlaceholder)) return $return;
$modx->setPlaceholder($toPlaceholder, $return);
return;
}
// Get properties
$properties = (empty($key)) ? $resource->getProperties($namespace) : $resource->getProperty($key, $namespace);
if (empty($properties)) return;
// Output
// Initialize
$output = '';
// If no TPL, return empty string or dump the array
if (empty($tpl)) {
if ($dump) $output = '<pre>' . print_r($properties, true) . '</pre>';
return $output;
}
// Template the data
$output = $modx->getChunk($tpl, $properties);
// Return if no placeholder specified
if (empty($toPlaceholder)) return $output;
// Otherwise set the placeholder and return nothing
$modx->setPlaceholder($toPlaceholder, $output);
return;