Slam
Новичок
Создание динамического меню...
Создание динамического меню...
Здравствуйте ув. Программеры.
Помогите, пожалуйста, с одной проблемой.
Итак, есть таблица в которой хранятся пункты меню.
По данным таблицы необходимо построить меню.
Меню строится на основе списка (<ul></ul>).
Например, вот что нужно получить в итоге обработки таблицы.
То есть, обычный список, и каждый дочерний пункт меню идет как вложенный список.
В таблице, пункт, который не имеет родительских пунктов в поле ‘c_parent_id’ содержит 0, а дочерние – на оборот содержат id своих родительских пунктов, то есть тех к которым принадлежат.
Я написал вот такой код для обработки таблицы, но в результате получаю только один пункт вместо всех которые удовлетворяют условию.
В результате, я хочу получить массив такого типа
[Parent_menu1_id]
[child1_item_id]
[child2_item_id]
[child3_item_id]
[Parent_menu2_id]
[child1_item_id]
[child2_item_id]
[child3_item_id]
И после этого обработать его и вывести меню.
Помогите, пожалуйста, разобраться, что я делаю не так при разборе таблицы.
Заранее благодарю, с уважением Slam.
Создание динамического меню...
Здравствуйте ув. Программеры.
Помогите, пожалуйста, с одной проблемой.
Итак, есть таблица в которой хранятся пункты меню.
PHP:
TABLE `tbl_cats` (
`c_id` int(11) NOT NULL auto_increment, /* id */
`c_name` varchar(50) NOT NULL default '', /*имя пункта меню*/
`c_parent_id` int(11) default NULL, /* id родительского пункта меню */
`c_order` tinyint(11) NOT NULL default '0',/* порядок отображения пунктов меню */
`c_enable` enum('Y','N') NOT NULL default 'N',
PRIMARY KEY (`c_id`)
)
Меню строится на основе списка (<ul></ul>).
Например, вот что нужно получить в итоге обработки таблицы.
PHP:
<ul id="bars">
<li><a class="t0" href="#">Software</a>
<ul style="height: auto;" class="">
<li><a href="http://www.some.com/au/macosx/">Mac OS Tiger</a></li>
<li><a href="http://www.some.com/au/">Final Cut Studio</a></li>
<li><a href="http://www.some.com/au/aperture/">Aperture</a></li>
<li><a href="http://www.some.com/au/ilife/">iLife 05</a></li>
<li><a href="http://www.some.com/au/iwork/">iWork 05</a></li>
</ul>
</li>
<li><a class="t0" href="#">Desktops</a>
<ul style="height: auto;" class="">
<li><a href="http://www.some.com/au/macmini/">Mac mini</a></li>
<li><a href="http://www.some.com/au/imac/">iMac</a></li>
<li><a href="http://www.some.com/au/powermac/">Power Mac</a></li>
</ul>
</li>
</ul>
В таблице, пункт, который не имеет родительских пунктов в поле ‘c_parent_id’ содержит 0, а дочерние – на оборот содержат id своих родительских пунктов, то есть тех к которым принадлежат.
Я написал вот такой код для обработки таблицы, но в результате получаю только один пункт вместо всех которые удовлетворяют условию.
PHP:
$i = 0;
$j = 0;
// Перебираем все елементы массива в цикле
while (list($id_cat, $name_cat, $parent_cat) = mysql_fetch_row($this->sql_res))
{
$category_id = $id_cat;
// I. Проверка является ли рубрика дочерней
if ( $parent_cat == 0 )
{
// Если нет (то есть, рубрика родительская)
// - сохраняем информацию о категории в массив
$arr = array($category_id=>array($i=>0));
$i = 0; // зануляем счетчик
// Ищем рубрики у которых parent_id такой как у текущей - id
while (list($id, , $parent_id) = mysql_fetch_row($this->sql_res))
{
if ($parent_id == $category_id)
{
echo $category_id;
// Эта рубрика дочерняя по отношению к текущей
$arr = array($parent_id => array($j => $id));
$j++;
}
}
}
else // Рубрика является дочерней
{
// Проверка, не занесена ли рубрика уже в массив
// Перебор уже имеющихся в новом массиве рубрик
while (list($parent_id, $child_id) = $arr)
{
// Не занесена ли рубрика уже в массив
if ($child_id != $category_id)
{
// Нет, не занесена
// тогда добавляем елемент в массив
$arr = array($parent_id => array($j => $category_id));
$j++;
}
}
}
[Parent_menu1_id]
[child1_item_id]
[child2_item_id]
[child3_item_id]
[Parent_menu2_id]
[child1_item_id]
[child2_item_id]
[child3_item_id]
И после этого обработать его и вывести меню.
Помогите, пожалуйста, разобраться, что я делаю не так при разборе таблицы.
Заранее благодарю, с уважением Slam.