Отображения
Отображания — это просто веб-страницы, или фрагменты страниц, такие как шапка, футер, меню и т.д. По факту, отображения могут гибко объединяться с другими отображениями, если вы нуждаетесь в этом типе иерархии.
Отображения никогда не вызываются напрямую, они должны быть загружены контроллером. Помните, что в MVC фрейморке контроллер действует как инспектор ГИБДД, поэтому он несет ответственность за получение конкретного отображения. Если вы еще не прочли страницу Контроллеры, сделайте это до того, как продолжать.
Создание отображения
Используя ваш текстовый редактор, создайте файл blogview.php и поместите в него:
затем сохраните файл в директорию application/views/.
Загрузка отображения
Для того, чтобы загрузить конкретный файл отображения, используйте следующую функцию:
$this->load->view('name');
Где name - это имя файла отображения. Примечание: файловое расширение .php опускается, если вы не используете файлы с расширениями, отличными от .php.
Теперь откройте файл контроллера, который вы сделали ранее blog.php и замените объявления echo на вызов функции загрузки отображений:
Если вы посетите ваш сайт по URL, как вы делали это ранее, вы увидите ваше новое отображение. URL соответствует этому:
example.com/index.php/blog/
Загрузка множества отображений
CodeIgniter интеллигентно обрабатывает множественные вызовы к функции $this->load->view() из контроллера. Если произошли множественные вызовы, они будут соединены вместе. Например, вы можете загрузить отображение шапки, отображение меню, отображение контента и отображение футера. Это может выглядеть примерно так:
<?php
class Page extends CI_Controller {
function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
?>
В примере выше, мы используем "динамическое добавление данных", как вы увидите ниже.
Сохранение отображений в поддиректориях
Ваши файлы отображений могут также храниться в поддиректориях, если вы предпочитаете этот тип организации. Просто указывайте имя директории при загрузке отображения. Пример:
$this->load->view('folder_name/file_name');
Добавление динамических данных в отображение
Данные передаются из контроллера в отображения посредством массива или объекта во втором параметре загружающей функции. Вот пример использования массива:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
А вот пример использования объекта:
$data = new Someclass();
$this->load->view('blogview', $data);
Примечание: если вы используете объект, переменные класса будут преобразованы в элементы массива.
Давайте попробуем это с вашим контроллером. Откройте его и добавьте код:
Теперь откройте файл отображения и замените текст на переменные, которые соответствуют ключам массива с вашими данными:
Теперь загрузите страницу по URL и вы увидите, что переменные заменены значениями.
Создание циклов
Массив данных, который вы передаете в отображения, не имеет ограничений для переменных. Вы можете передавать многомерные массивы, которые будут зациклены, чтобы генерировать множество строк. Например, если вы получаете данные из базы данных, они обычно будут в виде многомерного массива.
Вот простой пример. Добавьте это в ваш контроллер:
Теперь откройте ваше отображение и создайте цикл:
Примечание: Обратите внимание, что в примере выше мы использовали альтернативный синтаксис PHP. Если вы не знакомы с ним, можете прочесть подробнее здесь: Альтернативный синтаксис PHP для отображений.
Возвращение отображений как данных
Есть третий опциональный параметр, позволяющий вам изменить поведение функции так, что она будет возвращать данные строкой, вместо того, чтобы отправлять их в браузер. Это может быть полезно, если вы хотите обрабатывать данные другим способом. Если вы установите параметр в TRUE, функция вернет данные. Поведение по умолчанию — FALSE, которое отправляет данные в браузер. Помните, что необходимо присваивать переменной возвращаемые данные:
$string = $this->load->view('myfile', '', true);