Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация кода 
:(
    Опции темы
Assessor
Дата 28.9.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 6.2.2008
Где: Пермь

Репутация: нет
Всего: 1



Добрый день.
С точки зрения работоспособности работает на ура, строит правильные списки <ul><li>, нареканий нет, но такое ощущение, что я перемудрил, и есть гораздо проще решение, поэтому прошу взглянуть трезвым взглядом. Во первых не нравиться запрос в цикле, он и больше всех и раздражает.... Во вторых, просто не нравиться, громоздко слишком.

Таблицы
// NESTED SETS (категории)
| id | parent_id | name | tree_left | tree_right | tree_level |
// Страницы
| id | cat_id | name | sort | 

Код

function ISMmenu()
{
    global $dbInit, $settings_table;

    $retMenu    = '';
    $menu        = '';

    // Считываем какое меню у нас установлено
    $query_menu = "
            SELECT pos_menu
                FROM " . $settings_table['settings_menu'] . "
                ORDER BY    id
                LIMIT        1
                ";
    if ($row_menu = $dbInit -> get_row($query_menu))
    {
        $current_level = 0;

        $pos_menu        = $row_menu -> pos_menu;

        $query_cat = "
                SELECT *
                    FROM " . $settings_table['page_cat'] . "
                    ORDER BY        parent_id, tree_left
                    ";
        if ($rows_pageCat = $dbInit -> get_results($query_cat))
        {
            $retMenu .= '<ul id = "navDropTopMenu">';

            foreach ($rows_pageCat as $row_pageCat)
            {
                $cat_id        = intval($row_pageCat -> id);
                $cat_name    = '<a href = "">' . htmlspecialchars_decode($row_pageCat -> name) . '&nbsp;»</a>';
                $tree_left    = intval($row_pageCat -> tree_left);
                $tree_right    = intval($row_pageCat -> tree_right);
                $tree_level    = intval($row_pageCat -> tree_level);

                if ($tree_level === $current_level)
                {
                    $retMenu .= '<li>' . $cat_name;
                }
                else if ($tree_level > $current_level)
                {
                    $retMenu .= '<ul><li>' . $cat_name;
                    $current_level++;
                }


                $query_page = "
                        SELECT id, link, name
                            FROM " . $settings_table['pages'] . "
                            WHERE        approved        = 'Yes'
                            AND            cat_id            = " . $cat_id . "
                            ORDER BY    sort
                            ";
                if ($rows_page = $dbInit -> get_results($query_page))
                {
                    if ($tree_level === $current_level)
                    {
                        $retMenu .= '<ul>';
                    }

                    foreach ($rows_page as $row_page)
                    {
                        $id            = intval($row_page -> id);
                        $name        = htmlspecialchars_decode($row_page -> name);

                        if ($tree_level < $current_level)
                        {
                            $menu = '<ul><li><a href = "#">' . $name . '</a></li></ul>';
                        }
                        else
                        {
                            $retMenu .= '<li><a href = "#">' . $name . '</a></li>';
                        }
                    }

                    if ($tree_level === $current_level)
                    {
                        $retMenu .= '</ul>';
                    }
                }

                if ($tree_level === $current_level && $tree_right - $tree_left === 1)
                {
                    $retMenu .= '</li>';
                }
                else if ($tree_level < $current_level)
                {
                    $retMenu .= '</ul></li><li>' . $cat_name . $menu . '</li>';
                    $current_level--;
                }
            }

            $retMenu .= '</ul>';
        }
    }
    else
    {
        return LANG_ERROR_NOMENUPOS;
    }

    return $retMenu;
}

PM MAIL WWW ICQ   Вверх
SelenIT
Дата 28.9.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Assessor, ну если уж вам как автору код кажется громоздким (и не зря;), то человеку со стороны вникать в него и разбираться, что вы хотели сделать всеми этими маневрами... Это многоуровневое выпадающее меню, я верно понял?

Цитата(Assessor @  28.9.2008,  13:11 Найти цитируемый пост)
// NESTED SETS (категории)

Это не чистые Nested Sets, это гибрид из них и списков смежности. Причем, по беглому взгляду на код, главное преимущество вложенных множеств (возможность легко взять поддерево любого элемента одним запросом) как раз и не используется ;). Неплохая подборка про Nested Sets и вообще про деревья в БД есть на PHPclub'е.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0644 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.