Функция для генерации меню primary_links

Прислано: zaartix

чт, 30/08/2007 - 13:05

Другие статьи по теме:

Функция возвращает хтмл код меню primary links, меню развернуто на 2 уровня, отмечены активные пункты.

На входе функция принимимает массив из 4 элементов, пр помощи которых будет генерироваться меню.

<?php
function gen_menu($template = array('ul','class','menu','li'))
{
    
$current_mid menu_get_active_item();
    
$sql "SELECT p.mid AS p_mid, p.title AS p_title, p.path AS p_path, c.mid AS c_mid, c.title AS c_title, c.path AS c_path
                    FROM menu AS root
                    LEFT JOIN menu AS p ON p.pid = root.mid
                    LEFT JOIN menu AS c ON c.pid = p.mid
                WHERE root.pid =0
                ORDER BY root.pid, p.pid, p.weight, c.pid, c.weight"
;
        
$queryResult db_query($sql);
        
$p_mid 0;
        while (
$m db_fetch_object($queryResult)) {
            
$c_mid $m->c_mid;
            if (
$m->p_mid!=$p_mid) {
                
$p_mid $m->p_mid;
                
$array[$p_mid]['title'] = $m->p_title;
                
$array[$p_mid]['href'] = $m->p_path;
            }
            if (
$c_mid) {
                
$array[$p_mid]['childs'][$c_mid]['title'] = $m->c_title;
                
$array[$p_mid]['childs'][$c_mid]['href'] = $m->c_path;
                if (
$current_mid==$c_mid) {
                    
$array[$p_mid]['childs'][$c_mid]['active'] = true;
                    
$array[$p_mid]['active'] = true;
                }
            }
        }
        
$return '';
        foreach (
$array as $k=>$v) {
            
$return.="<{$template[0]} {$template[1]}=\"{$template[2]}\">";
            
$active $v['active'] ? 'class="active"' '';
            
$return.="<{$template[3]}><A HREF=\"/{$v['href']}\" $active>{$v['title']}</A></{$template[3]}>";
            if (
sizeof($v['childs'])) {
                
$return.="<{$template[0]}>";
                foreach (
$v['childs'] as $v1) {
                    
$active $v1['active'] ? 'class="active"' '';
                    
$return.="<{$template[3]}><A HREF=\"/{$v1['href']}\" $active>{$v1['title']}</A></{$template[3]}>";
                }
                
$return.="</{$template[0]}>";
            }
            
$return.="</{$template[0]}>";
        }
        return 
$return;
}
?>

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано edhel в чт, 30/08/2007 - 17:57.

"A" и "HREF" пишутся маленькими буквами) и вообще функция l() не зря людям дана)


Ссылки партнёров