Довольно в новинку для CodeIgniter, все еще схватывая подход MVC. Я просто задаюсь вопросом, что является лучшим способом решить это:
Я получил свою панель навигации, выделяющую в настоящее время активный канал как так:
Index
Blog
Теперь, когда я перехожу к blog.html, я хочу, чтобы идентификатор = "активный" сместился соответственно. Обычно я присвоил бы переменную каждой ссылке и затем установил бы, это - значение к 'идентификатору = "активный'. Так или иначе я не думаю, что это - лучший способ. Какие-либо мысли?
Обновление (12. Сентябрь 2012) Начиная с выяснения у этого я шел дальше к Kohana и развернул модуль, созданный полностью с этой целью. Теперь, все, что я должен сделать, указывают мои пункты меню в массиве конфигурации, и выделение происходит автоволшебно. Модуль здесь.
Прежде всего вам не следует использовать id для такого рода вещей, id - это присвоение уникального идентификационного номера каждому элементу DOM на странице, для чего лучше всего использовать класс.
Code Igniter предоставляет множество помощников и классов, которые становятся частью наших инструментов; возможно, вы слышали о «Сегментах URL» раньше.
$ this-> uri-> segment (n )
Позволяет получить определенный сегмент. Где n - номер сегмента, который вы хотите получить. Сегменты нумеруются слева направо. Например, если ваш полный URL-адрес следующий:
http://example.com/index.php/news/local/metro/crime_is_up
Номера сегментов будут такими:
http://codeigniter.com/user_guide/libraries/uri.html
вы можете использовать это для получения текущего сегмента URL, который представляет активную страницу, которую вы фактически показываете на браузер.
Из комментария, сделанного выше, я понял, что, возможно, вы искали что-то более компактное. По умолчанию в 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 значение # или что-то еще.
Не специфично для 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>