// +----------------------------------------------------------------------
//递归
function node_merge($node,$access=null,$pid=0){
$arr=array();
foreach($node as $v){
if(is_array($access)){
$v['access']=in_array($v['id'],$access)?1:0;
}
if($pid==$v['pid']){
$v['child']=node_merge($node,$access,$v['id']);
$arr[]=$v;
}
}
return $arr;
}
//根据pid找到所有父节点
function get_parent_node($id,$nav=""){
$r=M("node")->find($id);
$path=CONTROLLER_NAME."/".ACTION_NAME;
if($path==$r[name]){
$self="".$r[title]."";
$curr="current";
}else{
$self="".$r[title]."";
$curr="";
}
$nav=$self.$nav;
if($r[pid]){
return get_parent_node($r[pid],$nav);
}else{
return $nav;
}
}
//左侧根据控制器方法来设置选中状态
function menu_current($node){
//将数据变成json便于查询
$node=stripslashes(json_encode($node));
$node= strtolower(str_replace('"',"&dh&", $node));
$path=strtolower('&dh&'.CONTROLLER_NAME."/".ACTION_NAME.'&dh&');
if(strstr($node,$path)){
return true;
}else{
return false;
}
}
//后台导航路径
function admin_nav(){
$path=CONTROLLER_NAME."/".ACTION_NAME;
$id=M("node")->where("name='$path'")->order("pid desc")->getField("id");
if($id){
$getnode=get_parent_node($id);
}
$nav=''.$getnode;
//如果是信息管理控制器则特别显示
if(CONTROLLER_NAME=="Info"){
$nav='信息管理';
$nav_arr=nav_arr();
foreach($nav_arr as $v){
$nav.="".$v["name"]."";
}
if(ACTION_NAME=="add"){
$nav.="增加信息";
}
if(ACTION_NAME=="editor"){
$nav.="修改信息";
}
if(ACTION_NAME=="checked"){
$nav.="审核信息";
}
if(ACTION_NAME=="set_top"){
$nav.="信息顶置";
}
if(ACTION_NAME=="set_good"){
$nav.="信息推荐";
}
}
//
return $nav;
}
//后台导航旁边的页面提示
function nav_notic(){
$path=CONTROLLER_NAME."/".ACTION_NAME;
$remark=M("node")->where("name='$path'")->order("pid desc")->getField("remark");
$remark= explode("\r\n",$remark);
foreach($remark as $v){
echo "
$v";
}
}
//判断admin是否登陆
function is_login(){
if(!session("user_id")||!session("user_name")||!session("is_admin")){
return 0;
}else{
return session("user_id");
}
}
//检测当前用户是否为管理员
function is_administrator($uid = null){
$uid = is_null($uid) ? is_login() : $uid;
return $uid && (intval($uid) === C('USER_ADMINISTRATOR'));
}
//获取无限级分类
function get_cat($tab,$id=0){//$tab是对应的表【表里需要包含如下字段:id,name,pid】 $id是需要选中的项
//$id=$id['id'];
$data=M($tab)->order("sort asc")->select();
return get_cat_merge($data,$id);
}
function get_cat_merge($data,$id=0,$pid=0,$selectstr=""){
$arr=array();
$i=0;
foreach($data as $v){
if($id&&$v[id]==$id){
$checked="selected";
}else{
$checked="";
}
if($pid==$v['pid']){
$i++;
if($v[level]>1){
$level_str="└";
}else{
$level_str="";
}
for($i=2;$i<=$v[level];$i++){
$level_str=" ".$level_str;
}
$selectstr.="";
$selectstr=get_cat_merge($data,$id,$v[id],$selectstr);
}
}
return $selectstr;;
}
//传递控制器和方法,判断当前用户是否有这个节点
function check_user_node($rule){
if(IS_ROOT){
return true;//管理员允许访问任何页面
}
$rule=strtolower($rule);
//这里只针对 已经添加过节点的控制器做验证,未增加到node表中的不做验证
$node=D('node')->field('name')->select();
//转小写
$s_node=array();
foreach($node as $v){
$s_node[]=strtolower($v[name]);
}
if(!in_array($rule,$s_node))
{
return true;
}
//对角色节点做验证
foreach(C('ROLE_NODE_RS') as $v){
$name=strtolower($v[name]);
if($name==$rule){
return true;
}
}
return false;
}
//检测当前用户是否有对栏目的增加,编辑,删除,审核,查看权限
function check_user_cat($action,$catid){
if(IS_ROOT){
return true;//管理员允许访问任何页面
}
$role=session("role");
if(strstr($role[$action],"|".$catid."|")){
return true;
}
return false;
}
/**
* 格式化字节大小
* @param number $size 字节数
* @param string $delimiter 数字和单位分隔符
* @return string 格式化后的带单位的大小
* @author 麦当苗儿
*/
function format_bytes($size, $delimiter = '') {
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
return round($size, 2) . $delimiter . $units[$i];
}
//
/**
* 数字转字母 (类似于Excel列标)
* @param Int $index 索引值
* @param Int $start 字母起始值
* @return String 返回字母
*/
function IntToChr($index, $start = 65) {
$str = '';
if (floor($index / 26) > 0) {
$str .= IntToChr(floor($index / 26)-1);
}
return $str . chr($index % 26 + $start);
}