Вход Регистрация
Файл: sys/inc/classes/class.Nav_Menu.php
Строк: 83
<?php 

class Nav_Menu
{
    
/**
    * Формирует HTML код елеманта меню с подменю
    * $elem:access - Уровень доступа к элементу меню
    * 
    * @return string
    */ 
    
public function elem_wrap($elem$args$depth
    {
        
$classes = array();
        
$classes[] = 'submenu'
        
        
$submenu sprintf($args['wrap_submenu'],
            
join(' '$classes), 
            
$this->walk($elem['children'], $args$depth 1), 
        ); 
        
        
$classes = array();
        
$classes[] = 'menu-item'
        
        if (
$submenu) {
            
$classes[] = 'has-children'
        }
        
        
$output sprintf($args['wrap_item'], 
            
join(' '$classes), 
            
$this->elem_link($elem$args$depth),
            (!empty(
$submenu) ? $submenu ''),
        ); 

        return 
$output
    }

    
/**
    * Формирует HTML код контейнера елеманта меню 
    * $elem:access - Уровень доступа к элементу меню
    *
    * @return string
    */ 
    
public function elem_item($elem$args$depth
    {
        
$classes = array();
        
$classes[] = 'menu-item'

        
$output sprintf($args['wrap_item'], 
            
join(' '$classes), 
            
$this->elem_link($elem$args$depth),
            
'',
        ); 

        return 
$output;  
    }

    
/**
    * Формирует HTML код ссылки елеманта меню 
    * $elem:title  - Заголовок ссылки 
    * $elem:url    - URL ссылки 
    * $elem:rel    - Атрибут rel 
    *
    * @return string
    */ 
    
public function elem_link($elem$args$depth
    {
        
$attr = array(); 
        if (
$elem['url']) {
            
$attr['href'] = get_site_url($elem['url']); 
        }

        if (!empty(
$elem['rel'])) {
            
$attr['rel'] = $elem['rel']; 
        }

        foreach(
$attr AS $k => $v) {
            
$attr[$k] = $k '="' $v '"'
        }

        
$output '<a ' join(' '$attr) . '>' $elem['title'] . '</a>';
        return 
$output
    }

    
/**
    * Создает древовидное меню 
    * @return string
    */ 
    
public function walk($elems$args$depth 1
    {
        
$default = array(
            
'title' => ''
            
'url'   => ''
        ); 

        foreach(
$elems AS $elem
        {
            
$elem array_replace($default$elem); 

            if (isset(
$elem['children'])) {
                
$html_item $this->elem_wrap($elem$args$depth); 
            } else {
                
$html_item $this->elem_item($elem$args$depth);  
            }

            
$output[] = $html_item;
        }

        return 
join(''$output);
    }

    
/**
    * Выводит или возвращает сформированый HTML код меню
    * @return string
    */ 
    
public function display($elems$args
    {
        
// HTML код меню 
        
$output $this->walk($elems$args); 

        
// Классы меню родительского меню
        
if (empty($args['container_class'])) {
            
$classes = array(); 
            
$classes[] = 'menu'

            if (
$args['location']) {
                
$classes[] = 'menu-' $args['location']; 
            }    
            
            
$container_class use_filters('ds_nav_menu_container_class'join(' '$classes));         
        } else {
            
$container_class use_filters('ds_nav_menu_container_class'$args['container_class']); 
        }

        
// ID контейнера меню 
        
$container_id = (!empty($args['container_id']) ? $args['container_id'] : 'menu_' $args['location']); 

        
// Выводим отформатированый HTML код меню
        
echo sprintf($args['wrap_menu'],
            
$container_id
            
$container_class
            
$output
        ); 
    }
}
Онлайн: 1
Реклама