id: 10
source: 1
name: pdoMenu
category: pdoTools
properties: 'a:51:{s:7:"showLog";a:7:{s:4:"name";s:7:"showLog";s:4:"desc";s:21:"pdotools_prop_showLog";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"fastMode";a:7:{s:4:"name";s:8:"fastMode";s:4:"desc";s:22:"pdotools_prop_fastMode";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:5:"level";a:7:{s:4:"name";s:5:"level";s:4:"desc";s:19:"pdotools_prop_level";s:4:"type";s:11:"numberfield";s:7:"options";a:0:{}s:5:"value";i:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:7:"parents";a:7:{s:4:"name";s:7:"parents";s:4:"desc";s:21:"pdotools_prop_parents";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:12:"displayStart";a:7:{s:4:"name";s:12:"displayStart";s:4:"desc";s:26:"pdotools_prop_displayStart";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"resources";a:7:{s:4:"name";s:9:"resources";s:4:"desc";s:23:"pdotools_prop_resources";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"templates";a:7:{s:4:"name";s:9:"templates";s:4:"desc";s:23:"pdotools_prop_templates";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:7:"context";a:7:{s:4:"name";s:7:"context";s:4:"desc";s:21:"pdotools_prop_context";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:5:"cache";a:7:{s:4:"name";s:5:"cache";s:4:"desc";s:19:"pdotools_prop_cache";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"cacheTime";a:7:{s:4:"name";s:9:"cacheTime";s:4:"desc";s:23:"pdotools_prop_cacheTime";s:4:"type";s:11:"numberfield";s:7:"options";a:0:{}s:5:"value";i:3600;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:14:"cacheAnonymous";a:7:{s:4:"name";s:14:"cacheAnonymous";s:4:"desc";s:28:"pdotools_prop_cacheAnonymous";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"plPrefix";a:7:{s:4:"name";s:8:"plPrefix";s:4:"desc";s:22:"pdotools_prop_plPrefix";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:3:"wf.";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:10:"showHidden";a:7:{s:4:"name";s:10:"showHidden";s:4:"desc";s:24:"pdotools_prop_showHidden";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:15:"showUnpublished";a:7:{s:4:"name";s:15:"showUnpublished";s:4:"desc";s:29:"pdotools_prop_showUnpublished";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:11:"showDeleted";a:7:{s:4:"name";s:11:"showDeleted";s:4:"desc";s:25:"pdotools_prop_showDeleted";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:18:"previewUnpublished";a:7:{s:4:"name";s:18:"previewUnpublished";s:4:"desc";s:32:"pdotools_prop_previewUnpublished";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:12:"hideSubMenus";a:7:{s:4:"name";s:12:"hideSubMenus";s:4:"desc";s:26:"pdotools_prop_hideSubMenus";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:13:"useWeblinkUrl";a:7:{s:4:"name";s:13:"useWeblinkUrl";s:4:"desc";s:27:"pdotools_prop_useWeblinkUrl";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:1;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:7:"sortdir";a:7:{s:4:"name";s:7:"sortdir";s:4:"desc";s:21:"pdotools_prop_sortdir";s:4:"type";s:4:"list";s:7:"options";a:2:{i:0;a:2:{s:4:"text";s:3:"ASC";s:5:"value";s:3:"ASC";}i:1;a:2:{s:4:"text";s:4:"DESC";s:5:"value";s:4:"DESC";}}s:5:"value";s:3:"ASC";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:6:"sortby";a:7:{s:4:"name";s:6:"sortby";s:4:"desc";s:20:"pdotools_prop_sortby";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:9:"menuindex";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:5:"limit";a:7:{s:4:"name";s:5:"limit";s:4:"desc";s:19:"pdotools_prop_limit";s:4:"type";s:11:"numberfield";s:7:"options";a:0:{}s:5:"value";i:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:6:"offset";a:7:{s:4:"name";s:6:"offset";s:4:"desc";s:20:"pdotools_prop_offset";s:4:"type";s:11:"numberfield";s:7:"options";a:0:{}s:5:"value";i:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:11:"rowIdPrefix";a:7:{s:4:"name";s:11:"rowIdPrefix";s:4:"desc";s:25:"pdotools_prop_rowIdPrefix";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:10:"firstClass";a:7:{s:4:"name";s:10:"firstClass";s:4:"desc";s:24:"pdotools_prop_firstClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:5:"first";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"lastClass";a:7:{s:4:"name";s:9:"lastClass";s:4:"desc";s:23:"pdotools_prop_lastClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:4:"last";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"hereClass";a:7:{s:4:"name";s:9:"hereClass";s:4:"desc";s:23:"pdotools_prop_hereClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:6:"active";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:11:"parentClass";a:7:{s:4:"name";s:11:"parentClass";s:4:"desc";s:25:"pdotools_prop_parentClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"rowClass";a:7:{s:4:"name";s:8:"rowClass";s:4:"desc";s:22:"pdotools_prop_rowClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:10:"outerClass";a:7:{s:4:"name";s:10:"outerClass";s:4:"desc";s:24:"pdotools_prop_outerClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:10:"innerClass";a:7:{s:4:"name";s:10:"innerClass";s:4:"desc";s:24:"pdotools_prop_innerClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:10:"levelClass";a:7:{s:4:"name";s:10:"levelClass";s:4:"desc";s:24:"pdotools_prop_levelClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:9:"selfClass";a:7:{s:4:"name";s:9:"selfClass";s:4:"desc";s:23:"pdotools_prop_selfClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:12:"webLinkClass";a:7:{s:4:"name";s:12:"webLinkClass";s:4:"desc";s:26:"pdotools_prop_webLinkClass";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"tplOuter";a:7:{s:4:"name";s:8:"tplOuter";s:4:"desc";s:22:"pdotools_prop_tplOuter";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:41:"@INLINE
";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:3:"tpl";a:7:{s:4:"name";s:3:"tpl";s:4:"desc";s:17:"pdotools_prop_tpl";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:95:"@INLINE [[+menutitle]][[+wrapper]]";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:12:"tplParentRow";a:7:{s:4:"name";s:12:"tplParentRow";s:4:"desc";s:26:"pdotools_prop_tplParentRow";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:16:"tplParentRowHere";a:7:{s:4:"name";s:16:"tplParentRowHere";s:4:"desc";s:30:"pdotools_prop_tplParentRowHere";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:7:"tplHere";a:7:{s:4:"name";s:7:"tplHere";s:4:"desc";s:21:"pdotools_prop_tplHere";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"tplInner";a:7:{s:4:"name";s:8:"tplInner";s:4:"desc";s:22:"pdotools_prop_tplInner";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:11:"tplInnerRow";a:7:{s:4:"name";s:11:"tplInnerRow";s:4:"desc";s:25:"pdotools_prop_tplInnerRow";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:12:"tplInnerHere";a:7:{s:4:"name";s:12:"tplInnerHere";s:4:"desc";s:26:"pdotools_prop_tplInnerHere";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:18:"tplParentRowActive";a:7:{s:4:"name";s:18:"tplParentRowActive";s:4:"desc";s:32:"pdotools_prop_tplParentRowActive";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:17:"tplCategoryFolder";a:7:{s:4:"name";s:17:"tplCategoryFolder";s:4:"desc";s:31:"pdotools_prop_tplCategoryFolder";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:8:"tplStart";a:7:{s:4:"name";s:8:"tplStart";s:4:"desc";s:22:"pdotools_prop_tplStart";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:55:"@INLINE [[+menutitle]]
[[+wrapper]]";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:16:"checkPermissions";a:7:{s:4:"name";s:16:"checkPermissions";s:4:"desc";s:30:"pdotools_prop_checkPermissions";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:6:"hereId";a:7:{s:4:"name";s:6:"hereId";s:4:"desc";s:20:"pdotools_prop_hereId";s:4:"type";s:11:"numberfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:5:"where";a:7:{s:4:"name";s:5:"where";s:4:"desc";s:19:"pdotools_prop_where";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:6:"select";a:7:{s:4:"name";s:6:"select";s:4:"desc";s:20:"pdotools_prop_select";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:6:"scheme";a:7:{s:4:"name";s:6:"scheme";s:4:"desc";s:20:"pdotools_prop_scheme";s:4:"type";s:4:"list";s:7:"options";a:6:{i:0;a:2:{s:5:"value";s:0:"";s:4:"text";s:14:"System default";}i:1;a:2:{s:5:"value";i:-1;s:4:"text";s:25:"-1 (relative to site_url)";}i:2;a:2:{s:5:"value";s:4:"full";s:4:"text";s:40:"full (absolute, prepended with site_url)";}i:3;a:2:{s:5:"value";s:3:"abs";s:4:"text";s:39:"abs (absolute, prepended with base_url)";}i:4;a:2:{s:5:"value";s:4:"http";s:4:"text";s:38:"http (absolute, forced to http scheme)";}i:5;a:2:{s:5:"value";s:5:"https";s:4:"text";s:40:"https (absolute, forced to https scheme)";}}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:13:"toPlaceholder";a:7:{s:4:"name";s:13:"toPlaceholder";s:4:"desc";s:27:"pdotools_prop_toPlaceholder";s:4:"type";s:9:"textfield";s:7:"options";a:0:{}s:5:"value";s:0:"";s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}s:13:"countChildren";a:7:{s:4:"name";s:13:"countChildren";s:4:"desc";s:27:"pdotools_prop_countChildren";s:4:"type";s:13:"combo-boolean";s:7:"options";a:0:{}s:5:"value";b:0;s:7:"lexicon";s:19:"pdotools:properties";s:4:"area";s:0:"";}}'
static_file: core/components/pdotools/elements/snippets/snippet.pdomenu.php
-----
/** @var array $scriptProperties */
/** @var modX $modx */
// Convert parameters from Wayfinder if exists
if (isset($startId)) {
$scriptProperties['parents'] = $startId;
}
if (!empty($includeDocs)) {
$tmp = array_map('trim', explode(',', $includeDocs));
foreach ($tmp as $v) {
if (!empty($scriptProperties['resources'])) {
$scriptProperties['resources'] .= ',' . $v;
} else {
$scriptProperties['resources'] = $v;
}
}
}
if (!empty($excludeDocs)) {
$tmp = array_map('trim', explode(',', $excludeDocs));
foreach ($tmp as $v) {
if (!empty($scriptProperties['resources'])) {
$scriptProperties['resources'] .= ',-' . $v;
} else {
$scriptProperties['resources'] = '-' . $v;
}
}
}
if (!empty($previewUnpublished) && $modx->hasPermission('view_unpublished')) {
$scriptProperties['showUnpublished'] = 1;
}
$scriptProperties['depth'] = empty($level) ? 100 : abs($level) - 1;
if (!empty($contexts)) {
$scriptProperties['context'] = $contexts;
}
if (empty($scriptProperties['context'])) {
$scriptProperties['context'] = $modx->resource->context_key;
}
// Save original parents specified by user
$specified_parents = array_map('trim', explode(',', $scriptProperties['parents']));
if ($scriptProperties['parents'] === '') {
$scriptProperties['parents'] = $modx->resource->id;
} elseif ($scriptProperties['parents'] === 0 || $scriptProperties['parents'] === '0') {
if ($scriptProperties['depth'] !== '' && $scriptProperties['depth'] !== 100) {
$contexts = array_map('trim', explode(',', $scriptProperties['context']));
$parents = array();
if (!empty($scriptProperties['showDeleted'])) {
/** @var pdoFetch $pdoFetch */
$pdoFetch = $modx->getService('pdoFetch');
foreach ($contexts as $ctx) {
$parents = array_merge($parents, $pdoFetch->getChildIds('modResource', 0, $scriptProperties['depth'], array('context' => $ctx)));
}
} else {
foreach ($contexts as $ctx) {
$parents = array_merge($parents, $modx->getChildIds(0, $scriptProperties['depth'], array('context' => $ctx)));
}
}
$scriptProperties['parents'] = !empty($parents) ? implode(',', $parents) : '+0';
$scriptProperties['depth'] = 0;
}
$scriptProperties['includeParents'] = 1;
$scriptProperties['displayStart'] = 0;
} else {
$parents = array_map('trim', explode(',', $scriptProperties['parents']));
$parents_in = $parents_out = array();
foreach ($parents as $v) {
if (!is_numeric($v)) {
continue;
}
if ($v[0] == '-') {
$parents_out[] = abs($v);
} else {
$parents_in[] = abs($v);
}
}
if (empty($parents_in)) {
$scriptProperties['includeParents'] = 1;
$scriptProperties['displayStart'] = 0;
}
}
if (!empty($displayStart)) {
$scriptProperties['includeParents'] = 1;
}
if (!empty($ph)) {
$toPlaceholder = $ph;
}
if (!empty($sortOrder)) {
$scriptProperties['sortdir'] = $sortOrder;
}
if (!empty($sortBy)) {
$scriptProperties['sortby'] = $sortBy;
}
if (!empty($permissions)) {
$scriptProperties['checkPermissions'] = $permissions;
}
if (!empty($cacheResults)) {
$scriptProperties['cache'] = $cacheResults;
}
if (!empty($ignoreHidden)) {
$scriptProperties['showHidden'] = $ignoreHidden;
}
$wfTemplates = array(
'outerTpl' => 'tplOuter',
'rowTpl' => 'tpl',
'parentRowTpl' => 'tplParentRow',
'parentRowHereTpl' => 'tplParentRowHere',
'hereTpl' => 'tplHere',
'innerTpl' => 'tplInner',
'innerRowTpl' => 'tplInnerRow',
'innerHereTpl' => 'tplInnerHere',
'activeParentRowTpl' => 'tplParentRowActive',
'categoryFoldersTpl' => 'tplCategoryFolder',
'startItemTpl' => 'tplStart',
);
foreach ($wfTemplates as $k => $v) {
if (isset(${$k})) {
$scriptProperties[$v] = ${$k};
}
}
//---
/** @var pdoMenu $pdoMenu */
$fqn = $modx->getOption('pdoMenu.class', null, 'pdotools.pdomenu', true);
$path = $modx->getOption('pdomenu_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true);
if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) {
$pdoMenu = new $pdoClass($modx, $scriptProperties);
} else {
return false;
}
$pdoMenu->pdoTools->addTime('pdoTools loaded');
$cache = !empty($cache) || (!$modx->user->id && !empty($cacheAnonymous));
if (empty($scriptProperties['cache_key'])) {
$scriptProperties['cache_key'] = 'pdomenu/' . sha1(serialize($scriptProperties));
}
$output = '';
$tree = array();
if ($cache) {
$tree = $pdoMenu->pdoTools->getCache($scriptProperties);
}
if (empty($tree)) {
$data = $pdoMenu->pdoTools->run();
$data = $pdoMenu->pdoTools->buildTree($data, 'id', 'parent', $specified_parents);
$tree = array();
foreach ($data as $k => $v) {
if (empty($v['id'])) {
if (!in_array($k, $specified_parents) && !$pdoMenu->checkResource($k)) {
continue;
} else {
$tree = array_merge($tree, $v['children']);
}
} else {
$tree[$k] = $v;
}
}
if ($cache) {
$pdoMenu->pdoTools->setCache($tree, $scriptProperties);
}
}
if (isset($return) && $return === 'data') {
return $tree;
}
if (!empty($tree)) {
$output = $pdoMenu->templateTree($tree);
}
if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
$output .= '';
}
if (!empty($toPlaceholder)) {
$modx->setPlaceholder($toPlaceholder, $output);
} else {
return $output;
}