Почему одновременно подсвечены две вкладки главного меню?

Serebos

Новичок
Здравствуйте.
Создал хелпер для подстветки активной вкладки главного меню.

Код:
if(!function_exists('show_active_menu')) {
    function show_active_menu($slug) {

        $ci = & get_instance();

        $result = "";
// для главной страницы
        if($ci->uri->segment(1, 0) === $slug) {
           $result = "class='active'";
        }
// для фильмов/сериалов
        if($ci->uri->segment(3, 0) === $slug) {
           $result = "class='active'";
        }
// для рейтинга
        if($ci->uri->segment(2, 0) === $slug) {
           $result = "class='active'";
        }


        return $result;

    }
}
В "вид меню" добавил следующие записи
Код:
 <li <?php echo show_active_menu(0); ?> ><a href="/">Главная</a> </li>
                
                <li <?php echo show_active_menu('films'); ?>><a href="/movies/type/films/">Фильмы</a> </li>
                <li <?php echo show_active_menu('serials'); ?>> <a href="/movies/type/serials/">Сериалы</a> </li>
                <li <?php echo show_active_menu('rating'); ?>> <a href="/main/rating/">Рейтинг фильмов</a> </li>
                <li <?php echo show_active_menu('contact'); ?>> <a href="/">Контакты</a> </li>
Вкладка Главная, Фильмы и Сериалы подсвечены - если активны
такого вида
1482

Но, после открытия страницы Рейтинг подсвечиваются две вкладки
1483

Предполагаю, что причина вот в этой записи
Код:
if($ci->uri->segment(2, 0) === $slug)
Но, логически не могу понять причину!

Помогите, пожалуйста, разобраться в ситуации!

СПАСИБО!
 

Serebos

Новичок
При нажатии на рейтинг, вызов show_active_menu('rating') возвращает значение class='active', но также и show_active_menu(0) возвращает значение class='active'

т.е.
Код:
              <ul class="nav nav-pills">
                <li class='active' ><a href="/">Главная</a> </li>
                
                <li ><a href="/movies/type/films/">Фильмы</a> </li>
                <li > <a href="/movies/type/serials/">Сериалы</a> </li>
                <li class='active'> <a href="/main/rating/">Рейтинг фильмов</a> </li>
                <li > <a href="/">Контакты</a> </li>

              </ul>
Попытка задать проверку для главной страницы и рейтинга ни к чему не привела
Код:
// для главной страницы
        if($ci->uri->segment(1, 0) === $slug && $ci->uri->segment(2, 0) !== 'rating') {
           $result = "class='active'";
        }
        
// для рейтинга
 if($ci->uri->segment(2, 0) === $slug && $ci->uri->segment(1, 0) !== '/') {
           $result = "class='active'";
        }
Каким образом можно устранить присвоение class active для вкладки "Главная" в момент открытия страницы "Рейтинг"??
СПАСИБО!
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Посмотреть почему у тебя неверно срабатывает условие. Это называется отладка, за тебя ею никто заниматься не станет.
 

Serebos

Новичок
c0dex, спасибо. Это нужно настроить xdebuger? Я пытался его настроить как-то, два дня ушло, не заработало как следует! В саблайме работаю, но устанавливал phpstorm.
Есть ли какие альтернативы?
 

Фанат

oncle terrible
Команда форума
отладка - это проверка значений переменных на разных этапах выполнения программы.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну дебаж через var_dump
 

WMix

герр M:)ller
Партнер клуба
если $ci->uri->segment(...) этот метод, то боюсь ты все не правильно понял, и количество параметров отличается, и логика странная
и зачем тут амперсанд?

При нажатии на рейтинг, вызов show_active_menu('rating') возвращает значение class='active', но также и show_active_menu(0) возвращает значение class='active'
да, что вернет $ci->uri->segment(3, 0) для /main/rating/?
 

WMix

герр M:)ller
Партнер клуба
ничего не вернет! rating имеет значение (2, 0)
не знаю что ты там себе придумал "имеет значение (2, 0)",
что вернет $ci->uri->segment(3, 0) для /main/rating/ и чему равно show_active_menu(0) при "/main/rating/" в $ci->uri->segment(3, 0)?

The optional second parameter ... allows you to set the return value of this method when the requested URI segment is missing.
теперь вообще без вопросов
 
Последнее редактирование:

Serebos

Новичок
этот комментарий "The optional second parameter ... allows you to set the return value of this method when the requested URI segment is missing. " только сейчас увидел.
Ноль будет всегда, если сегмент отсутствует.
 

WMix

герр M:)ller
Партнер клуба
твоя функция никуда не годится, show_active_menu('films'); будет возвращать "актив" если в любом из /x/y/z ,будет слово "films"
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
твоя функция никуда не годится, show_active_menu('films'); будет возвращать "актив" если в любом из /x/y/z ,будет слово "films"
Да не его это код, это кусок говна из курсов. Курсов, где человек вообще не одупляет что он делает и зачем.
 
Сверху