Эффективная навигация по сайту с CodeIgniter - PullRequest
2 голосов
/ 04 мая 2011

Я работаю над сайтом, где в навигации может быть до 3 уровней иерархии.

  • основные разделы в верхнем заголовке
  • суб-навигация наleft
  • необязательная подподходящая навигация ниже этой

В прошлом, когда я катал свой собственный с PHP, я создавал файл navigation.php, содержащий класс и массивыдля всех разделов и подразделов и пару функций для вывода навигации.Я бы установил переменные на каждой странице сайта (current_section = '', current_sub_section = ''), чтобы функция навигации знала, что выделять.

В CodeIgniter мне интересно, если это все ещехороший подход к использованию?

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

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

Home | News | Events

В верхней панели отображается на:

  • / home
  • / news
  • / events

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

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

Пример:

class HomeController extends CI_Controller 
{
  private $nav; 
  public function __construct() 
  {
    parent::__construct();

    $this->nav = array(
       array('Browse', site_url('news/browse')),
       array('Edit', site_url('news/edit'))
    );

    $this->load->vars(array('NavigationArray' => $this->nav));
  }

  // ...

}

Теперь вы автоматически зарегистрировали переменную во всех ваших представлениях $NavigationArray, которая содержит массив Отображаемое имя - Ссылка пар.

Затем можно загрузить базовую навигациюПросмотр, который создает ваш subnav из этой переменной (так как он доступен везде).

<? foreach($NavigationArray as $entry): ?>
   <a href="<?=$entry[1];?>"><?=$entry[0];?></a>
<? endforeach; ?>

И ниже, вы можете найти наличие массива sub-nav, который вы можете установить в своем контроллере, иливсе (третий опциональный навигационный модуль, о котором вы говорили)

<? if(exists($SubNavigationArray)): ?>
  <? foreach($SubNavigationArray as $entry): ?>
     <a href="<?=$entry[1];?>"><?=$entry[0];?></a>
  <? endforeach; ?>
<? endif; ?>

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

Таким образом, контроллер контролирует , какие элементы навигации отображаются.

Также обратите внимание:

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

$this->load->view('myview', array('NavigationArray' => $this->nav));

Надеюсь, это поможет.

2 голосов
/ 04 мая 2011

Вот в основном то, что я делаю, чтобы определить «активные» ссылки в Codeigniter:

$active_class = '';
$url = site_url('your/link/url');

if ($url == current_url())
{
    $active_class = ' class="active"';
}

$link = '<a href="'.$url.'"'.$active_class.'>Link Text</a>";

Имейте в виду, что это базовый пример и обычно выполняется в цикле.Лучший способ зависит от того, как выглядит ваш навигационный массив и что вы считаете «активными» (если вы хотите «активировать» ссылки, чьи ссылки частично соответствуют URL).

0 голосов
/ 04 мая 2011

Лучший способ - использовать 3 разных вида, вид сверху, вид слева и вид снизу, тогда в вашем контроллере вы можете передать соответствующие переменные каждому виду, чтобы сделать что-то вроде

$top[current] = something;
$top[current_sub] = somethingelse;
$this->load->view('top_nav', $top);
$this->load->view('left_nav',$left);
...

Тогда в ваших представлениях вы можете обрабатывать передаваемые им переменные.

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