Макет: вставка текста для упорядочивания представлений из контроллера

0

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

Что-то вроде этого:

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>. Это позволяет сохранить абстракцию шаблона до минимума, насколько я могу видеть.

  • 2
    Почему вы производите вывод в контроллере?
  • 1
    Взгляните на CI UserGuide - ellislab.com/codeigniter/user-guide/general/views.html Я считаю, что он очень хорошо объяснил, как использовать представления.
Показать ещё 2 комментария
Теги:
codeigniter

1 ответ

1
Лучший ответ

Как правило, принцип MVC всегда должен быть предпочтительным методом, а затем просто НЕ используйте команды echo() в контроллере. Не должно быть причин не помещать ваши теги основной структуры в файлы представлений.

ОДНАКО

Для повышения производительности представления Codeigniter по умолчанию отображаются в конце, это не так, если команды echo() отображают немедленно. Следовательно, все ваши эхо-данные будут выводиться перед представлениями.

Вы можете изменить поведение по умолчанию, добавив true в качестве третьего параметра для представлений. Это вернет данные представления в виде строки, которая затем может быть эхом:

echo $this -> load -> view('templates/head', $data, true);

Затем он будет выглядеть в порядке. Я бы не рекомендовал его.

  • 0
    Чувствовал себя немного не по-MVC. Есть ли тогда стандартный способ размещения частей страницы. Возможно, есть класс помощника / макета / шаблона? (Я еще не сталкивался с этим в Документе, только начал читать / использовать эту систему в выходные)
  • 0
    Ну, твой вопрос уже не MVC-иш! :) У меня лично есть привычка всегда просто загружать один файл представления, а затем в этот файл загружать различные части представления, которые я хочу, такие как заголовок, нижний колонтитул, меню и т. Д. Просто не забудьте использовать $this->load->vars($data); вместо загрузки его во второй параметр контроллера, чтобы данные передавались. Для подхода к шаблонированию см. Net.tutsplus.com/tutorials/php/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню