Виды

Вид - это просто веб-страница, или фрагмент страницы, как заголовок, подвал, боковая панель, и т.д. На самом деле, виды могут гибко встраиваться в другие виды (в других видах и т.д.) если Вам нужен этот тип иерархии.

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

На примере контроллера, который был создан на странице контроллера, давайте добавим в него вид.

Создание вида

В текстовом редакторе, создайте файл blogview.php, и вложите в него:

<html>
<head>
	<title>My Blog</title>
</head>
<body>
	<h1>Welcome to my Blog!</h1>
</body>
</html>

Затем сохраните файл в application/views/ каталог.

Загрузка вида

Чтобы загрузить определенный файл вида, следует использовать следующий метод:

$this->load->view('name');

Где name имя файла вида.

Примечание

Расширение файла .php не нужно указывать, если Вы используете расширение не отличное от .php.

Теперь, откроем файл контроллера Blog.php который мы создали ранее, и заменем echo оператор на метод загрузки файла вида:

<?php
class Blog extends CI_Controller {

	public function index()
	{
		$this->load->view('blogview');
	}
}

Если посетите свой сайт по URL сделаному ранее, Вы увидите новый вид. URL был подобный этому:

example.com/index.php/blog/

Загрузка нескольких видов

CodeIgniter будет грамотно обрабатывать несколько вызовов $this->load->view() внутри контроллера. Если будет более одного вызова, то они объеденятся в один. Например, Вы захотите иметь вид заголовка, вид меню, вид контента и вид подвала. Тогда это должно выглядеть вот так:

<?php

class Page extends CI_Controller {

	public 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('directory_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);

Примечание

Если Вы используете объект, класс переменных будет преобразован в элементы массива.

Давайте попробуем это на файле контроллера. Откройте его и добавьте:

<?php
class Blog extends CI_Controller {

	public function index()
	{
		$data['title'] = "My Real Title";
		$data['heading'] = "My Real Heading";

		$this->load->view('blogview', $data);
	}
}

Теперь откройте ваш файл вида и измените текст на переменные, которые соответствуют ключам массива данных:

<html>
<head>
	<title><?php echo $title;?></title>
</head>
<body>
	<h1><?php echo $heading;?></h1>
</body>
</html>

Загрузите страницу используя старый URL и увидите что переменные заменены.

Создание циклов

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

Вот простой пример. Добавьте это в контроллер:

<?php
class Blog extends CI_Controller {

	public function index()
	{
		$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

		$data['title'] = "My Real Title";
		$data['heading'] = "My Real Heading";

		$this->load->view('blogview', $data);
	}
}

Теперь откройте файл вида и создайте цикл:

<html>
<head>
	<title><?php echo $title;?></title>
</head>
<body>
	<h1><?php echo $heading;?></h1>

	<h3>My Todo List</h3>

	<ul>
	<?php foreach ($todo_list as $item):?>

		<li><?php echo $item;?></li>

	<?php endforeach;?>
	</ul>

</body>
</html>

Примечание

Обратите внимание, что в примере используется альтернативный синтаксис PHP. Если Вы не знакомы с ним, то можете ознакомиться тут.

Возвращение вида как данных

Есть третий дополнительный параметр позволяющий изменить поведение метода, чтобы вернуть данные как строку, нежели отправить их в браузер. Это может быть полезно, если Вы хотите обрабатывать данные другим путем. Если установите параметр как TRUE (булево), будут возвращены данные. Поведение по умалчанию false, которое отправляет данные в браузер. Не забудьте присвоить их переменной, если требуется, чтобы данные вернулись:

$string = $this->load->view('myfile', '', TRUE);