Дополнение к уроку:
MVC - Модель, Вид (представление), Контроллер. Правила следующие:
- В Модели и Контроллере отсутствует вывод информации на экран.
- В Виде мы допускаем PHP в размере необходимом для вывода информации на экран. То есть это будут условные конструкции, циклы, сопутствующие функции обработки вроде htmlspecialchars (о котором будет в следующих уроках).
У нас есть код, не читай ответа ниже ответьте как разделить его:
$x = 1;
echo $x;
Ответ очень прост, первую часть мы помещаем в наш контроллер, а вторую в вид.
Наш сайт делится на разделы (Модули, - это не модели!), а внутри разделов страницы. Разделы - это объединённые по смыслу и общему контенту нескольких страниц сайта. Хочу заметить, что в разделе может быть и одна лишь страница. Если мы создаём модуль "новости", то у нас будут страницы: вывод свежих новостей, вывод всех новостей, страница для чтения определённой новости. Если у нас игра, то это отдельный модуль game, в котором присутствуют 2 страницы: главная страница с игрой, и страница с gameover.
В каждом модуле есть основная (главная) страница и называется main , в ней находится код по открытию раздела. В модуле GAME главной страницей будет игра, а вывод результатов как дополнительная страница. Главная страница main, значит у нас создаются main.php и main.tpl в папке модуля game (в случае рассмотрения раздела сайта game).
Давайте на примере GAME рассмотрим какие файлы мы должны создать:
1) Папки модуля GAME:
/modules/game/
/skins/default/game/
2) Игра состоит из двух страниц: битва и результат, значит мы создаём main.php и gameover.php
/modules/game/main.php
/skins/default/game/main.tpl
/modules/game/gameover.php
/skins/default/game/gameover.tpl
3) В адресной строке открываем главную страницу БЕЗ УКАЗАНИЯ page=main , потому что если мы не укажем page=main, он определится автоматически в файле variables.php . Итого мы получаем 2 страницы:
/index.php?module=game
/index.php?module=game&page=gameover
4) Чтобы работал модуль, его необходимо прописать в variables.php в переменной допустимых модулей. Страницы мы не прописываем, так как это будет тема отдельного урока.
Сама суть разделов очень простая, сгруппировать и упростить работу с нашим кодом, согласитесь, ведь когда надо поработать с разделом "игра" мы не будем перебирать сотни файлов в поисках нужных, мы всегда знаем, что вся игра полностью находится в папке модуля game.
Ещё одна ошибка учеников - если форма авторизации находится на главной странице, то обработчик формы должен быть в index.php или variables.php. Это не так. Авторизация и кнопка выхода относятся к разделу (модулю) cab (кабинет) или user (пользователь) или login. Называйте как хотите, но суть остаётся прежней, именно в этом модуле должен располагаться код авторизации и код выхода в разных файлах. Чтобы форма отправляла данные на указанную страницу модуля достаточно в теге FORM для атрибута action указать путь к этой странице на примере авторизации:
<form action="/index.php?module=cab&page=auth" method="post">
С exit ещё проще, так как не надо никаких данных заполнять, а достаточно переправить пользователя на отдельную страницу, то мы пишем обычной ссылкой:
<a href="/index.php?module=cab&page=exit">Выход</a>
В архивы самые внимательные заметили, что index.php в конце не закрывает PHP блок, так же он не закрыт в variables, и в .php файлах в модулях. Это сделано умышленно и именно так надо писать .php файлы все. Закрываем PHP блок только в том случае, когда следом идёт вывод HTML в этом же ФАЙЛЕ.
Под каждым уроком есть 10 тестов, которые помогут Вам закрепить пройденный материал.
Один из тестов будет развивать Вашу логику и интеллект!
Чтобы получить доступ к тестам -
авторизируйтесь!
{"147":{"id":"147","lesson":"17","type":"yesno","title":"","text":"index.php - единая точка входа, в которой прописаны все настройки? index.tpl - единый файл-шаблон, в котором прописан head, шапка и подвал сайта. Верно?","answer_type":"Int","answer":"0","variables":{"0":""},"group":"lvl1","course":"2"},"148":{"id":"148","lesson":"17","type":"yesno","title":"","text":"Надо ли писать error_reporting в каждой странице модуля?","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"149":{"id":"149","lesson":"17","type":"yesno","title":"","text":"Надо ли в каждой странице модуля (main.tpl, contacts.tpl) прописывать шапку сайта, подвал и т.д. зная, что это же продублировано в index.tpl?","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"150":{"id":"150","lesson":"17","type":"yesno","title":"","text":"Чтобы избежать дублирования мы подключаем index.tpl с содержанием шапки и футера внутри наших страницах модуля (main.tpl, contacts.tpl)?","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"151":{"id":"151","lesson":"17","type":"radio","title":"","text":"Укажите неправильное описание структуры нашего сайта:","answer_type":"Int","answer":"2","variables":{"0":"В папке libs будут храниться наши функции сайта, а в папке config - настройки сайта","1":"Файл index.php - главное ядро сайта, которое распределяет работу сайта, а variables.php - страница по работе с переменными нашего сайта (модернизация и обработка)","2":"Выполняя домашку и расширяя наш сайт мы должны отредактировать variables.php указав новые модули и страницы, а так же index.php указав подключение новых файлов вроде авторизации","3":"Все утверждения правильные"},"group":"lvl1","course":"2"},"152":{"id":"152","lesson":"17","type":"radio","title":"","text":"Что является грамотной структурой страницы-модуля согласно нашего движка:","answer_type":"Int","answer":"0","variables":{"0":"Определённый раздел сайта выделяем в модуль, в котором размещаем страницы модуля","1":"Модули только для очень значимого функционала, остальное размещается в static","2":"Модуль разделяется на Вид, Контроллер и Модель (MVC)","3":"В skins мы размещаем контроллер, а в папке modules - ВИД"},"group":"lvl1","course":"2"},"153":{"id":"153","lesson":"17","type":"input","title":"","text":"Укажите имена файлов с расширениями через запятую для главной страницы модуля. Указать надо: имя Контроллера,имя Вида. Без пробела","answer_type":"Full","answer":"main.php,main.tpl","variables":{"0":""},"group":"lvl1","course":"2"},"154":{"id":"154","lesson":"17","type":"input","title":"","text":"Введя в браузере site.ru\/index.php?module=game у меня запустится обрабатываться скрипт. Укажите ВСЕ пути файлов участвующие в обработке данной страницы с расширением .php и .tpl в порядке их обработки PHP-интерпретатором через запятую и без пробелов между запятыми. Напоминаю, что правильный полный путь для index.php: .\/index.php, а для default.php - .\/libs\/default.php","answer_type":"Full","answer":".\/index.php,.\/config.php,.\/libs\/default.php,.\/variables.php,.\/modules\/game\/main.php,.\/skins\/default\/index.tpl,.\/skins\/default\/game\/main.tpl","variables":{"0":""},"group":"lvl1","course":"2"},"155":{"id":"155","lesson":"17","type":"yesno","title":"","text":"В index.php у нас находится управляющее ядро сайта, которое говорит какие файлы необходимо подключить и в каком порядке. Достаточно ли у Вас знаний сейчас вносить правки в этот файл?","answer_type":"Int","answer":"1","variables":{"0":""},"group":"lvl1","course":"2"},"156":{"id":"156","lesson":"17","type":"radio","title":"","text":"Какое из утверждений ошибочное:","answer_type":"Int","answer":"1","variables":{"0":"В Controller отсутствует вывод информации на экран","1":"В View отсутствует PHP код","2":"В Model не желателен вывод информации на экран и он работает по принципу функций","3":"В View допустимо использовать вспомогательные PHP конструкции с целью - вывести информацию на экран"},"group":"lvl1","course":"2"}}
{"0":"147","1":"148","2":"149","3":"150","4":"151","5":"152","6":"153","7":"154","8":"155","9":"156"}