Создание меню навигации по неупорядоченному списку более простым способом — Вопрос по украшению кода

#php #dynamic #menu #navigation

#php #динамический #меню #навигация

Вопрос:

Я написал динамическое меню на основе трех таблиц в БД, которое отражает структуру нижнего уровня:

 > Section
>> Categories
>>> Subcategory
  

Вот мой код:

 include("connDB.php");

echo '<ul>';
$q1 = mysql_query("SELECT * FROM section ORDER BY section_name ASC");

while($getSection = mysql_fetch_array($q1)) {
    echo "<li><a href='content.php?sec={$getSection['section_id']}amp;cat='>{$getSection['section_name']}</a>";

    $q2 = mysql_query("SELECT * FROM category WHERE section_id = '{$getSection['section_id']}'");
    if(mysql_num_rows($q2) > 0) {
        echo "<ul>";
        while($getCat = mysql_fetch_array($q2)) {
            echo "<li><a href='content.php?sec={$getSection['section_id']}amp;cat={$getCat['category_id']}amp;scat='>{$getCat['category_name']}</a>";

            $q3 = mysql_query("SELECT * FROM subcategory WHERE category_id = '{$getCat['category_id']}'");
            if(mysql_num_rows($q3) > 0) {
                echo "<ul>";
                while($getSubCat = mysql_fetch_array($q3)) {
                    echo "<li><a href='content.php?sec={$getSection['section_id']}amp;cat={$getCat['category_id']}amp;scat={$getSubCat['subcategory_id']}amp;getDetail='>{$getSubCat['subcategory_name']}</a></li>";
                }
                echo "</ul>";
                echo "</li>";
            }
        }
        echo "</ul>";
        echo "</li>";
    }
}
echo '</ul>';
  

Мне интересно, могу ли я найти какую-либо помощь, чтобы улучшить этот код базового уровня лучшим, более профессиональным способом?
Спасибо за помощь.

Ответ №1:

Взгляните на:

http://en.wikipedia.org/wiki/Nested_set_model

преобразуйте ваши три таблицы только в одну, затем измените вызов recurisve на один оператор sql и выполните небольшой цикл php для создания списка. 🙂

Комментарии:

1. Я думаю, что это также лучший способ, но не применимо к моему текущему проекту. В любом случае спасибо за совет.

Ответ №2:

Итак, я знаю, что это старый вопрос. Однако для любого, кто наткнется на это, есть решение. Он идентичен другому ответу, однако его также иногда называют Модифицированным обходом по предварительно упорядоченному дереву (MPTT)

Некоторые веб-фреймворки, такие как CakePHP и Django, имеют его встроенным и ссылаются на него как на «Дерево». Это значительно повысило бы гибкость вашего меню, а также сохранило бы порядок.