Новичок
Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
|
Есть рекурсивная функция, которая строит меню из базы. В базе все свалено в одну таблицу, где наследование родитель-потомок осуществляется по столбцам parent и id
Функция просто проходит по все пунктам и составляет многомерный массив. Но мне понадобилось что бы он еще и строил правильные ссылки, с вложенностью. В базе они находятся только со своим кейвордом (выборка идет по нему).
PHP:
скопировать код в буфер обмена
function getBrothers ($id, $uri, $path="", $level=0 , $items=array()) { $qGetItem = "SELECT name, keyword, id FROM ".$this->db->dbprefix('content')." where visible=1 and parent=?"; $res = $this->db->query($qGetItem, array($id)); $out = $res->result_array(); return false; } else { foreach ($out as $index => $row) { $path = $path."/".$row['keyword']; $out[$index]['link'] = $path; //составляем, правильный, сегментированный uri if (in_array($row['keyword'], $uri)) $out[$index]['act'] = true; else $out[$index]['act'] = false; //делаем подсветку активных пунктов в меню $out[$index]['childs'] = $this->getBrothers($row['id'], $uri, $path, $level, $items)) //детишки } } return $out; }
Вот строке 16, где комментарий "составляем правильный регламентированный ури" и есть интересующая меня часть кода.
Я хочу чтоб из тех кейвордов что берутся из базы состовлялось что то вроде level/sublevel1/sublevel2/ и т.д. где каждый сегмент это keyword отдельного пункта.
Они должны наращиваться по мере углубления вовнутрь. Но при моей реализации они наращиваются не только в глуб, но и в ширь, т.е. добавляются кейворды братьев, т.е. при каждом запуске рекурсии...
Вот я никак не могу додуматься как сделать так, что бы функция понимала что она сейчас находится на одном уровне, и добавляла сегменты только при переходе к следующему вложенному сегменту.
Я уже пытался сделать путем ввода счетчика, (в параметрах функции осталась переменная level), но счетчик так же увеличивается при каждом запуске рекурсии, и как ограничить область видимости я так и не додумался.
|