Codeigniter - добавить активный класс CSS в ссылку, как это сделать?

Какой самый быстрый и простой способ добавить «активный» класс к ссылке, чтобы ее можно было стилизовать? Я разрабатываю приложение в CI, и мне нужен быстрый и простой способ сделать это автоматически.

jQuery тоже вариант...


person Kevin Brown    schedule 22.12.2009    source источник


Ответы (5)


Вы действительно должны использовать класс URI CodeIgniter, чтобы сделать это вместо $_SERVER['REQUEST_URI']

$this->uri->uri_string()


if ( $this->uri->uri_string() == '/contact' )

^^ это предпочтительный способ сделать что-то из-за некоторых сложностей, которые могут возникнуть с функциями маршрутизации codeigniter.

person Tom Schlick    schedule 03.01.2010
comment
Да, я в конечном итоге использовал этот метод. - person Kevin Brown; 03.01.2010
comment
Мне пришлось использовать следующее, чтобы это работало, если ($this-›uri-›uri_string() == 'home') //Удалите косую черту - person Sahil; 27.09.2013

Зависит от того, как вы выводите ссылку HTML.

Если вы используете модуль URL Helper, вы можете вызвать функцию anchor(), чтобы создайте свои ссылки и передайте им массив атрибутов в качестве третьего параметра, то есть:

$this->load->helper('url');
echo anchor('url/path', 'Click here', array('class' => 'active'));

Если вы просто выводите HTML вручную в своих шаблонах/представлениях, очевидно, вы можете просто создать атрибут класса самостоятельно в HTML.

person zombat    schedule 22.12.2009

Если у вас много элементов навигации, вы можете сделать это так (очень упрощенно)...

<ul>
<li<?= if ( $_SERVER['REQUEST_URI'] == '/contact' ): ?> id="active"<?php endif; ?>><a href="">contact</a></li>
</ul>

Вам придется отредактировать его под свои нужды...

Если у вас не так много элементов навигации, более простой способ - дать каждой странице идентификатор тела, а затем использовать css, чтобы сделать его активным.

<style type="text/css">
body#contact #contact-nav { font-weight:bold; }
</style>

<body id="contact">

<ul id="navigation">
    <li id="contact-nav"><a href="">contact</a></li>
</ul>
person Galen    schedule 22.12.2009
comment
Это потрясающе. Первый вариант сработал (с небольшой доработкой)! - person Kevin Brown; 22.12.2009

Вы можете сделать это, создав помощник со следующими

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
if ( ! function_exists('active_link'))
{
    function active_link($controller)
    {
        $CI =& get_instance();

        $class = $CI->router->fetch_class();
        return ($class == $controller) ? 'active' : '';
    }
}

затем примените его в представлении меню

<li class="<?php echo active_link('services'); ?>"><a href="<?php echo base_url();?>services">Services</a></li>
person Robin    schedule 29.04.2014
comment
Этому вопросу 4 года, и ваш ответ не добавляет пользы ветке... - person Kevin Brown; 29.04.2014
comment
это самый простой блок кода, с которым я когда-либо сталкивался. Спасибо :) - person Fahid Mohammad; 07.05.2014
comment
@FahidMohammad да, вот почему я ответил здесь, хотя этот вопрос очень старый. - person Robin; 08.05.2014

Чтобы добавить активный класс (class="active") к ссылке, я сделал это следующим образом:
In view

<ul class="nav nav-tabs"> 
        <li id="button_home" class='<?php echo $home;?>'><?php echo anchor('pages/index','Home');?></li>
        <li id="button_about" class='<?php echo $about;?>'><?php echo anchor('pages/about','About')?></li> 
</ul>

В контроллере

$data['home']="active";

Может быть, это не ваше решение. но это работает для меня.

person Shiplu    schedule 11.05.2015