Статические страницы

Примечание: Учебник предполагает, что Вы скачали и установили CodeIgniter фреймворк в Вашей среде разработки.

Первое что необходимо сделать установить контроллер для управления статическими страницами. Контроллер - простой класс, который помагает уполномочить работу. Это клей веб приложения.

Например, когда вызываем:

Нам следует представлять себе, что имя контроллера “news”. Вызываемый метод в контроллере news “latest”. Смысл работы метода news - извлечь 10 разделов новостей, и предоставить их странице. Очень часто в MVC, шаблон URL имеет вид:

С усложнение схемы URL, он может изменяться. Но сейчас, это все что нам необходимо знать.

Создайте файл в application/controllers/Pages.php со следующим содержанием кода.

<?php
	class Pages extends CI_Controller {

	public function view($page = 'home')
	{
	}
}

Вы создали класс с именем “pages”, содержащий метод view, который принимает один аргумент $page. Класс pages расширяет CI_Controller класс. Это означает что новый класс pages имеет доступ к методам и переменным определенным в CI_Controller классе (system/core/Controller.php).

Контроллер является центром каждого запроса веб приложения. В техническом понимании CodeIgniter, может быть определен как супер объект. Как и любой php класс, он использует $this. Используя $this будут загружаться библиотеки, виды, и обычные команды фреймворка.

Когда создан первый метод, настало время создать основной шаблон страницы. Создадим два вида “views” (шаблона страницы) которые содержат подвал (footer) и заголовок (header).

Создайте заголовок в application/views/templates/header.php со следующим содержанием кода:

<html>
	<head>
		<title>CodeIgniter Tutorial</title>
	</head>
	<body>

		<h1><?php echo $title ?></h1>

Заголовок включает в себя основной HTML код, который будет отображен до загрузки основного вида. Также будет отображаться переменная $title, которую мы назначим позже в контроллере. Теперь создадим подвал в application/views/templates/footer.php со следующим содержимым:

		<em>&copy; 2014</em>
	</body>
</html>

Добавим логики в контроллер

Ранее мы установили в контроллере метод view(). Метод принимает один параметр, который является именем страницы для загрузки. Шаблоны страниц будут находиться в application/views/pages/ папке.

В этой папке, создайте два файла с именами home.php и about.php. В этих файлах введите любой текст какой пожелаете и сохраните его. Если Вы не желаете выделяться, введите “Hello World!”.

В порядке загрузки этих страниц, нужно будет проверить независимо от запроса существование страницы:

	public function view($page = 'home')
	{
			if ( ! file_exists(APPPATH.'/views/pages/'.$page.'.php'))
			{
					// Упс, у нас нет такой страницы!
					show_404();
			}

			$data['title'] = ucfirst($page); // Capitalize the first letter

			$this->load->view('templates/header', $data);
			$this->load->view('pages/'.$page, $data);
			$this->load->view('templates/footer', $data);
	}

Теперь, если страница существует, она будет загружена, вместе с подвалом и заголовком, и показана пользователю. Если страница не существует, будет показана “404 Page not found” ошибка.

Первая строка метода определяет наличие страницы. Родная PHP file_exists() функция используется для проверки независимо от местонахождения файла. show_404() функция созданная в CodeIgniter для отображения ошибки страницы по умолчанию.

В шаблоне заголовка, переменная $title была использована для замены заголовка страницы. Значение этого заголовка определяется в этом методе, но вместо назначения значения переменной, назначается элемент массива $data для заголовка.

Последний шаг выполнения - загрузка вида для дальнейшего отображения. Второй параметр view() метода используется для передачи значений в вид. Каждое значение в массиве $data назначена как переменная с именем ключа. Поэтому значение $data['title'] в контроллере эквивалентно $title в виде.

Маршрутизация

Теперь контроллер функционирует! Укажите в браузере [your-site-url]index.php/pages/view чтобы увидеть страницу. При посещении index.php/pages/view/about увидите страницу about, также включающую в себя подвал и заголовок.

Используя правила маршрутизации, можно создать карту любого URI для контроллера и метода, и не зависеть от стандартного шаблона: http://example.com/[controller-class]/[controller-method]/[arguments]

Давайте сделаем это. Откроем файл маршрутизации application/config/routes.php и добавим следующие две строчки. Удалите весь остальной код касающийся массива $route.

$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';

CodeIgniter читает правила маршрутизации сверху вниз и маршрутизирует запрос по первому совпадению правил. Каждое правило - регулярное выражение отображенное в контроллере и методе разбитое слэшами. Когда приходит запрос, CodeIgniter ищет первое совпадение, и вызывает соответствующий контроллер и метод, возможно с аргументами.

Больше информации Вы найдете в документации URI Маршрутизации.

Здесь, второе правило в массиве соответствует any запросу использующему шаблон строки (:any). и передает параметр методу view() класса pages.

Теперь перейдите на index.php/about. Правильно ли прошла маршрутизация в view() метод pages контроллера? Обалденно!