Какой метод можно использовать в Codeigniter для достижения активных вкладок меню?
Например, у меня есть меню Profile Friends Messages Logout
Когда я нахожусь в контроллере профиля, URL-адрес domain.com/profile/some_function
. Вкладка « Profile
» должна быть активной, например, путем изменения цвета фона.
Обычно я добавляю php на вкладки, чтобы проверить их соответствующий сегмент URL, и я бы изменил стиль активной вкладки. В Codeigniter я должен использовать хелпер? Какую функцию я могу легко использовать в вкладках?
Как вы сказали в своем последнем абзаце, я просто проверил бы соответствующий сегмент URI и изменил бы стиль вкладки на основе этого.
Предположим, вы используете инструкцию foreach
для создания своего меню из базы данных:
<ul> <?php foreach($menu_items as $menu_item):?> <li<?php if($this->uri->segment(2) == url_title($menu_item->name, dash, TRUE)):?> class="active"><?php else:?>><?php endif;?><a href="<?=$menu_item->url;?>"><?=$menu_item->name;?></a></li> <?php endforeach;?> </ul>
Причина, по которой я url_title()
заключается в том, чтобы сделать имя строчным, как сегмент URI, и позаботиться о любых возможных пространствах, которые могут находиться в имени меню и / или сегменте URI. Для этого потребуется, чтобы хелпер URL был включен. Если они не совпадают, используется CSS по умолчанию для элементов <li>
.
Я была такая же проблема . Вот мое решение:
В каждом из контроллеров добавьте параметр в функцию
$data['activeTab'] == "profile"; $this->load->view('viewname',$data); (Profile controller) $data['activeTab'] == "friends"; $this->load->view('viewname',$data); (Friends controller) $data['activeTab'] == "messages"; $this->load->view('viewname',$data); (Messages controller)
В представлении, где у вас есть панель навигации, добавьте код примерно так:
<ul id="menu"> <li class="<?php echo ($activeTab == "profile") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>profile">PROFILE</a></li> <li class="<?php echo ($activeTab == "friends") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>friends">FRIENDS</a></li> <li class="<?php echo ($activeTab == "messages") ? "active" : ""; ?>"><a href="<?php echo base_url(); ?>messages">MESSAGES</a></li> </ul>
Это должно решить проблему. Скажите, если проблема не исчезнет.
благодаря
Стиль вкладок – это не PHP, а проблема с CSS. Наведите hover
на изменение цвета. Они часто выполняются с помощью ul
, но не всегда. Вы можете многому научиться здесь .
Что касается генерации списков, помощник, вероятно, будет хорошей идеей. Вероятно, вы захотите, чтобы один и тот же код был доступен для нескольких разных элементов управления / методов и представлений, поэтому с общим get_menu (); или create_menu (); было бы идеальным в вспомогательном файле. Возможно, вы захотите добавить его в свой MY_html_helper.php.
(Будущие читатели, пожалуйста, прочитайте комментарии)
Существует простой пример создания активного меню на основе контроллера.
$ci =& get_instance(); // get the current controller $controller = $ci->router->fetch_class(); // you can generate this array dynamically $resources = array(0 => array("controller" => "home", "title" => "Home"), 1 => array("controller" => "products", "title" => "Products"), 2 => array("controller" => "services", "title" => "Services"), ); <ul> <?php foreach($resources as $resource): ?> <?php $class = ( $controller == strtolower($resource["controller"]) ? 'active' : 'inactive' ); ?> <li><a href="<?php echo site_url($resource["controller"]) ?>" class="<?php echo $class; ?>"><?php echo $resource["title"] ?></a></li> <?php endforeach; ?> </ul>
Конечно, вы можете создать более сложное навигационное меню на основе обоих контроллеров и методов.