Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rusldv
7 лет назад

PHP - Урок 12. Обзор модели MVC. Добавляем шаблоны страниц в наше приложение

PHP - Урок 12. Обзор модели MVC. Добавляем шаблоны страниц в наше приложение.




Кот программист из Интернета - Источник кота


Предыдущие уроки:



Программируем на PHP - Введение

PHP - Запросы от браузера к серверу

PHP - Как работает сервер

PHP - Урок 4. PHP - интерпретатор

PHP - Урок 5. Переменные сервера и глобальные переменные

PHP - Урок 6. Конструкции print и echo. Кавычки одинарные и двойные и конкатенация строк

PHP - Урок 7. Переменные, константы и условия

PHP - Урок 8. Точка входа в приложение. Настройка mod_rewrite и файл .htaccess

PHP - Урок 9. Массивы и switch. Кодим основной каркас

PHP - Урок 10. COOKIE

PHP - Урок 11. Функции. Добавляем ядро системы core.php


MVC: Модель - Вид - Контроллер

В программировании есть такое понятие как паттерны проектирования. Это ни что иное как выработанные годами методики написания программ. Чем сложнее программа тем чаще к ней применяются конкретные методики. Одной из наиболее часто употребляемых методик является разделение вашего приложения на 3 составные части - Модель, Вид и Контролер. Разберем каждую часть более подробно.

Для начала напомню что представляет из себя любое приложение.

  1. Ввод. Получение входных данных от пользователя (например через веб-формы).
  2. Обработка. Обработка полученных данных (сохранение их в файлах и/или формирование запроса на поиск данных в файлах на основании этих входных данных для выдачи информации пользователю.
  3. Вывод. Форматирование данных для ответа и отображение пользователю (отправка в браузер запросившего их клиента).
  1. Контролер - он позволяет принимать данные из браузера (http - запрос) и в соответствии с ним выполнять некоторое действие. В частности - загружать данные из модели или сохранять их туда.
    В нашем приложении роль контролера выполняет switch который сидит в index.php.

  2. Модель - представляет данные и логику их отбора (вычисления). По сути все что работает с файлами ибазой данных - относится к модели.
    Мы будем взаимодействовать с базой данных через функции, которые у нас в ядре sys/core.php.

  3. Вид - Отображение данных у нас будет реализовано в виде HTML-страниц с подстановкой данных (переменных) из модели.
    Этим мы сегодня и займемся.

Итак последовательность работы нашего приложения следующая: Запрос от клиента попадает в контроллер и там на основании его данных выбирается нужное действие (в case);
В контролере происходит обращение к модели (нужным функциям в core.php которые либо сохраняют данные, либо загружают их из базы данных или файлов, или даже просто их обрабатывают);
Данные загруженные из модели в контролере сохраняются в переменных. Нам остается только подключить HTML-шаблон нужной страницы, где эти переменные подставляются и соответственно отображается их значение.

Добавляем шаблоны в наше приложение


Будем использовать следующие соглашения - У нас будет одни главный шаблон (обертка) с названием index.tpl.php внутри которого будут подключаться шаблоны страниц (имя_страницы.tpl.php).
То есть в главном шаблоне у нас будет меню, шапка и подвал. А содержание будет в шаблонах страниц. Что ж приступим.

В папке sys (где у нас файл core.php созданный на прошлом уроке) создадим подпапку templates. В нее то мы и будем класть наши файлы шаблонов.
Первым делом мы создадим в ней файл обертку (index.tpl.php), в который будут подключаться "внутряки".
Вот его первоначальный код

index.tpl.php

<!DOCTYPE html>
<html lang="ru">
    <head>
    <meta charset="utf-8">
    <title><?=$title?></title>
    </head>
    <body>
    <section class="container">
    <?php include_once(ROOT.'/sys/templates/'.$tpl.'.tpl.php'); ?>
    </section>
    <footer>
        <p><small>&copy; 2016</small></p>
    </footer>
    </body>
</html>

Здесь <?=$title?> это подстановка переменной (мы ее зададим в контроллере). А <?php include_once(ROOT.'/sys/templates/'.$tpl.'.tpl.php'); ?> - это мы в нашем главном шаблоне подключаем внутренний шаблон - его мы будем также назначать в контроллере (switch-e).
Теперь в файле index.php подключим наш главный шаблон обертку. Следующий код нужно вставить снизу после оператора swithc!

include_once(ROOT.'/sys/templates/index.tpl.php');

Так как все настройки - данные, шаблоны и др. Мы задаем в switch-e перед тем как они будут добавлены в шаблон.

Если вы все зделали и попробуете ради интереса зайти на тестовый сайт, то увидите предупреждение php-интерпретатора

Warning: include_once(Z:/home/thesite.loc/www/sys/templates/.tpl.php) [function.include-once]: failed to open stream: No such file or directory in Z:\home\thesite.loc\www\sys\templates\index.tpl.php on line 8

Warning: include_once() [function.include]: Failed opening 'Z:/home/thesite.loc/www/sys/templates/.tpl.php' for inclusion (include_path='.;C:\php\pear') in Z:\home\thesite.loc\www\sys\templates\index.tpl.php on line 8

Оно тут из-за того, что в index.tpl.php как мы помним мы подключали файл "внутряк" <?php include_once(ROOT.'/sys/templates/'.$tpl.'.tpl.php'); ?>
Вот только переменную $tpl мы не задали. То есть название нашего файла шаблона. Давайте это исправим.

Как помним если в URL не указано страниц куда мы хотим перейти, или таких разделов в нашем свитче нету, то мы попадаем в секцию default.
Вот для этой секции и напишем первый наш шаблон.

В папке sys/templates создадим файл default.tpl.php

<h2>Страница по умолчанию</h2>
<p>Сюда мы попадаем, если не ввели в запросе нужную страницу</p>

А в раздел default нашего switch-a контроллера пишем вместо того что там было

$title = "Страница по умолчанию";
$tpl = "default";

Теперь обновим страницу и у нас все работает.

Это мое PHP-приложение

Страница по умолчанию

Сюда мы попадаем, если не ввели в запросе нужную страницу

© 2016

Теперь логика ясна. Если мы допустим хотим создать страницу авторизации, то мы создаем в папке файл login.tpl.php а в секции case "login" устанавливаем соответствующие значения для переменных title и tpl.
В прочем этим мы и займемся в следующем уроке.

Итак полный сегодняшний код:

index.php

<h1>Это мое PHP-приложение</h1>
<?php 
    define(ROOT, $_SERVER['DOCUMENT_ROOT']);
    require(ROOT.'/sys/core.php');

    $page = route(1);
    $ext = route(2);
    
    //echo 'Запрашиваемая страница: '.$page;
    //echo '<br />Дополнительные данные: '.$ext;
    
    switch($page){
        case 'login':
            echo '<h2>Страница авторизации</h2>';
            break;
        case 'logout':
            echo '<h2>Тут мы разлогиваемся</h2>';
            break;
        case 'register':
            echo '<h2>Страница авторизации</h2>';
            break;
        case 'user':
            echo '<h2>Профиль пользователя</h2>';
            break;
        case 'post':
            echo '<h2>Конкретный пост</h2>';
            break;
        case 'news':
            echo '<h2>Страница новостей</h2>';
            break;
        default:
            $title = "Страница по умолчанию";
            $tpl = "default";
    }

    include_once(ROOT.'/sys/templates/index.tpl.php');

sys/templates/index.tpl.php

<html lang="ru">
    <head>
    <meta charset="utf-8">
    <title><?=$title?></title>
    </head>
    <body>
    <section class="container">
    <?php include_once(ROOT.'/sys/templates/'.$tpl.'.tpl.php'); ?>
    </section>
    <footer>
        <p><small>&copy; 2016</small></p>
    </footer>
    </body>
</html>

sys/templates/default.tpl.php

<h2>Страница по умолчанию</h2>
<p>Сюда мы попадаем, если не ввеи в запросе нужную страницу</p>

Наступает череда самого интересного. Мы подходим к изучению базы данных MySQL и командам SQL для работы с ней. Следующий урок будет вводный, а затем мы начнем писать страницы регистрации и авторизации пользователей в нашем приложении. Ну и в итоге создадим социальную сеть, которую будем связывать с голосом. В общем интересного много поэтому буду стараться чаще писать эти уроки (раз в 2-3 дня).
186
431.909 GOLOS
На Golos с November 2016
Комментарии (1)
Сортировать по:
Сначала старые