项目中,通常我们要做动态的导航选中事件 如
代码如下
if(!function_exists('get_rule_deal')) {
/**
* 导航URL解析 返回是否选中状态
* $rule string 规则 (如:home/index/*?type=2&id=* 参不确定用*标识 )
* ( module与controller可以默认不写,GET规则根据需求写 如: index?type=1 或 index 即可)
* @author 爱是西瓜
*/
function get_rule_deal($rule)
{
if (!trim($rule)) return false;
$exp = explode('?', $rule);
//解析url方法
if ($exp[0]) {
$ctr = explode('/', $exp[0]);
$data = [];
$data['module'] = request()->module();
$data['controller'] = request()->controller();
$data['action'] = request()->action();
if (count($ctr) == 1) {
$data['action'] = $ctr[0];
}
if (count($ctr) == 2) {
$data['controller'] = $ctr[0];
$data['action'] = $ctr[1];
}
if (count($ctr) == 3) {
$data['module'] = $ctr[0];
$data['controller'] = $ctr[1];
$data['action'] = $ctr[2];
}
if ($data['module'] != '*' && strcasecmp($data['module'], request()->module()) != 0) {
return false;
}
if ($data['controller'] != '*' && strcasecmp($data['controller'], request()->controller()) != 0) {
return false;
}
if ($data['action'] != '*' && strcasecmp($data['action'], request()->action()) != 0) {
return false;
}
}
//解析url参数
$attr = [];
if ($exp[1]) {
$join = explode('&', $exp[1]);
foreach ($join as $k => $v) {
list($key, $value) = explode('=', $v);
$attr[$key] = $value;
if (input($key) === null) {
return false;
} else if ($value != '*' && strcasecmp(input($key), $value) != 0) {
return false;
}
}
}
return true;
}
}
实例DEMO
if(!function_exists('get_nav_list')) {
/**
* 获取导航列表
* @author 爱是西瓜
*/
function get_nav_list()
{
$nav = [
['url' => '','rule'=>'loan/*?type=1', 'title' => '信用贷'],
['url' => '','rule'=>'loan/*?type=2', 'title' => '车抵贷'],
['url' => '','rule'=>'loan/*?type=3', 'title' => '房抵贷'],
['url' => '','rule'=>'credit/*', 'title' => '信用卡'],
['url' => 'calc/index', 'rule'=>'calc/*','title' => '工具'],
['url' => '','rule'=>'need/index', 'title' => '贷款需求'],
];
foreach ($nav as $k=>$v){
$v['active'] = get_rule_deal($v['rule'])?'on':'';
$v['url'] = url($v['url']);
$nav[$k] = $v;
}
return $nav;
}
}