[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод меню категорий YII
lodas
Здравствуйте. Тут вопрос для знатоков, ибо достаточно непростой.
Итак, по делу: работаю над собственным виджетом категорий. Запросом из бд получаю все записи в массив $categ. Рекурсивно строю с помощью функции дерево, все правильно выводит. Но не могу разобраться как мне сделать чтобы сами категории выводились в <li>категория1</li> а вложенные в во внутри него так: <ul><li>подкатегория</li></ul> ?
//рекурсивная функция вывода категорий
function tree($categ, $id_kat=NULL)
{
    foreach($categ as $item)
    {
    if($id_kat!=$item->id_parent) 
        continue;
    
 if(isset($item->naz_kat))
 
    echo CHtml::label($item->naz_kat,null);
    
    $return= tree($categ, $item->id_kat);//вывод вложенных записей
    }
 
return $return;
} 

Для наглядности что должно получиться в конце прилагаю рисунок ниже. Возможно ли такое?
bestxp
посмотри как устроено zii.widgets.CMenu
lodas
bestxp, посмотрел. Но ничего не понял, мне бы поподробнее подсказать как это реализовать?
bestxp
а что там не понятного?))))
там вроде как проще некуда))

там ничем не отличается генерация от где либо еще) + рекурсия если у тебя есть вложенные пункты
lodas
bestxp, но вот, я делал с рекурсией- все он выводит. но как мне в моем коде различить что я вывожу в текущий момент саму категорию или подкатегорию?
//рекурсивная функция вывода категорий
function tree($categ, $id_kat=NULL)
{
foreach($categ as $item)
{
if($id_kat!=$item->id_parent)
continue;

if(isset($item->naz_kat))
/*!!!Вот здесь эхом у меня вы водиться и категории и подкатегории. Как различить что я вывожу из этих двух в данный момент?*/
echo CHtml::label($item->naz_kat,null);

$return= tree($categ, $item->id_kat);//вывод вложенных записей
}

return $return;
}
dr.nomore
Надо масссив смотреть.

bestxp
ну пример вот тебе простой на коленке

//Первое готовим список меню
//допустим у нас такая структура
/*
* id = id категории
* title = название категории
* parent_id = категория родитель
*
*/


$categoryList = [
[
'id' => 1, 'title' => 'категория 1', 'parent_id' => 0],
[
'id' => 2, 'title' => 'категория 2', 'parent_id' => 0],
[
'id' => 3, 'title' => 'категория 1.1', 'parent_id' => 1],
[
'id' => 4, 'title' => 'категория 1.2', 'parent_id' => 1],
[
'id' => 5, 'title' => 'категория 2.1', 'parent_id' => 2],
];


//Сделаем удобный массив для вывода

$items = [];

foreach ($categoryList as $cat) {
$items[$row['parent_id']][] = $row;
}

function tree($items, $level = 0)
{
$html = '';

if (isset($items[$level]) && is_array($items[$level])) {
$html .= '<ul>';

foreach ($items[$level] as $item) {
$html .= '<li>' . $item['title'] . '</li>' . tree($items, $item['id']);
}
$html .= '</ul>';
}

return $html;
}
//вызов
tree($items);



синтаксис 5.4 а дальше сам доработай и переделывай
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.