From ff5bc056bde5c66a8a1a9a9dc33b6d5652edd52d Mon Sep 17 00:00:00 2001 From: wangyidong Date: Tue, 14 Feb 2023 13:35:12 +0800 Subject: [PATCH] * code for replace menu lang. --- db/update18.2.sql | 1 + framework/router.class.php | 15 +++++++++ module/common/model.php | 64 ++++++++++++++++++++++++++++++++++++-- module/custom/model.php | 2 +- 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 db/update18.2.sql diff --git a/db/update18.2.sql b/db/update18.2.sql new file mode 100644 index 0000000000..8191f3d34d --- /dev/null +++ b/db/update18.2.sql @@ -0,0 +1 @@ +ALTER TABLE `zt_lang` ADD `systemMode` varchar(10) COLLATE 'utf8_general_ci' NOT NULL DEFAULT 'ALM'; diff --git a/framework/router.class.php b/framework/router.class.php index 9be28106e7..71e76c2776 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -108,6 +108,17 @@ class router extends baseRouter parent::loadLang($moduleName, $appName); + /* Replace main nav lang. */ + if($moduleName == 'common' and $this->dbh and !empty($this->config->db->name)) + { + $customMenus = $this->dbh->query('SELECT * FROM' . TABLE_LANG . "WHERE `module`='common' AND `section`='mainNav' AND `lang`='{$this->clientLang}' AND `vision`='{$this->config->vision}' AND `systemMode`='{$this->config->systemMode}'")->fetchAll(); + foreach($customMenus as $menu) + { + $menuKey = $menu->key; + if(isset($lang->mainNav->$menuKey)) $lang->mainNav->$menuKey = zget($lang->navIcons, $menuKey, '') . " {$menu->value}" . substr($lang->mainNav->$menuKey, strpos($lang->mainNav->$menuKey, '|')); + } + } + /* Merge from the db lang. */ if($moduleName != 'common' and isset($lang->db->custom[$moduleName])) { @@ -284,6 +295,10 @@ class router extends baseRouter $lang->URCommon = isset($URPairs[$config->URSR]) ? $URPairs[$config->URSR] : reset($URPairs); $lang->SRCommon = isset($SRPairs[$config->URSR]) ? $SRPairs[$config->URSR] : reset($SRPairs); } + + /* Replace common lang. */ + $customMenus = $this->dbh->query('SELECT * FROM' . TABLE_LANG . "WHERE `module`='common' AND `lang`='{$this->clientLang}' AND `section`='' AND `vision`='{$config->vision}' AND `systemMode`='{$config->systemMode}'")->fetchAll(); + foreach($customMenus as $menu) if(isset($lang->{$menu->key})) $lang->{$menu->key} = $menu->value; } } diff --git a/module/common/model.php b/module/common/model.php index c6c4974b34..c429d4b5d1 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -1117,8 +1117,9 @@ class commonModel extends model global $app, $lang, $config; /* Set main menu by app tab and module. */ - self::setMainMenu(); - self::checkMenuVarsReplaced(); + static::replaceMenuLang(); + static::setMainMenu(); + static::checkMenuVarsReplaced(); $activeMenu = ''; $tab = $app->tab; @@ -3535,6 +3536,65 @@ EOD; return true; } + /** + * Replace menu lang. + * + * @static + * @access public + * @return void + */ + public static function replaceMenuLang() + { + global $lang; + foreach($lang->db->custom as $moduleName => $sectionMenus) + { + if(strpos($moduleName, 'Menu') === false) continue; + + $isSecondMenu = strpos($moduleName, 'subMenu') === false; + $moduleName = str_replace($isSecondMenu ? 'Menu' : 'subMenu', '', $moduleName); + + foreach($sectionMenus as $section => $menus) + { + foreach($menus as $key => $value) + { + $settingMenu = null; + /* Get second menu. */ + if($isSecondMenu) + { + $isDropMenu = strpos($section, 'dropMenu') !== false; + if(!$isDropMenu) + { + if(!isset($lang->{$moduleName}->{$section})) break; + if(is_object($lang->{$moduleName}->{$section}) and isset($lang->{$moduleName}->{$section}->{$key})) $settingMenu = &$lang->{$moduleName}->{$section}->{$key}; + if(is_array($lang->{$moduleName}->{$section}) and isset($lang->{$moduleName}->{$section}[$key])) $settingMenu = &$lang->{$moduleName}->{$section}[$key]; + } + else + { + /* Get drop menu in second menu. */ + $dropMenuKey = str_replace('dropMenu', '', $section); + if(!isset($lang->{$moduleName}->menu->{$dropMenuKey}['dropMenu']->{$key})) break; + $settingMenu = &$lang->{$moduleName}->menu->{$dropMenuKey}['dropMenu']->{$key}; + } + } + /* Get third menu. */ + elseif(isset($lang->{$moduleName}->menu->{$section}['subMenu'])) + { + $subMenu = $lang->{$moduleName}->menu->{$section}['subMenu']; + if(is_object($subMenu) and isset($subMenu->{$key})) $settingMenu = &$lang->{$moduleName}->menu->{$section}['subMenu']->{$key}; + if(is_array($subMenu) and isset($subMenu[$key])) $settingMenu = &$lang->{$moduleName}->menu->{$section}['subMenu'][$key]; + } + + /* Set custom menu lang. */ + if(!empty($settingMenu)) + { + if(is_string($settingMenu)) $settingMenu = $value . substr($settingMenu, strpos($settingMenu, '|')); + if(is_array($settingMenu) and isset($settingMenu['link'])) $settingMenu['link'] = $value . substr($settingMenu['link'], strpos($settingMenu['link'], '|')); + } + } + } + } + } + /** * Check valid row. * diff --git a/module/custom/model.php b/module/custom/model.php index 0930adf920..0f45ad973d 100644 --- a/module/custom/model.php +++ b/module/custom/model.php @@ -23,7 +23,7 @@ class customModel extends model try { - $sql = $this->dao->select('*')->from(TABLE_LANG)->where('`lang`')->in("$currentLang,all")->andWhere('vision')->eq($this->config->vision)->orderBy('lang,id')->get(); + $sql = $this->dao->select('*')->from(TABLE_LANG)->where('`lang`')->in("$currentLang,all")->andWhere('vision')->eq($this->config->vision)->andWhere('systemMode')->eq($this->config->systemMode)->orderBy('lang,id')->get(); $stmt = $this->dbh->query($sql); $allCustomLang = array();