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

    Примечание: Учебник предполагает, что Вы скачали и установили 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 Tutorialtitle>
    	head>
    	<body>
    
    		<h1>php echo $title ?>
    

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

    		<em>&copy; 2014em>
    	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 контроллера? Обалденно!