Статические страницы
Примечание: Учебник предполагает, что Вы скачали и установили 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>© 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 контроллера? Обалденно!