Code Igniter: эффективные средства настройки и передачи общих метаданных в представления - PullRequest
1 голос
/ 04 июня 2011

Я новичок в CI и хотел бы сделать загрузку видов, навигации и метаданных эффективной.Я только что сделал домашнюю страницу и придумал следующее:

класс Home extends Controller {

function index()
 {     
   // specify extra bits such as page title, section, extra js to load   
   $extra = array(
                    'title'   => 'Funky Boots Co Home',
                    'section' => $this->uri->segment(1),
                    'js'      => 'home,cycle',
                    'base_url'=> base_url()     
                  );                                 
   $this->template->load('public/templates/main', 'home_view', array('extra'=>$extra));
  }  
}    
  • Я использую базовую библиотеку шаблонов, поэтому могу многократно сохранятьзагрузка представлений
  • Поскольку я использую base_url повсюду, я подумал, что лучше один раз установить его как var
  • У меня есть общие js-файлы, которые всегда включают, но используютЗначение 'js' для передачи имени любых js-скриптов, необходимых для этой конкретной страницы.
  • раздел передается в представление для настройки класса тела и в представление nav для подсветки ссылок

Вопросы

  • Во-первых, есть ли что-то не так с этим?
  • Вместо установки всех этих дополнительных массивов для каждой функции, я чувствую, что долженустановить 'section' & base_url автоматически один раз.Какой самый лучший способ сделать это?базовый контроллер?

1 Ответ

2 голосов
/ 04 июня 2011

Нет ничего плохого в том, как вы справляетесь с этим, но я выскажу свое мнение:

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

Будет ли ваш шаблон base_url меняться между страницами? Если ответ «Нет», вам не нужно устанавливать его как переменную, просто при необходимости вызовите base_url(). Я лично для этого установил глобально доступную константу с именем BASE_URL (в моем конфигурационном файле), но это всего лишь предпочтение. Если может измениться (но редко), то это отличный пример того, почему установка некоторых значений по умолчанию будет полезна.

Возможно, вы могли бы просто передать $extra третьему параметру, а не array('extra' => $extra). Вы должны быть в состоянии заполнить массив любыми нужными значениями, но, конечно, это зависит от того, что на самом деле делает класс. Я чувствую, что все будет хорошо, и сэкономит вам немного усилий.

Я бы определенно использовал массив для js, а не разделял строку запятыми. Вы будете в конечном счете пополнять это, и это будет более читабельным. Например, вы сможете добавлять файлы следующим образом:

if ($some_condition) $extra['js'] = 'accordion.js'; // add file
if ($some_other_condition) unset($extra['js']['accordion.js']); // remove file

Принимая во внимание, что с вашим текущим методом вы будете возиться со строками и запятыми. Вы можете написать в своем классе Template функцию с именем add_js() или что-то в этом роде. Скорее всего, я бы так и сделал. На самом деле, я делаю это 1022 *. Я очень рекомендую это. Пример может выглядеть так:

$this->template
    ->add_js('accordion.js') // add file
    ->remove_js('accordion.js'); // remove file

Или, может быть, даже это:

$this->template->js[] = 'accordion.js';

Затем в файле шаблона просто загрузите файлы в $this->template->js. Я предпочитаю первый метод, используя функцию. Я бы предпочел также использовать расширение .js, поскольку у меня есть несколько файлов .php и / или представлений CI для загрузки, которые на самом деле являются файлами javascript, но вам это может не понадобиться. ИМО, он проясняет происходящее и устраняет любую двусмысленность.

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

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