Я строю свой вывод, используя комбинацию представлений. Цель состоит в том, чтобы упорядочить представления вручную на странице, а затем заполнить информацию содержимым представления, т.е. компоновка страницы выполняется контроллером.
Что-то вроде этого:
echo "<html>";
$this -> load -> view('templates/head', $data);
$this -> load -> view('templates/header', $data);
echo "<body>";
$this -> load -> view('templates/navigation', $data);
echo "<main>";
$this -> load -> view('users/view',$data);
echo "</main>";
$this -> load -> view('templates/footer', $data);
echo "</body>";
echo "</html>";
Проблема, с которой я сталкиваюсь, заключается в том, что теги объединяются в выходные данные, а затем сбрасываются представления. Результат - это что-то вроде этого:
<html>
</html>
<body>
<main>
</main>
</body>
... Output From each View ...
Имел ли кто-нибудь опыт такого рода вещей? Как правильно настроить его. Существует этот сайт, который указывает, что шаблоны могут быть более полезными для этой цели. Существует также старая дискуссия/форум/блог или, по крайней мере, я предполагаю, что она старая, основанная на том, как создаются классы, которая показывает присвоение содержимого переменной $data
а затем, наконец, рисует все в главном представлении. Когда я попробовал последний, это собирает взгляды вместе, прежде чем выкладывать их, и то же самое.
Есть ли способ вставить html в выходной файл?
(Я подозреваю, что я пропустил какую-то мягкую манеру в документации)
То, что я должен был искать, было шаблоном, у меня создалось впечатление, что мне нужно было сделать это от контроллера и подумать об этом как о композиции. Из SO в хорошие, хорошо и так так ответов.
Механизм шаблонов по умолчанию, предоставляемый CI, не существует в классе шаблонов Parser, но по сути делает замену текста в представлении. На этом сайте показано, как создать класс представления для заинтересованных.
Я изначально, хотя могла бы быть вспомогательная функция, подобная той, что содержится в HTML-хелпер-классе, для создания закрытых и открытых тегов, но без кубиков, поэтому вопрос об инъекции. Кажется, у кого-то есть контроль над классом Output.
Для заинтересованных: я пошел с папкой "layout" под представлениями с набором шаблонов, которые вызывают другие представления. Теги <html>/<body>/<main>
затем обертывают вызовы на разные под-представления "класс/представление", которые я присваиваю массиву в $data
. Самый большой охватывающий элемент подзадачи - это <article>
. Это позволяет сохранить абстракцию шаблона до минимума, насколько я могу видеть.
Как правило, принцип MVC всегда должен быть предпочтительным методом, а затем просто НЕ используйте команды echo()
в контроллере. Не должно быть причин не помещать ваши теги основной структуры в файлы представлений.
ОДНАКО
Для повышения производительности представления Codeigniter по умолчанию отображаются в конце, это не так, если команды echo()
отображают немедленно. Следовательно, все ваши эхо-данные будут выводиться перед представлениями.
Вы можете изменить поведение по умолчанию, добавив true
в качестве третьего параметра для представлений. Это вернет данные представления в виде строки, которая затем может быть эхом:
echo $this -> load -> view('templates/head', $data, true);
Затем он будет выглядеть в порядке. Я бы не рекомендовал его.
$this->load->vars($data);
вместо загрузки его во второй параметр контроллера, чтобы данные передавались. Для подхода к шаблонированию см. Net.tutsplus.com/tutorials/php/…