Активные вкладки меню с codeigniter - PullRequest
5 голосов
/ 28 июня 2011

Какой метод можно использовать в Codeigniter для достижения активных вкладок меню?

Например, у меня есть пользовательское меню Profile Friends Messages Logout

Когда я нахожусь в контроллере профиля, URL-адрес domain.com/profile/some_function Вкладка Profile должна быть активной, например, путем изменения цвета фона.

Обычно я добавляю php к вкладкам, чтобы проверить их соответствующий сегмент URL, и я бы изменил стиль активной вкладки.В Codeigniter я должен реализовать помощник?Какую функцию я могу легко использовать во вкладках?

Ответы [ 4 ]

4 голосов
/ 29 июня 2011

Как вы сказали в своем последнем абзаце, я бы просто проверил соответствующий сегмент 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> элементов.

3 голосов
/ 03 января 2014

У меня была такая же проблема. Вот мое решение:

В каждом из контроллеров добавьте параметр в функцию

$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>

Это должно решить проблему. Скажите, если проблема не устранена.

Спасибо

1 голос
/ 29 июня 2011

Существует простой пример того, как создать активное меню на основе контроллера.

   $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>

Конечно, вы можете создать более сложное меню навигации, основанное как на контроллерах, так и на методах.

1 голос
/ 29 июня 2011

Стиль вкладок - это не PHP, а проблема CSS. Посмотрите hover для изменения цвета. Они часто делаются с ul, но не всегда. Вы можете многому научиться здесь .

Что касается генерации списка, то, вероятно, хорошей идеей будет помощник. Вы, вероятно, захотите, чтобы один и тот же код был доступен для нескольких различных элементов управления / методов и представлений, поэтому наличие общего get_menu (); или create_menu (); было бы идеально в файле помощника. Возможно, вы захотите добавить его в свой MY_html_helper.php.

(будущие читатели, пожалуйста, прочитайте комментарии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...