У меня также была такая же проблема, когда я создавал веб-сайт клиента в Cakephp, передавая эти строки для каждого элемента меню из контроллера для просмотра, а затем снова проверяя, чтобы реализовать выделение, утомительно, мягко говоря.
Для некоторых моих проектов сейчас я реализую то же самое, храня информацию о странице для каждой из страниц меню навигации в базе данных, такие как имя страницы, URL, заголовок, положение в меню навигации и т. Д.
Затем при запуске контроллера я храню все эти данные в массиве, скажем $pageinfo
.
Я управляю функциями навигации с помощью одного контроллера, который проверяет сегмент URI и загружает содержимое на его основе.
Подсвечивающая часть оставляется для оператора if при генерации представления, где я сравниваю каждое имя страницы с информацией, которую я сбросил в $pageinfo
.
Как то так ...
foreach ($navi_menu as $links) {
if ( $links['title'] == $pageinfo['title'] ) {
// Highlight here
}
else {
// No highlight
}
}
Таким образом, мне не нужно передавать строковые константы (сегменты uri в вашем случае) в представление. Этот CMS-своего рода подход позволяет мне гибко добавлять дополнительные элементы в мое меню, не добавляя больше кода.
Я помню, что получил это из вики-кода, сейчас не могу найти ссылку на него.