CodeIgniter: Как «выделить» ссылку на страницу, на которой сейчас находится пользователь? - PullRequest
6 голосов
/ 29 июля 2010

Довольно новый для CodeIgniter, все еще придерживающийся подхода MVC. Мне просто интересно, как лучше это решить:

Я получил панель навигации, в которой выделена текущая активная ссылка, вот так:

<a href="index.hml" id="active">Index</a>
<a href="blog.hml">Blog</a>

Теперь, когда я захожу в blog.html, я хочу, чтобы id = "active" соответственно сместился. Обычно я назначаю переменную каждой ссылке, а затем устанавливаю ее значение равным 'id = "active". Почему-то я не думаю, что это лучший способ. Есть мысли?

Обновление (12 сентября 2012 г.) С тех пор, как я спросил об этом, я перешел на Kohana и расширил модуль, созданный исключительно для этой цели. Теперь все, что мне нужно сделать, это указать мои пункты меню в массиве конфигурации, и выделение происходит автоматически. Модуль здесь .

Ответы [ 5 ]

7 голосов
/ 29 июля 2010

Не относится к CI, это просто логическая проверка имени текущей страницы.

Когда вы получаете имя страницы в CI, например

$pageName = 'blog.html';

Затем вы можете сделать следующее

<a href="index.html" <?php echo $pageName == 'index.html' ? 'id="active"' : ''; ?>>Index</a>
<a href="blog.html" <?php echo $pageName == 'blog.html' ? 'id="active"' : ''; ?>>Blog</a>
5 голосов
/ 29 июля 2010

Прежде всего, вы не должны использовать id для такого рода вещей, id должен давать уникальный идентификационный номер каждому элементу DOM на странице, для чего мы лучше всего используем класс.

Code Igniter предоставляет множество помощников и классов, которые становятся частью наших инструментов, возможно, вы уже слышали о «сегментах URL».

$ this-> uri-> сегмент (п )

Позволяет вам получить определенный сегмент. Где n - номер сегмента, который вы хотите получить. Сегменты нумеруются слева направо. Например, если ваш полный URL-адрес такой:

http://example.com/index.php/news/local/metro/crime_is_up

Номера сегментов будут такими:

  1. Новости
  2. местные
  3. метро
  4. crime_is_up

http://codeigniter.com/user_guide/libraries/uri.html

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

3 голосов
/ 11 сентября 2012

Я использую код ниже - ура!

<?php echo ($this->uri->segment(1)=='dashboard' && $this->uri->segment(2)=='')? 'active' : ''; ?>
3 голосов
/ 19 декабря 2010

Я использовал пример @Calle, работал очень хорошо ... Мне пришлось использовать пользовательский захват URL вместо CI current_url (), так как я обходил файл index.php с помощью .htaccess.Я также добавил правильный тег атрибута.

Заметки для начинающих Я записал этот файл в «помощники» под названием menu_helper.php и загрузил его через контроллер $ this-> load-> helper ('menu');

helpers / menu_helper.php

if ( ! function_exists('menu_anchor'))
{
    function menu_anchor($uri = '', $title = '', $attributes = '')
    {
        $title = (string) $title;

        if ( ! is_array($uri))
        {
            $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? site_url($uri) : $uri;
        }
        else
        {
            $site_url = site_url($uri);
        }

        if ($title == '')
        {
            $title = $site_url;
        }

        if ($attributes != '')
        {
            $attributes = _parse_attributes($attributes);
        }

        $current_url = (!empty($_SERVER['HTTPS'])) ? "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'] : "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
        $attributes .= ($site_url == $current_url) ? 'class="active"' : 'class="normal"';


        return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';
    }
}

Просмотр файла:

<ul class="topnav love">
    <li class="topnav-1"><?=menu_anchor(base_url()."path/to/something", "menu_item")?></li>
    <li class="topnav-2"><?=menu_anchor(base_url()."path/to/something", "menu_item")?></li>
    <li class="topnav-3"><?=menu_anchor(base_url()."path/to/something", "menu_item")?></li>
    <li class="topnav-4"><?=menu_anchor(base_url()."path/to/something", "menu_item")?></li>
    <li class="topnav-5"><?=menu_anchor(base_url()."path/to/something", "menu_item")?></li>
</ul>

CSS:

ul.topnav li.topnav-1 a.active {что-то умное}

0 голосов
/ 29 июля 2010

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

Во-первых, взгляните на URL-помощник в руководстве.http://codeigniter.com/user_guide/helpers/url_helper.html

Посмотрите специально на функцию привязки и поймите, как ее использовать.Вы должны иметь привычку использовать этот помощник, помощник HTML и помощник по форме.Это улучшит ваши взгляды.Все помощники доступны для нас в системной папке.Я просто открыл вспомогательный URL-адрес и скопировал код привязки. Затем я создал собственный вспомогательный файл в папке помощника в приложении.Подробнее о создании собственных помощников и их автоматической загрузке вы можете прочитать в руководстве.

Затем я внес в него несколько изменений.Окончательный результат выглядит следующим образом:

if ( ! function_exists('menu_anchor'))
{
    function menu_anchor($uri = '', $title = '', $attributes = '')
    {
        $title = (string) $title;

        if ( ! is_array($uri))
        {
            $site_url = ( ! preg_match('!^\w+://! i', $uri)) ? site_url($uri) : $uri;
        }
        else
        {
            $site_url = site_url($uri);
        }

        if ($title == '')
        {
            $title = $site_url;
        }

        if ($attributes != '')
        {
            $attributes = _parse_attributes($attributes);
        }

    $attributes .= ($site_url == current_url()) ? ' selected' : '';

        return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';
    }
}

Как видите, это всего одна модификация строки: $ attribute. = ($ Site_url == current_url ())?'selected': '';

Обычно, если URL-адрес найденной страницы соответствует papge, на который ссылается якорь, он добавляет выбранный класс.Если вы не хотите, чтобы выбранная ссылка указывала на какую-либо конкретную ссылку, вы можете легко это исправить, установив для $ site_url значение # или что-то еще.

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