#codeigniter
#codeigniter
Вопрос:
Я новичок в CI и хотел бы эффективно загружать представления, навигацию и метаданные. Я только что сделал домашнюю страницу и придумал следующее:
класс Home расширяет контроллер {
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-скриптов, необходимых для этой конкретной страницы.
- раздел передается в представление для настройки класса тела и через навигационное представление для выделения ссылок
Вопросы
- Во-первых, есть ли в этом что-то не так?
- Вместо того, чтобы устанавливать все эти дополнительные переменные массива для каждой функции, я чувствую, что должен установить ‘section’ и base_url автоматически один раз. Какой самый удобный способ сделать это? базовый контроллер?
Ответ №1:
В том, как вы с этим справляетесь, нет ничего плохого, но я выскажу свое мнение:
Установите некоторые значения по умолчанию вместо переопределения этих переменных при каждой загрузке шаблона. Вы могли бы использовать базовый контроллер, но поскольку они нужны нам только для библиотеки шаблонов, лучше установить их либо в самом классе, либо в файле конфигурации, который загружается шаблоном, либо в обоих. При загрузке определенного шаблона вы можете перезаписать эти переменные или вернуться к значениям по умолчанию.
Будет ли ваш шаблон 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
В то время как с вашим текущим методом вы будете возиться со строками и запятыми. Вы могли бы рассмотреть возможность написания функции в вашем классе шаблонов с именем add_js()
или что-то в этом роде. Это, скорее всего, то, что я бы сделал. На самом деле, я этим и занимаюсь. Я настоятельно рекомендую это. Пример может выглядеть следующим образом:
$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, но вам это может не понадобиться. IMO это проясняет происходящее и устраняет любую двусмысленность.
В конце концов, делайте то, что работает для вас. Здесь вы не нарушаете никаких правил и не делаете ничего плохого. Лично в моей библиотеке шаблонов немного беспорядок, но она очень хорошо служит мне в течение многих лет, и я постоянно ее улучшаю. Подумайте о написании дополнительных функций для обработки разделов настроек, представлений, javascript и так далее. Я предполагаю, что это широко используется, поэтому максимально упростите работу с вашим контроллером. Всегда есть время для последующего рефакторинга.
Комментарии:
1. Спасибо, я собираюсь установить
$section1
,$section2
etc (на основе uri) в моем классе шаблонов по умолчанию, круто сделать это в конструкторе?function __construct() { $template_data = array(); $this->CI =amp; get_instance(); // set default $this->template_data['section'] = $this->CI->uri->segment(1); }