function Menu_getChildren($parentid, $currentpage = 0, $isadmin = 0, $topParent = 0, $search_options = 0) { $md5 = md5($parentid . '|' . $currentpage . '|' . $isadmin . '|' . $topParent . '|' . $search_options); $cache = cache_load('menus', $md5); if ($cache) { return $cache; } $pageParentFound = 0; $PARENTDATA = Page::getInstance($parentid); $PARENTDATA->initValues(); $filter = $isadmin ? '' : '&& !(special&2)'; // { menu order $order = 'ord,name'; if (isset($PARENTDATA->vars['order_of_sub_pages'])) { switch ($PARENTDATA->vars['order_of_sub_pages']) { case 1: // { alphabetical $order = 'name'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } break; // } // } case 2: // { associated_date $order = 'associated_date'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; break; // } // } default: // { by admin order $order = 'ord'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; // } } } // } $rs = dbAll('select id as subid,id,name,type,(select count(id) from pages where ' . "parent=subid {$filter}) as numchildren from pages where parent='" . $parentid . "' {$filter} order by {$order}"); $menuitems = array(); // { optimise db retrieval of pages $ids = array(); foreach ($rs as $r) { if (!isset(Page::$instances[$r['id']])) { $ids[] = $r['id']; } } Pages::precache($ids); // } $i = 0; foreach ($rs as $k => $r) { $PAGEDATA = Page::getInstance($r['id']); if (isset($PAGEDATA->banned) && $PAGEDATA->banned) { continue; } $c = array(); $c[] = $parentid == $topParent ? 'menuItemTop' : 'menuItem'; if (!$i++) { $c[] = 'first'; } if ($r['numchildren']) { $c[] = 'ajaxmenu_hasChildren'; } if ($r['id'] == $currentpage) { $c[] = 'ajaxmenu_currentPage'; $pageParentFound = 1; } else { if ($r['numchildren'] && !$pageParentFound && Menu_containsPage($currentpage, $r['id'])) { $c[] = 'ajaxmenu_containsCurrentPage'; $pageParentFound = 1; } } $rs[$k]['classes'] = join(' ', $c); $rs[$k]['link'] = $PAGEDATA->getRelativeURL(); $rs[$k]['name'] = $PAGEDATA->name; $rs[$k]['parent'] = $parentid; $menuitems[] = $rs[$k]; } cache_save('menus', $md5, $menuitems); return $menuitems; }
function Menu_getChildren($parentid, $currentpage = 0, $isadmin = 0, $topParent = 0) { global $_languages; $md5 = md5($parentid . '|' . $currentpage . '|' . $isadmin . '|' . $topParent . '|' . join(',', $_languages) . '|' . @$_SESSION['language']); $pageParentFound = 0; // { first, check to see if this is a menu that should be handled by a plugin if (preg_match('/[a-z]/', $parentid)) { $bits = explode('_', $parentid); return $GLOBALS['PLUGINS'][$bits[0]]['triggers']['menu-subpages'](null, $bits[1]); } // } if ($parentid) { $PARENTDATA = Page::getInstance($parentid); $PARENTDATA->initValues(); } else { $PARENTDATA = (object) array('id' => '0', 'order_of_sub_pages' => 'ord', 'order_of_sub_pages_dir' => 'asc'); } $filter = $isadmin ? '' : '&& !(special&2)'; // { override menu if a trigger causes the override $trigger = Core_trigger('menu-subpages', $PARENTDATA); if ($trigger) { return $trigger; } // } // { menu order $order = 'ord,name'; if (isset($PARENTDATA->vars['order_of_sub_pages'])) { switch ($PARENTDATA->vars['order_of_sub_pages']) { case 1: // { alphabetical $order = 'name'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } break; // } // } case 2: // { associated_date $order = 'associated_date'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; break; // } // } default: // { by admin order $order = 'ord'; if ($PARENTDATA->vars['order_of_sub_pages_dir']) { $order .= ' desc'; } $order .= ',name'; // } } } // } $sql = 'select id as subid,id,name,alias,type,(select count(id) from pages where ' . "parent=subid {$filter}) as numchildren from pages where parent='" . $parentid . "' {$filter} order by {$order}"; $rs = Core_cacheLoad('pages', md5($sql), -1); if ($rs == -1) { $rs = dbAll($sql); Core_cacheSave('pages', md5($sql), $rs); } $menuitems = array(); $i = 0; foreach ($rs as $k => $r) { $PAGEDATA = Page::getInstance($r['id']); if (isset($PAGEDATA->banned) && $PAGEDATA->banned) { continue; } $c = array(); $c[] = $parentid == $topParent ? 'menuItemTop' : 'menuItem'; if (!$i++) { $c[] = 'first'; } $c[] = 'c' . $i; // { see if the menu item has sub-pages according to a trigger $trigger = is_array(Core_trigger('menu-subpages', $PAGEDATA)); if ($trigger) { $r['numchildren'] = 1; $rs[$k]['numchildren'] = 1; } // } if ($r['numchildren']) { $c[] = 'ajaxmenu_hasChildren dropdown'; } if ($r['id'] == $currentpage) { $c[] = 'ajaxmenu_currentPage'; $c[] = 'current-page'; $pageParentFound = 1; } else { if ($r['numchildren'] && !$pageParentFound && Menu_containsPage($currentpage, $r['id'])) { $c[] = 'ajaxmenu_containsCurrentPage'; $pageParentFound = 1; } } $rs[$k]['classes'] = join(' ', $c); $rs[$k]['link'] = $PAGEDATA->getRelativeURL(); $rs[$k]['name'] = __FromJson($PAGEDATA->name); $rs[$k]['parent'] = $parentid; $menuitems[] = $rs[$k]; } return $menuitems; }