Browse Source

refactor: 多级菜单显示修改

antshop
root 5 years ago
parent
commit
32e9c73d06
  1. 14
      backend/views/layouts/sidebar.php
  2. 24
      vendor/iron/grid/GridView.php
  3. 41
      vendor/iron/widgets/Menu.php

14
backend/views/layouts/sidebar.php

@ -22,16 +22,16 @@ use iron\widgets\Menu;
], ],
['label' => '商品管理', 'url' => '#', 'icon' => 'far fa-archive', 'items' => [ ['label' => '商品管理', 'url' => '#', 'icon' => 'far fa-archive', 'items' => [
['label' => '规格管理', 'url' => ['/antgoods/attribute/index']],
['label' => '商品列表', 'url' => ['/antgoods/goods/index']],
['label' => '后台商品分类', 'url' => ['/antgoods/category/index']],
['label' => '前端商品分类', 'url' => ['/antgoods/shopcategory/index']],
['label' => '品牌管理', 'url' => ['/antgoods/brand/index']],
['label' => '供应商管理', 'url' => ['/antgoods/supplier/index']],
['label' => '规格管理', 'url' => ['/antgoods/attribute']],
['label' => '商品列表', 'url' => ['/antgoods/goods']],
['label' => '后台商品分类', 'url' => ['/antgoods/category']],
['label' => '前端商品分类', 'url' => ['/antgoods/shopcategory']],
['label' => '品牌管理', 'url' => ['/antgoods/brand']],
['label' => '供应商管理', 'url' => ['/antgoods/supplier']],
] ]
], ],
['label' => '订单管理', 'url' => '#', 'icon' => 'far fa-list-alt', 'items' => [ ['label' => '订单管理', 'url' => '#', 'icon' => 'far fa-list-alt', 'items' => [
['label' => '订单列表', 'url' => ['/order/index', 'tag' => 'new']],
['label' => '订单列表', 'url' => ['/order', 'tag' => 'new']],
] ]
], ],
] ]

24
vendor/iron/grid/GridView.php

@ -219,13 +219,13 @@ class GridView extends BaseListView
<div class="row"> <div class="row">
<div class="col-sm-12 col-md-6"> <div class="col-sm-12 col-md-6">
{batch} {batch}
<a href="create" class="btn btn-default"><i class="fas fa-plus-square mr-2"></i>添加</a>
<a href="{url}/create" class="btn btn-default"><i class="fas fa-plus-square mr-2"></i>添加</a>
<!-- <a href="#" data-url='export' class="export btn btn-default"><i class="fa fa-file-excel-o"></i>导出</a>--> <!-- <a href="#" data-url='export' class="export btn btn-default"><i class="fa fa-file-excel-o"></i>导出</a>-->
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fas fa-file-upload mr-2"></i>导出</button> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fas fa-file-upload mr-2"></i>导出</button>
<ul class="dropdown-menu" role="menu"> <ul class="dropdown-menu" role="menu">
<li> <a class="dropdown-item export-page" href="#" data-url="export">本页</a></li>
<li> <a class="dropdown-item export-all" href="#" data-url="export">全部</a></li>
<li> <a class="dropdown-item export-page" href="#" data-url="{url}/export">本页</a></li>
<li> <a class="dropdown-item export-all" href="#" data-url="{url}/export">全部</a></li>
</ul> </ul>
</div> </div>
<!-- <button type="button" id="export" class="btn btn-default"><i class="fa fa-file-excel-o"></i>导出</button>--> <!-- <button type="button" id="export" class="btn btn-default"><i class="fa fa-file-excel-o"></i>导出</button>-->
@ -281,14 +281,14 @@ HTML;
throw new InvalidConfigException('The "formatter" property must be either a Format object or a configuration array.'); throw new InvalidConfigException('The "formatter" property must be either a Format object or a configuration array.');
} }
$this->pager = [ $this->pager = [
'options'=>['class'=>['justify-content-end','pagination']],
'linkOptions'=>['class'=>'page-link'],
'pageCssClass'=>'paginate_button page-item',
'disabledPageCssClass'=>'page-link disabled',
'firstPageLabel'=>'&laquo;',
'prevPageLabel'=>'&lsaquo;',
'nextPageLabel'=>'&rsaquo;',
'lastPageLabel'=>'&raquo;',];
'options' => ['class' => ['justify-content-end', 'pagination']],
'linkOptions' => ['class' => 'page-link'],
'pageCssClass' => 'paginate_button page-item',
'disabledPageCssClass' => 'page-link disabled',
'firstPageLabel' => '&laquo;',
'prevPageLabel' => '&lsaquo;',
'nextPageLabel' => '&rsaquo;',
'lastPageLabel' => '&raquo;',];
$this->initColumns(); $this->initColumns();
} }
@ -445,6 +445,8 @@ SCRIPT;
return $this->renderFilter(); return $this->renderFilter();
case '{batch}': case '{batch}':
return $this->renderBatch(); return $this->renderBatch();
case '{url}':
return Yii::$app->request->url;
default: default:
return false; return false;
} }

41
vendor/iron/widgets/Menu.php

@ -53,7 +53,8 @@ use yii\helpers\Url;
* *
* *
*/ */
class Menu extends Widget {
class Menu extends Widget
{
/** /**
* @var array 菜单的item数组。 * @var array 菜单的item数组。
@ -132,8 +133,8 @@ class Menu extends Widget {
public $options = [ public $options = [
'class' => 'nav nav-pills nav-sidebar flex-column', 'class' => 'nav nav-pills nav-sidebar flex-column',
'data-widget' => 'treeview', 'data-widget' => 'treeview',
'role'=>'menu',
'data-accordion'=>'false'
'role' => 'menu',
'data-accordion' => 'false'
]; ];
/** /**
@ -164,7 +165,8 @@ class Menu extends Widget {
/** /**
* 渲染菜单 * 渲染菜单
*/ */
public function run() {
public function run()
{
if ($this->route === null && Yii::$app->controller !== null) { if ($this->route === null && Yii::$app->controller !== null) {
$this->route = Yii::$app->controller->getRoute(); $this->route = Yii::$app->controller->getRoute();
} }
@ -186,7 +188,8 @@ class Menu extends Widget {
* @param array $items * @param array $items
* @return string 渲染结果 * @return string 渲染结果
*/ */
protected function renderItems($items) {
protected function renderItems($items)
{
$lines = []; $lines = [];
$n = count($items); $n = count($items);
foreach ($items as $i => $item) { foreach ($items as $i => $item) {
@ -234,7 +237,8 @@ class Menu extends Widget {
* @param array $item * @param array $item
* @return string 渲染结果 * @return string 渲染结果
*/ */
protected function renderItem($item) {
protected function renderItem($item)
{
if (isset($item['url'])) { if (isset($item['url'])) {
if (isset($item['template'])) { if (isset($item['template'])) {
$template = $item['template']; $template = $item['template'];
@ -244,7 +248,7 @@ class Menu extends Widget {
return strtr($template, [ return strtr($template, [
'{url}' => Html::encode(Url::to($item['url'])), '{url}' => Html::encode(Url::to($item['url'])),
'{label}' => Html::encode($item['label']), '{label}' => Html::encode($item['label']),
'{class}'=>isset($item['active'])?'active':'',
'{class}' => isset($item['active']) ? 'active' : '',
'{icon}' => Html::encode($item['icon']) '{icon}' => Html::encode($item['icon'])
]); ]);
} }
@ -253,7 +257,7 @@ class Menu extends Widget {
return strtr($template, [ return strtr($template, [
'{label}' => $item['label'], '{label}' => $item['label'],
'{class}'=>isset($item['active'])?'active':''
'{class}' => isset($item['active']) ? 'active' : ''
]); ]);
} }
@ -262,21 +266,31 @@ class Menu extends Widget {
* @param $item array * @param $item array
* @return boolean $item * @return boolean $item
*/ */
protected function isItemActive($item) {
protected function isItemActive($item)
{
if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) { if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
$route = Yii::getAlias($item['url'][0]); $route = Yii::getAlias($item['url'][0]);
if ($route[0] !== '/' && Yii::$app->controller) { if ($route[0] !== '/' && Yii::$app->controller) {
$route = Yii::$app->controller->module->getUniqueId() . '/' . $route; $route = Yii::$app->controller->module->getUniqueId() . '/' . $route;
} }
if (ltrim($route, '/') !== $this->route) {
$route = ltrim($route, '/');
if ($route != substr($this->route, 0, strrpos($this->route, '/')) && $route != $this->route &&
ltrim(Yii::$app->request->url, '/') !== $route) {
return false; return false;
} }
unset($item['url']['#']);
if (count($item['url']) > 1) {
foreach (array_splice($item['url'], 1) as $name => $value) {
if ($value !== null && (!isset($this->params[$name]) || $this->params[$name] != $value)) {
return false;
}
}
}
return true; return true;
} }
return false; return false;
} }
@ -285,7 +299,8 @@ class Menu extends Widget {
* @param string $item * @param string $item
* @param bool $active * @param bool $active
*/ */
protected function normalizeItems($items, &$active) {
protected function normalizeItems($items, &$active)
{
foreach ($items as $i => $item) { foreach ($items as $i => $item) {
/* 去除visible 为 false的item */ /* 去除visible 为 false的item */
if (isset($item['visible']) && !$item['visible']) { if (isset($item['visible']) && !$item['visible']) {

Loading…
Cancel
Save