CodeIgniter: Как 'выделить' ссылку страницы, на которой пользователь в настоящее время находится?

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

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

Index
Blog

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

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

6
задан anroots 12 September 2012 в 06:47
поделиться

3 ответа

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

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

$ this-> uri-> segment (n )

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

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

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

  1. news
  2. local
  3. metro
  4. Crime_is_up

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

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

5
ответ дан 8 December 2019 в 12:57
поделиться

Из комментария, сделанного выше, я понял, что, возможно, вы искали что-то более компактное. По умолчанию в 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>';
    }
}

Как видите, это всего лишь однострочная модификация: $ attributes. = ($ site_url == current_url ())? 'selected': '';

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

0
ответ дан 8 December 2019 в 12:57
поделиться

Не специфично для 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>
7
ответ дан 8 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: