Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Помогите с меню
http://forum.kohanaframework.su/viewtopic.php?f=31&t=696
Страница 1 из 2

Автор:  sasha2020 [ 05 июл 2013, 18:27 ]
Заголовок сообщения:  Помогите с меню

Делаю горизонтальное выпадающее меню.Вот Html

Код:
<ul>       <li class="item root" >
                                    <a class="orphan item bullet" href="/"  >
                    <span>
                                        Главная                                                            </span>
                                    </a>

                                </li>
                                <li class="item root" >
                                    <a class="daddy item bullet" href="/items"  >
                    <span>
                                        Продукция                                                        </span>
                                    </a>


                                </li>
                                <li class="item parent root" >
                                    <a class="daddy item bullet" href="#"  >
                    <span>
                                        Каталог                                                            </span>
                                    </a>

                                    <div class="fusion-submenu-wrapper level2" style="width:180px;">

                                        <ul class="level2" style="width:180px;">

                                            <li class="item183" >
                                                <a class="orphan item bullet" href="#"  >
                    <span>
                                        Монтаж                                                            </span>
                                                </a>

                                            </li>
                                            <li class="item184" >
                                                <a class="orphan item bullet" href="#"  >
                    <span>
                                        Дизайн и проектирование                                                            </span>
                                                </a>

                                            </li>
                                            <li class="item185" >
                                                <a class="orphan item bullet" href="/gallery"  >
                    <span>
                                        Галерея                                                           </span>
                                                </a>

                                            </li>

                                            <li class="item186" >
                                                <a class="orphan item bullet" href="#"  >
                    <span>
                                        Проекты                                                            </span>
                                                </a>

                                            </li>
                                        </ul>

                                        <div class="drop-bot"></div>
                                    </div>
                                </li>
                                <li class="item root" >
                                    <a class="orphan item bullet" href="/news_all"  >
                    <span>
                                        Новости                                                            </span>
                                    </a>

                                </li>
                                <li class="item parent root" >
                                    <a class="daddy item bullet" href="#"  >
                    <span>
                                        Проекты                                                           </span>
                                    </a>

                                    <div class="fusion-submenu-wrapper level2" style="width:180px;">

                                        <ul class="level2" style="width:180px;">
                                            <li class="item188" >
                                                <a class="orphan item bullet" href="#"  >
                    <span>
                                         Типовые проекты                                                            </span>
                                                </a>

                                            </li>
                                            <li class="item189" >
                                                <a class="orphan item bullet" href="#"  >
                    <span>
                                        Реализованные проекты                                                            </span>
                                                </a>

                                            </li>



</ul>






Вот к чему продвинулся

Код:
 <?php 
                                foreach ($menu as $item)
                                {
                                    if ($item['parent_id'] == 0)
                                    {
                 echo '<li class="item root"><a class="orphan item bullet" href="#"><span>' . $item['category'] . '</span></a></li>'."\n";

                   echo '<div class="fusion-submenu-wrapper level2" style="width:180px;"><ul>'."\n";

                                        foreach ($menu as $parent_item)
                                        {
                                            if ($parent_item['parent_id'] == $item['id'])
                                            {
             echo '<li class="item123'"><a class="orphan item bullet" href="#"><span>' . HTML::anchor(URL::site( $parent_item['id']), $parent_item['category']) . '</span></a></li>'."\n";

                                            }

                                        }
                                        echo '</ul></div>'."\n";
                                    }
                                }
                                ?>




Проблема в том что если элемент меню li имеет вложенности (тоесть parent_id==id) ему надо присвоить class="item parent root" а если нет class="item root".Помогите решить

Автор:  WinterSilence [ 05 июл 2013, 18:41 ]
Заголовок сообщения:  Re: Помогите с меню

на гитхабе есть готовый модуль меню

Автор:  sasha2020 [ 05 июл 2013, 18:48 ]
Заголовок сообщения:  Re: Помогите с меню

Готовый это очень хорошо!)))Но уже почти сам сделал,тем более это же просто меню

Автор:  WinterSilence [ 05 июл 2013, 18:59 ]
Заголовок сообщения:  Re: Помогите с меню

вообще для меню обычно рекурсивный метод используют если не nested tree используется, но если меню строго 2х уровневое, то пойдет и так.
а в чем именно трудность возникает?
вроде все просто
Код:
echo ($item['parent_id'] == 0 ? 'class="item parent root"' : 'class="item root"') 

или я что-то упускаю?

Автор:  sasha2020 [ 05 июл 2013, 23:08 ]
Заголовок сообщения:  Re: Помогите с меню

Не все так просто))) class= item parent root приделяется только тем parent_id=0 у которых есть вложеность. Например первая ссылка - "Home", она не имеет вложености ей приделяется class="item root" но она же тоже parent_id=0.

Автор:  WinterSilence [ 05 июл 2013, 23:32 ]
Заголовок сообщения:  Re: Помогите с меню

если я все верно понял, то если это объекты, то преобразуйте в массив вначале(в случае с orm методом as_array), а потом пройдитесь циклом for и проверяйте следующий элемент( т.е. i текущий i+1 следующий). но вообще изврат какой-то имхо, я обычно в таблицу категорий товаров (я интернет-магазинами в основном занимаюсь) добавляю поле в котором хранится кол-во под категорий, чтобы каждый раз его не считать. либо как вариант можно кешировать данное значение, тогда и заморочек таких в циклах не будет

Автор:  sasha2020 [ 05 июл 2013, 23:53 ]
Заголовок сообщения:  Re: Помогите с меню

Таблица обычная id, parent_id,category. for вообще не использую в модели получаю массив передаю в вид а дальше вы видели.Вот весь код

print_r ($menu)

Array
(
[0] => Array
(
[category] => Главная
[parent_id] => 0
[id] => 4
)

[1] => Array
(
[category] => Продукция
[parent_id] => 0
[id] => 5
)

[2] => Array
(
[category] => Каталог
[parent_id] => 0
[id] => 6
)

[3] => Array
(
[category] => Монтаж
[parent_id] => 6
[id] => 7
)

[4] => Array
(
[category] => Дизайн и проектирование
[parent_id] => 6
[id] => 8
)

[5] => Array
(
[category] => Галерея
[parent_id] => 6
[id] => 9
)

[6] => Array
(
[category] => Проекты
[parent_id] => 6
[id] => 10
)

[7] => Array
(
[category] => Новости
[parent_id] => 0
[id] => 11
)

[8] => Array
(
[category] => Проекты
[parent_id] => 0
[id] => 12
)

[9] => Array
(
[category] => Типовые проекты
[parent_id] => 12
[id] => 13
)

[10] => Array
(
[category] => Реализованные проекты
[parent_id] => 12
[id] => 14
)

[11] => Array
(
[category] => Полезные материалы
[parent_id] => 0
[id] => 15
)

[12] => Array
(
[category] => Презентации
[parent_id] => 15
[id] => 16
)

[13] => Array
(
[category] => Cтатьи
[parent_id] => 15
[id] => 17
)

[14] => Array
(
[category] => Инструкции
[parent_id] => 15
[id] => 18
)

[15] => Array
(
[category] => Буклеты
[parent_id] => 15
[id] => 19
)

[16] => Array
(
[category] => Сертификаты
[parent_id] => 15
[id] => 20
)

[17] => Array
(
[category] => Видео
[parent_id] => 15
[id] => 21
)

[18] => Array
(
[category] => Контакты
[parent_id] => 0
[id] => 22
)

)

Автор:  WinterSilence [ 06 июл 2013, 00:06 ]
Заголовок сообщения:  Re: Помогите с меню

я про Вид и говорю, что-то вроде того:
Код:
for($i=0;$i<count($categories); $i++)
{
if($categories[$i+1][parent] == $categories[$i][id])
{
// есть потомки
}
else
{
// нет потомков
}
}

Автор:  Sergey [ 06 июл 2013, 12:33 ]
Заголовок сообщения:  Re: Помогите с меню

WinterSilence писал(а):
преобразуйте в массив вначале(в случае с orm методом as_array), а потом пройдитесь циклом for

Очень оригинально

Автор:  WinterSilence [ 06 июл 2013, 18:50 ]
Заголовок сообщения:  Re: Помогите с меню

Sergey чего не так то?

Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/