У меня есть база данных, которая хранит иерархию продуктов.
Category(id_cat,name_cat);
his_low_cat(id_cat,id_low_cat);
Категория может иметь 0..на низкую категорию. Если бы не было более низкой категории, я делаю id_cat,-1
поле в his_low_cat
,
Я не знаю, возможно ли это, но я хотел бы показать это в виде «выпадающего меню» (если у вас есть какие-либо идеи о том, как показать полную иерархию, предложите это)
Как это :
echo " <div id=\"menu\">
<ul class=\"niveau1\">
<li class=\"sousmenu\"><a href=\"Food\">Food</a>
<ul class=\"niveau2\">
<li class=\"sousmenu\"><a href=\"Sous menu 1.1\">Sous menu 1.1</a>
<ul class=\"niveau3\">
<li><a href=\"Sous sous menu 1.1.1\">Sous sous menu 1.1.1</a></li>
</ul>
</li>
<li><a href=\"Sous menu 1.2\">Sous menu 1.2</a></li>
</ul>
</li>
</ul>
</div>";
Моя первая кошка — «еда», а затем она делится на 4 категории понижения, которые делятся на более.
Проблема в том, что оно должно быть динамическим и загружать поле из моей базы данных.
Цель будет состоять в том, чтобы иметь возможность отловить нажатое значение и использовать его в другом .php
Как бы я это сделал?
Определенно, рекурсия — это путь решения этой проблемы, я написал это решение:
<?php
function nestElements($elements, $depth=0)
{
foreach($elements as $elementName=>$element)
{
echo str_repeat("\t", $depth).'<ul class="niveau'.($depth+1).'">'."\n";
if(is_array($element))
{
echo str_repeat("\t", $depth+1)."<li class=\"sousmenu\"><a href=\"${elementName}\">${elementName}</a>\n";
nestElements($element, $depth+2);
echo str_repeat("\t", $depth+1)."</li>\n";
}
else
{
echo str_repeat("\t", $depth+1)."<li class=\"sousmenu\"><a href=\"${element}\">${elementName}</a></li>\n";
}
echo str_repeat("\t", $depth)."</ul>\n";
}
}
nestElements(array("Food"=>array("Meat"=>array("Poultry"=>array("Chicken"=>"Meat/Poultry/Chicken"), "Beef"=>array("Hamburgers"=>"Meat/Beef/Hamburgers", "Steak"=>"Meat/Beef/Steak")), "Dairy"=>array("Cow"=>"Dairy/Cow", "Sheep"=>"Dairy/Sheep")), "name"=>"url"));
?>
Тестирование с этим:
<?php
nestElements(array("Food"=>array("Meat"=>array("Poultry"=>array("Chicken"=>"Meat/Poultry/Chicken"), "Beef"=>array("Hamburgers"=>"Meat/Beef/Hamburgers", "Steak"=>"Meat/Beef/Steak")), "Dairy"=>array("Cow"=>"Dairy/Cow", "Sheep"=>"Dairy/Sheep")), "name"=>"url"));
?>
Результаты в:
<ul class="niveau1">
<li class="sousmenu"><a href="Food">Food</a></li>
<ul class="niveau2">
<li class="sousmenu"><a href="Meat">Meat</a></li>
<ul class="niveau3">
<li class="sousmenu"><a href="Poultry">Poultry</a></li>
<ul class="niveau4">
<li class="sousmenu"><a href="Meat/Poultry/Chicken">Chicken</a></li>
</ul>
</ul>
<ul class="niveau3">
<li class="sousmenu"><a href="Beef">Beef</a></li>
<ul class="niveau4">
<li class="sousmenu"><a href="Meat/Beef/Hamburgers">Hamburgers</a></li>
</ul>
<ul class="niveau4">
<li class="sousmenu"><a href="Meat/Beef/Steak">Steak</a></li>
</ul>
</ul>
</ul>
<ul class="niveau2">
<li class="sousmenu"><a href="Dairy">Dairy</a></li>
<ul class="niveau3">
<li class="sousmenu"><a href="Dairy/Cow">Cow</a></li>
</ul>
<ul class="niveau3">
<li class="sousmenu"><a href="Dairy/Sheep">Sheep</a></li>
</ul>
</ul>
</ul>
<ul class="niveau1">
<li class="sousmenu"><a href="url">name</a></li>
</ul>
Чтобы разобрать его, вам нужно создать mod_rewrite, который перенаправляет на index.php? R = TheURL и из их, взорвать параметр r, используя «/» в качестве разделителя, затем у вас есть список меню и подменю, по которым щелкнула ссылка был из. При добавлении другого параметра URL-адрес может быть создан автоматически.
Редактировать: Исправлена проблема с исходным кодом, показанным ниже
<li class="sousmenu"><a href="Sheep">Sheep</a></li>
<li class="sousmenu"><a href="Dairy/Sheep">Sheep</a></li>
Чтобы сгенерировать массив:
<?php
function genArray(&$targetArray, $parentID=null){
$res=(is_null($parentID))?mysql_query("SELECT * FROM categorie WHERE id_cat NOT IN (SELECT id_low_cat FROM hislowcat) ORDER BY id_cat DESC;"):mysql_query("SELECT *, (SELECT name_cat FROM categorie WHERE id_cat= '".$parentID ."') AS name_cat FROM hislowcat WHERE id_cat= '" .$parentID ."'");
if(!is_null($parentID) && !mysql_num_rows($res))
{
$res3=mysql_query("SELECT name_cat FROM categorie WHERE id_cat='${parentID}';");
$row3=mysql_fetch_array($res3);
$targetArray[$row3['name_cat']]=$row3['name_cat'];
return;
}
while(($row=mysql_fetch_array($res)))
{
//echo $row->name_cat;
if(is_null($parentID))
{
if(!isset($targetArray[$row['name_cat']]))
{
$targetArray[$row['name_cat']]=array();
}
genArray($targetArray[$row['name_cat']], $row['id_cat']);
}
else
{
genArray($targetArray[$row['name_cat']], $row['id_low_cat']);
}
}
}
$array=array();
genArray($array);
print_r($array);
?>
Обратите внимание, как $ targetArray настроен как ссылка, так что мы можем рассматривать его одномерно.
Других решений пока нет …