<?php
namespace common\widgets;
use Yii;
use yii\helpers\ArrayHelper;
use yii\helpers\Url;
use yii\helpers\Html;
/**
* Class Menu
* @package backend\themes\admin\widgets
* Theme menu widget.
*/
class Menu extends \yii\widgets\Menu
{
/**
* @inheritdoc
*/
public $linkTemplate = '<a href="{url}">{icon} {label}</a>';
public $submenuTemplate = "\n<ul class='treeview-menu' {show}>\n{items}\n</ul>\n";
public $activateParents = true;
/**
* @inheritdoc
*/
protected function renderItem($item)
{
if(isset($item['items']))
$linkTemplate = '<a href="{url}">{icon} {label} <i class="fa fa-angle-left pull-right"></i></a>';
else
$linkTemplate = $this->linkTemplate;
if (isset($item['url'])) {
$template = ArrayHelper::getValue($item, 'template', $linkTemplate);
$replace = !empty($item['icon']) ? [
'{url}' => Url::to($item['url']),
'{label}' => $item['label'],
'{icon}' => '<i class="fa ' . $item['icon'] . '"></i> '
] : [
'{url}' => Url::to($item['url']),
'{label}' => $item['label']
];
return strtr($template, $replace);
} else {
$template = ArrayHelper::getValue($item, 'template', $this->labelTemplate);
$replace = !empty($item['icon']) ? [
'{label}' => $item['label'],
'{icon}' => '<i class="fa ' . $item['icon'] . '"></i> '
] : [
'{label}' => $item['label'],
];
return strtr($template, $replace);
}
}
/**
* Recursively renders the menu items (without the container tag).
* @param array $items the menu items to be rendered recursively
* @return string the rendering result
*/
protected function renderItems($items)
{
$n = count($items);
$lines = [];
foreach ($items as $i => $item) {
$options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', []));
$tag = ArrayHelper::remove($options, 'tag', 'li');
$class = [];
if ($item['active']) {
$class[] = $this->activeCssClass;
}
if ($i === 0 && $this->firstItemCssClass !== null) {
$class[] = $this->firstItemCssClass;
}
if ($i === $n - 1 && $this->lastItemCssClass !== null) {
$class[] = $this->lastItemCssClass;
}
if (!empty($class)) {
if (empty($options['class'])) {
$options['class'] = implode(' ', $class);
} else {
$options['class'] .= ' ' . implode(' ', $class);
}
}
$menu = $this->renderItem($item);
if (!empty($item['items'])) {
$menu .= strtr($this->submenuTemplate, [
'{show}' => $item['active'] ? "style='display: block'" : '',
'{items}' => $this->renderItems($item['items']),
]);
}
$lines[] = Html::tag($tag, $menu, $options);
}
return implode("\n", $lines);
}
/**
* @inheritdoc
*/
protected function normalizeItems($items, &$active)
{
foreach ($items as $i => $item) {
if (isset($item['visible']) && !$item['visible']) {
unset($items[$i]);
continue;
}
if (!isset($item['label'])) {
$item['label'] = '';
}
$encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels;
$items[$i]['label'] = $encodeLabel ? Html::encode($item['label']) : $item['label'];
$items[$i]['icon'] = isset($item['icon']) ? $item['icon'] : '';
$hasActiveChild = false;
if (isset($item['items'])) {
$items[$i]['items'] = $this->normalizeItems($item['items'], $hasActiveChild);
if (empty($items[$i]['items']) && $this->hideEmptyItems) {
unset($items[$i]['items']);
if (!isset($item['url'])) {
unset($items[$i]);
continue;
}
}
}
if (!isset($item['active'])) {
if ($this->activateParents && $hasActiveChild || $this->activateItems && $this->isItemActive($item)) {
$active = $items[$i]['active'] = true;
} else {
$items[$i]['active'] = false;
}
} elseif ($item['active']) {
$active = true;
}
}
return array_values($items);
}
/**
* Checks whether a menu item is active.
* This is done by checking if [[route]] and [[params]] match that specified in the `url` option of the menu item.
* When the `url` option of a menu item is specified in terms of an array, its first element is treated
* as the route for the item and the rest of the elements are the associated parameters.
* Only when its route and parameters match [[route]] and [[params]], respectively, will a menu item
* be considered active.
* @param array $item the menu item to be checked
* @return boolean whether the menu item is active
*/
protected function isItemActive($item)
{
if (isset($item['url']) && is_array($item['url']) && isset($item['url'][0])) {
$route = $item['url'][0];
if ($route[0] !== '/' && Yii::$app->controller) {
$route = Yii::$app->controller->module->getUniqueId() . '/' . $route;
}
$arrayRoute = explode('/', ltrim($route, '/'));
$arrayThisRoute = explode('/', $this->route);
if ($arrayRoute[0] !== $arrayThisRoute[0]) {
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 false;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
yii2-adminlte:带有 Adminlte 主题、rbac 角色、用户管理的 Yii2 高级模板
共855个文件
js:313个
php:154个
png:139个
5星 · 超过95%的资源 需积分: 16 8 下载量 54 浏览量
2021-07-07
15:25:00
上传
评论
收藏 4.24MB ZIP 举报
温馨提示
Yii2-Adminlte 后台用户及密码: 登录名: admin密码: qwe1234 安装和入门: 如果您没有 Composer,您可以按照 getcomposer.org 上的说明进行安装。 运行以下命令: php composer.phar create-project --stability=dev funson86/yii2-adminlte yii2-adminlte安装 Yii2-Adminlte。 运行命令: cd /my/path/to/yii2-adminlte/并转到主应用程序目录。 运行命令: php requirements.php并检查需求。 运行命令: php init以使用特定环境初始化应用程序。 创建一个新数据库并相应地在common/config/main-local.php调整它的配置。 运行命令: yii migrate以使用控制台
资源详情
资源评论
资源推荐
收起资源包目录
yii2-adminlte:带有 Adminlte 主题、rbac 角色、用户管理的 Yii2 高级模板 (855个子文件)
yii.bat 526B
yii.bat 515B
init.bat 511B
.bowerrc 37B
bootstrap.css 120KB
bootstrap.min.css 97KB
AdminLTE.css 87KB
ionicons.css 39KB
editor_ie7.css 37KB
editor_iequirks.css 36KB
editor_ie8.css 35KB
editor_ie.css 35KB
editor_gecko.css 34KB
editor.css 34KB
ionicons.min.css 33KB
datepicker3.css 33KB
jquery-ui-1.10.3.custom.css 31KB
jquery-ui-1.10.3.custom.min.css 26KB
_all.css 21KB
font-awesome.css 21KB
font-awesome.min.css 17KB
dialog_ie7.css 17KB
dialog_ie8.css 17KB
dialog_iequirks.css 16KB
dialog_ie.css 16KB
dialog_opera.css 16KB
dialog.css 15KB
_all.css 15KB
_all.css 14KB
_all.css 13KB
fullcalendar.css 12KB
daterangepicker-bs3.css 5KB
dataTables.bootstrap.css 5KB
slider.css 4KB
bootstrap-colorpicker.css 4KB
bootstrap-colorpicker.min.css 3KB
ion.rangeSlider.css 3KB
bootstrap-timepicker.css 3KB
bootstrap-timepicker.min.css 2KB
bootstrap3-wysihtml5.css 2KB
yellow.css 2KB
purple.css 2KB
orange.css 2KB
green.css 2KB
blue.css 2KB
pink.css 2KB
aero.css 2KB
grey.css 2KB
red.css 2KB
line.css 2KB
bootstrap3-wysihtml5.min.css 2KB
ion.rangeSlider.skinFlat.css 2KB
ion.rangeSlider.skinNice.css 2KB
contents.css 2KB
orange.css 2KB
yellow.css 2KB
purple.css 2KB
orange.css 2KB
yellow.css 2KB
purple.css 2KB
green.css 2KB
green.css 2KB
blue.css 2KB
pink.css 2KB
aero.css 2KB
grey.css 2KB
blue.css 2KB
pink.css 2KB
aero.css 2KB
grey.css 2KB
red.css 2KB
red.css 2KB
all.css 2KB
minimal.css 2KB
polaris.css 2KB
square.css 2KB
orange.css 1KB
yellow.css 1KB
purple.css 1KB
green.css 1KB
blue.css 1KB
pink.css 1KB
aero.css 1KB
grey.css 1KB
futurico.css 1KB
red.css 1KB
flat.css 1KB
site.css 1KB
site.css 1KB
toolbar.css 1KB
wsc.css 1KB
fullcalendar.print.css 708B
jquery-jvectormap-1.2.2.css 692B
morris.css 428B
ionicons.eot 84KB
fontawesome-webfont.eot 37KB
glyphicons-halflings-regular.eot 20KB
ajax-loader1.gif 8KB
ajax-loader.gif 7KB
animated-overlay.gif 2KB
共 855 条
- 1
- 2
- 3
- 4
- 5
- 6
- 9
kudrei
- 粉丝: 37
- 资源: 4758
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1