123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 |
- <?php
- /**
- * 易优CMS
- * ============================================================================
- * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
- * 网站地址: http://www.eyoucms.com
- * ----------------------------------------------------------------------------
- * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
- * ============================================================================
- * Author: 小虎哥 <1105415366@qq.com>
- * Date: 2018-4-3
- */
- namespace app\common\logic;
-
- use think\Db;
- use think\Model;
- use app\common\logic\ArctypeLogic;
-
- /**
- * 菜单逻辑定义
- * @package common\Logic
- */
- class NavigationLogic extends Model
- {
- /**
- * 构造方法
- */
- public function initialize(){
- parent::initialize();
- $this->arctypeLogic = new ArctypeLogic();
- }
-
- /**
- * 全部菜单
- */
- public function GetAllArctype($type_id = 0)
- {
- $where = [
- 'is_del' => 0,
- 'status' => 1,
- 'lang' => get_admin_lang(),
- ];
- $field = 'id, parent_id, typename, dirname, litpic,grade';
-
- // 查询所有可投稿的菜单
- $ArcTypeData = Db::name('arctype')->field($field)->where($where)->select();
- $oneLevel = $twoLevel = $threeLevel = [];
- foreach ($ArcTypeData as $k => $v) {
- if (0 == $v['grade']) {
- $oneLevel[] = $v;
- } elseif (1 == $v['grade']) {
- $twoLevel[] = $v;
- } elseif (2 == $v['grade']) {
- $threeLevel[] = $v;
- }
- }
- static $seo_pseudo = null;
- if (null === $seo_pseudo) {
- $seoConfig = tpCache('seo');
- $seo_pseudo = !empty($seoConfig['seo_pseudo']) ? $seoConfig['seo_pseudo'] : config('ey_config.seo_pseudo');
- }
-
- // 下拉框拼装
- $HtmlCode = '<select name="type_id" id="type_id" onchange="SyncData(this);">';
- $HtmlCode .= '<option id="arctype_default" value="0">请选择菜单</option>';
- foreach ($oneLevel as $yik => $yiv) {
- /*菜单路径*/
- if (2 == $seo_pseudo) {
- // 生成静态
- $typeurl = ROOT_DIR . "/index.php?m=home&c=Lists&a=index&tid={$yiv['id']}";
- } else {
- // 动态或伪静态
- $typeurl = typeurl("home/Lists/index", $yiv, true, false, $seo_pseudo, null);
- $typeurl = auto_hide_index($typeurl);
- }
-
- $style1 = $type_id == $yiv['id'] ? 'selected' : '';//是否选中
- //一级下拉框
- $HtmlCode .= '<option value="' . $yiv['id'] . '" data-typeurl="' . $typeurl . '" data-typename="' . $yiv['typename'] . '" ' . $style1 . '>';
- if ($yiv['grade'] > 0)
- {
- $HtmlCode .= str_repeat(' ', $yiv['grade'] * 4);
- }
- $HtmlCode .= htmlspecialchars_decode(addslashes($yiv['typename'])) . '</option>';
-
- foreach ($twoLevel as $key => $val) {
- if ($yiv['id'] == $val['parent_id']) {
- if (2 == $seo_pseudo) {
- // 生成静态
- $typeurl = ROOT_DIR . "/index.php?m=home&c=Lists&a=index&tid={$val['id']}";
- } else {
- // 动态或伪静态
- $typeurl = typeurl("home/Lists/index", $val, true, false, $seo_pseudo, null);
- $typeurl = auto_hide_index($typeurl);
- }
-
- $style1 = $type_id == $val['id'] ? 'selected' : '';//是否选中
- //二级下拉框
- $HtmlCode .= '<option value="' . $val['id'] . '" data-typeurl="' . $typeurl . '" data-typename="' . $val['typename'] . '" ' . $style1 . '>';
- if ($val['grade'] > 0)
- {
- $HtmlCode .= str_repeat(' ', $val['grade'] * 4);
- }
- $HtmlCode .= htmlspecialchars_decode(addslashes($val['typename'])) . '</option>';
- foreach ($threeLevel as $k => $v) {
- if ($val['id'] == $v['parent_id']) {
- if (2 == $seo_pseudo) {
- // 生成静态
- $typeurl = ROOT_DIR . "/index.php?m=home&c=Lists&a=index&tid={$v['id']}";
- } else {
- // 动态或伪静态
- $typeurl = typeurl("home/Lists/index", $v, true, false, $seo_pseudo, null);
- $typeurl = auto_hide_index($typeurl);
- }
-
- $style1 = $type_id == $v['id'] ? 'selected' : '';//是否选中
- //三级下拉框
- $HtmlCode .= '<option value="' . $v['id'] . '" data-typeurl="' . $typeurl . '" data-typename="' . $v['typename'] . '"' . $style1 . '>';
- if ($v['grade'] > 0)
- {
- $HtmlCode .= str_repeat(' ', $v['grade'] * 4);
- }
- $HtmlCode .= htmlspecialchars_decode(addslashes($v['typename'])) . '</option>';
- unset($threeLevel[$k]);
- }
- }
- unset($twoLevel[$key]);
- }
- }
- }
- $HtmlCode .= '</select>';
- return $HtmlCode;
- }
-
- // 获取全部可用于快速生成菜单的栏目列表
- public function getAllArctypeList($type_id = 0)
- {
- // 栏目最大层级数
- $arctype_max_level = intval(config('global.arctype_max_level'));
- // 获取全部可用栏目
- $options = $this->arctypeLogic->arctype_list(0, 0, false, $arctype_max_level - 1, ['is_del' => 0]);
-
- // URL模式
- static $seo_pseudo = null;
- if (null === $seo_pseudo) {
- $seoConfig = tpCache('seo');
- $seo_pseudo = !empty($seoConfig['seo_pseudo']) ? $seoConfig['seo_pseudo'] : config('ey_config.seo_pseudo');
- }
-
- // 栏目选择内容
- $arctypeHtml = '<select name="type_id" id="type_id" onchange="SyncData(this);">';
- $arctypeHtml .= '<option id="arctype_default" value="0">请选择菜单</option>';
- foreach ($options as $var) {
- // 是否选中
- $isSelected = $type_id == $var['id'] ? 'selected' : '';
- // 菜单URL
- if (2 == $seo_pseudo) {
- // 生成静态
- $typeurl = ROOT_DIR . "/index.php?m=home&c=Lists&a=index&tid={$var['id']}";
- } else {
- // 动态或伪静态
- $typeurl = auto_hide_index(typeurl("home/Lists/index", $var, true, false, $seo_pseudo, null));
- }
- // 拼装选项
- $arctypeHtml .= '<option value="' . $var['id'] . '" data-typeurl="' . $typeurl . '" data-typename="' . $var['typename'] . '" ' . $isSelected . '>';
- if ($var['level'] > 0) {
- $arctypeHtml .= str_repeat(' ', $var['level'] * 4);
- }
- $arctypeHtml .= htmlspecialchars_decode(addslashes($var['typename'])) . '</option>';
- }
- $arctypeHtml .= '</select>';
-
- // 返回内容
- // dump($arctypeHtml);exit;
- return $arctypeHtml;
- }
-
- // 获取全部导航菜单列表
- public function getAllNavList($position_id = 0, $nav_id = 0)
- {
- // 查询所有可投稿的菜单的顶级菜单
- $where = [
- 'c.is_del' => 0,
- 'c.status' => 1,
- 'c.position_id' => $position_id
- ];
- $navList = $this->nav_list(0, 0, false, 0, $where, false);
- $navHtml = '<select onchange="selectNav(this);">';
- $navHtml .= '<option value="0">请选择菜单</option>';
- foreach ($navList as $var) {
- $navHtml .= '<option value="' . $var['nav_id'] . '" data-topid="' . $var['topid'] . '"';
- $navHtml .= (intval($nav_id) === intval($var['nav_id'])) ? " selected='true' " : '';
- $navHtml .= '>';
- if (intval($var['level']) > 0) {
- $navHtml .= str_repeat(' ', intval($var['level']) * 4);
- }
- $navHtml .= htmlspecialchars_decode(addslashes($var['nav_name'])) . '</option>';
- }
- $navHtml .= '</select>';
- // dump($navHtml);exit;
- return $navHtml;
- }
-
- /**
- * 获得指定菜单下的子菜单的数组
- *
- * @access public
- * @param int $id 菜单的ID
- * @param int $selected 当前选中菜单的ID
- * @param boolean $re_type 返回的类型: 值为真时返回下拉列表,否则返回数组
- * @param int $level 限定返回的级数。为0时返回所有级数
- * @param array $map 查询条件
- * @return mix
- */
- public function nav_list($id = 0, $selected = 0, $re_type = true, $level = 0, $map = array(), $is_cache = true)
- {
- $fields = "c.*, c.nav_id as typeid, count(s.nav_id) as has_children, '' as children";
- $args = [$fields, $map, $is_cache];
- $cacheKey = 'nav_list-'.md5(__CLASS__.__FUNCTION__.json_encode($args));
- $res = cache($cacheKey);
- if (empty($res) || empty($is_cache)) {
- $res = Db::name('nav_list')
- ->field($fields)
- ->alias('c')
- ->join('nav_list s', 's.parent_id = c.nav_id', 'LEFT')
- ->where($map)
- ->group('c.nav_id')
- ->order('c.parent_id asc, c.sort_order asc, c.nav_id')
- // ->cache($is_cache, EYOUCMS_CACHE_TIME, "nav_list")
- ->select();
- cache($cacheKey, $res, null, 'nav_list');
- }
- if (empty($res) == true) {
- return $re_type ? '' : array();
- }
-
- $options = $this->nav_options($id, $res); // 获得指定菜单下的子菜单的数组
-
- /* 截取到指定的缩减级别 */
- if ($level > 0) {
- if ($id == 0) {
- $end_level = $level;
- } else {
- $first_item = reset($options); // 获取第一个元素
- $end_level = $first_item['level'] + $level;
- }
-
- /* 保留level小于end_level的部分 */
- foreach ($options AS $key => $val) {
- if ($val['level'] >= $end_level) {
- unset($options[$key]);
- }
- }
- }
-
- $pre_key = 0;
- $select = '';
- foreach ($options AS $key => $value) {
- $options[$key]['has_children'] = 0;
- if ($pre_key > 0) {
- if ($options[$pre_key]['nav_id'] == $options[$key]['parent_id']) {
- $options[$pre_key]['has_children'] = 1;
- }
- }
- $pre_key = $key;
-
- if ($re_type == true) {
- $select .= '<option value="' . $value['nav_id'] . '" ';
- $select .= ($selected == $value['nav_id']) ? "selected='true'" : '';
- $select .= '>';
- if ($value['level'] > 0) {
- $select .= str_repeat(' ', $value['level'] * 4);
- }
- $select .= htmlspecialchars_decode(addslashes($value['nav_name'])) . '</option>';
- }
- }
-
- if ($re_type == true) {
- return $select;
- } else {
- return $options;
- }
- }
-
- /**
- * 过滤和排序所有菜单,返回一个带有缩进级别的数组
- *
- * @access private
- * @param int $id 上级菜单ID
- * @param array $arr 含有所有菜单的数组
- * @param int $level 级别
- * @return void
- */
- public function nav_options($spec_id, $arr)
- {
- $cat_options = array();
-
- if (isset($cat_options[$spec_id])) {
- return $cat_options[$spec_id];
- }
-
- if (!isset($cat_options[0])) {
- $level = $last_id = 0;
- $options = $id_array = $level_array = array();
- while (!empty($arr)) {
- foreach ($arr AS $key => $value) {
- $id = $value['nav_id'];
- if ($level == 0 && $last_id == 0) {
- if ($value['parent_id'] > 0) {
- break;
- }
-
- $options[$id] = $value;
- $options[$id]['level'] = $level;
- $options[$id]['nav_id'] = $id;
- $options[$id]['nav_name'] = htmlspecialchars_decode($value['nav_name']);
- unset($arr[$key]);
-
- if ($value['has_children'] == 0) {
- continue;
- }
- $last_id = $id;
- $id_array = array($id);
- $level_array[$last_id] = ++$level;
- continue;
- }
-
- if ($value['parent_id'] == $last_id) {
- $options[$id] = $value;
- $options[$id]['level'] = $level;
- $options[$id]['nav_id'] = $id;
- $options[$id]['nav_name'] = htmlspecialchars_decode($value['nav_name']);
- unset($arr[$key]);
-
- if ($value['has_children'] > 0) {
- if (end($id_array) != $last_id) {
- $id_array[] = $last_id;
- }
- $last_id = $id;
- $id_array[] = $id;
- $level_array[$last_id] = ++$level;
- }
- } elseif ($value['parent_id'] > $last_id) {
- break;
- }
- }
-
- $count = count($id_array);
- if ($count > 1) {
- $last_id = array_pop($id_array);
- } elseif ($count == 1) {
- if ($last_id != end($id_array)) {
- $last_id = end($id_array);
- } else {
- $level = 0;
- $last_id = 0;
- $id_array = array();
- continue;
- }
- }
-
- if ($last_id && isset($level_array[$last_id])) {
- $level = $level_array[$last_id];
- } else {
- $level = 0;
- break;
- }
- }
- $cat_options[0] = $options;
- } else {
- $options = $cat_options[0];
- }
-
- if (!$spec_id) {
- return $options;
- } else {
- if (empty($options[$spec_id])) {
- return array();
- }
-
- $spec_id_level = $options[$spec_id]['level'];
-
- foreach ($options AS $key => $value) {
- if ($key != $spec_id) {
- unset($options[$key]);
- } else {
- break;
- }
- }
-
- $spec_id_array = array();
- foreach ($options AS $key => $value) {
- if (($spec_id_level == $value['level'] && $value['nav_id'] != $spec_id) ||
- ($spec_id_level > $value['level'])) {
- break;
- } else {
- $spec_id_array[$key] = $value;
- }
- }
- $cat_options[$spec_id] = $spec_id_array;
-
- return $spec_id_array;
- }
- }
-
- // 前台功能列表
- public function ForegroundFunction()
- {
- return $ReturnData = [
- 0 => [
- 'title' => '首页',
- 'url' => "web_cmsurl"
- ],
- 1 => [
- 'title' => '个人中心',
- 'url' => "index"
- ],
- 2 => [
- 'title' => '我的信息',
- 'url' => "user_info"
- ],
- 3 => [
- 'title' => '我的收藏',
- 'url' => "my_collect"
- ],
- 4 => [
- 'title' => '财务明细',
- 'url' => "consumer_details"
- ],
- 5 => [
- 'title' => '购物车',
- 'url' => 'shop_cart_list'
- ],
- 6 => [
- 'title' => '收货地址',
- 'url' => "shop_address_list"
- ],
- 7 => [
- 'title' => '我的订单',
- 'url' => "shop_centre"
- ],
- 8 => [
- 'title' => '我的评价',
- 'url' => "my_comment"
- ],
- 9 => [
- 'title' => '投稿列表',
- 'url' => "release_centre"
- ],
- 10 => [
- 'title' => '我要投稿',
- 'url' => "article_add"
- ],
- 11 => [
- 'title' => '外部链接',
- 'url' => "external_link"
- ],
-
- ];
- }
- }
|