* change model motheds for menus.

This commit is contained in:
Catouse
2016-04-20 08:41:42 +08:00
parent 4e0d51bba5
commit c4c5f942e8
3 changed files with 130 additions and 49 deletions
+34 -31
View File
@@ -404,7 +404,7 @@ class commonModel extends model
if($menuItem->hidden) continue;
$active = $menuItem->name == $mainMenu ? "class='$activeName'" : '';
$link = is_array($menuItem->link) ? helper::createLink($menuItem->link['module'], $menuItem->link['method'], $menuItem->link['vars']) : $menuItem->link;
echo "<li $active data-id='$menuItem->name'><a href='$link' $active>$menuItem->label</a></li>\n";
echo "<li $active data-id='$menuItem->name'><a href='$link' $active>$menuItem->text</a></li>\n";
}
$customLink = helper::createLink('custom', 'menu');
echo "<li class='custom-item'><a href='$customLink' data-toggle='modal' data-type='iframe' title='$lang->customMenu' data-icon='cog'><i class='icon icon-cog'></i></a></li>";
@@ -466,50 +466,53 @@ class commonModel extends model
{
global $lang, $app;
if(!isset($lang->$moduleName->menu)) {echo "<ul></ul>"; return;}
if(!isset($lang->$moduleName->menu))
{
echo "<ul></ul>";
return;
}
/* Get the sub menus of the module, and get current module and method. */
$submenus = $lang->$moduleName->menu;
/* get current module and method. */
$currentModule = $app->getModuleName();
$currentMethod = $app->getMethodName();
$menu = customModel::getModuleMenu($moduleName);
/* The beginning of the menu. */
echo "<ul class='nav'>\n";
/* Cycling to print every sub menus. */
foreach($app->customMenu['module'] as $subMenuKey => $submenu)
foreach($menu as $menuItem)
{
/* Init the these vars. */
$link = $submenu;
$subModule = '';
$alias = '';
$float = '';
$active = '';
$target = '';
$status = '';
$order = '';
if(is_array($submenu)) extract($submenu); // If the sub menu is an array, extract it.
if($status == 'hide') continue;
/* Print the menu. */
if(strpos($link, '|') === false)
if($menuItem->link)
{
echo "<li>$link</li>\n";
$active = '';
$float = '';
$alias = '';
$target = '';
$module = '';
$method = '';
$link = is_array($menuItem->link) ? helper::createLink($menuItem->link['module'], $menuItem->link['method'], $menuItem->link['vars']) : $menuItem->link;
if(is_array($menuItem->link))
{
if($menuItem->link['subModule'])
{
$subModules = explode(',', $menuItem->link['subModule']);
if(in_array($currentModule, $subModules) and $float != 'right') $active = 'active';
}
$alias = $menuItem->link['alias'];
$target = $menuItem->link['target'];
$float = $menuItem->link['float'];
$module = $menuItem->link['module'];
$method = $menuItem->link['method'];
}
if($float != 'right' and $module == $currentModule and ($method == $currentMethod or strpos(",$alias,", ",$currentMethod,") !== false)) $active = 'active';
echo "<li class='$float $active'>" . html::a($link, $menuItem->text, $target, "data-id='$menuItem->name'") . "</li>\n";
}
else
{
$link = explode('|', $link);
list($label, $module, $method) = $link;
$vars = isset($link[3]) ? $link[3] : '';
if(commonModel::hasPriv($module, $method))
{
/* Is the currentModule active? */
$subModules = explode(',', $subModule);
if(in_array($currentModule,$subModules) and $float != 'right') $active = 'active';
if($module == $currentModule and ($method == $currentMethod or strpos(",$alias,", ",$currentMethod,") !== false) and $float != 'right') $active = 'active';
echo "<li class='$float $active'>" . html::a(helper::createLink($module, $method, $vars), $label, $target, "id=submenu$subMenuKey") . "</li>\n";
}
echo "<li>$menuItem->text</li>\n";
}
}
echo "</ul>\n";
+3 -5
View File
@@ -188,17 +188,15 @@ class custom extends control
* @access public
* @return void
*/
public function menu($type = 'main')
public function menu($module = 'main')
{
a(customModel::getModuleMenu($module));
global $config;
if($_POST)
{
$config->menucustom->main = $_POST['menu'];
$this->send(array('result' => 'success', 'menu' => $_POST['menu']));
}
else
{
$this->send(customModel::getMainMenu());
}
$this->send(json_encode(customModel::getModuleMenu($module)));
}
}
+93 -13
View File
@@ -123,14 +123,16 @@ class customModel extends model
->beginIF($params['key'])->andWhere('`key`')->in($params['key'])->fi();
}
public static function getMainMenu($rebuild = false)
public static function getModuleMenu($module = 'main', $rebuild = false)
{
if(empty($module)) $module = 'main';
global $app, $lang, $config;
// if(empty($app->customMenu)) $app->customMenu = array();
// if(!$rebuild && !empty($app->customMenu['main'])) return $app->customMenu['main'];
// if(!$rebuild && !empty($app->customMenu[$module])) return $app->customMenu[$module];
$menuConfig = $config->menucustom->main;
if(!isset($menuConfig) && common::inNoviceMode()) $menuConfig = $config->menu->main['novice'];
$menuConfig = $config->menucustom->$module;
if(!isset($menuConfig) && common::inNoviceMode()) $menuConfig = $config->menu->$module['novice'];
$isSetMenuConfig = isset($menuConfig);
if($isSetMenuConfig)
@@ -147,31 +149,109 @@ class customModel extends model
}
$menu = array();
foreach($lang->menu as $name => $item)
$allMenu = $module == 'main' ? $lang->menu : $lang->$module->menu;
foreach($allMenu as $name => $item)
{
$link = explode('|', $item);
list($label, $module, $method) = $link;
$label = '';
$module = '';
$method = '';
$link = is_array($item) ? $item['link'] : $item;
if(strpos($link, '|') !== false)
{
$link = explode('|', $link);
list($label, $module, $method) = $link;
}
else
{
$label = $link;
}
if(commonModel::hasPriv($module, $method))
{
$vars = isset($link[3]) ? $link[3] : '';
$itemLink = '';
if($module && $method)
{
$itemLink = array('module' => $module, 'method' => $method);
if($link[3]) $itemLink['vars'] = $link[3];
if(is_array($item))
{
$itemLink['subModule'] = $item['subModule'];
$itemLink['alias'] = $item['alias'];
$itemLink['target'] = $item['target'];
$itemLink['float'] = $item['float'];
}
}
$menuItem = new stdclass();
$menuItem->name = $name;
$menuItem->link = array('module' => $module, 'method' => $method, 'vars' => $vars);
$menuItem->label = $label;
$menuItem->link = $itemLink;
$menuItem->text = $label;
$menuItem->source = $item;
$menuItem->hidden = $isSetMenuConfig && (!$menuConfig[$name]);
$menu[] = $menuItem;
}
}
// $app->customMenu['main'] = $menu;
// $app->customMenu[$module] = $menu;
return $menu;
}
public static function getModuleMenu()
public static function getMainMenu($rebuild = false)
{
return self::getModuleMenu('main', $rebuild);
}
public static function getFeatureMenu($module, $method)
{
global $app, $lang, $config;
$menucustomKey = 'menucustom' . $module;
$app->loadLang($module);
$featurebar = '';
if(isset($lang->$module->featurebar[$method])) $featurebar = $lang->$module->featurebar[$method];
$menucustomKey = 'menucustom' . $module;
return $featurebar;
if($featurebar)
{
$menuOrder = array();
$menuStatus = array();
if(isset($config->$menucustomKey->$method))
{
$menuStatus = json_decode($config->$menucustomKey->$method, true);
foreach($menuStatus as $menuKey => $status) $menuOrder[] = $menuKey;
}
/* Merge all menu. */
$inOrderMenu = ',' . join(',', $menuOrder) . ',';
$notInOrderMenu = array();
foreach($featurebar as $menuKey => $menuName)
{
if(strpos($inOrderMenu, ",$menuKey,") === false) $notInOrderMenu[] = $menuKey;
}
if($notInOrderMenu)
{
$order = count($menuOrder);
foreach($notInOrderMenu as $menuKey)
{
$menuOrder[$order] = $menuKey;
$order++;
}
}
ksort($menuOrder, SORT_ASC);
$processedMenu = new stdclass();
foreach($menuOrder as $order => $menuKey)
{
$menuContent = $featurebar[$menuKey];
$menuContent = array('link' => $menuContent);
$menuContent['status'] = isset($menuStatus[$menuKey]) ? $menuStatus[$menuKey] : 'show';
$menuContent['order'] = ($order + 1) * 5;
$processedMenu->$menuKey = $menuContent;
}
$processedMenus['featurebar'] = $processedMenu;
}
}
public static function getCustomMenu($module, $method)