сайт на php с кодом

Создание PHP+MySQL сайта: от простого к сложному — шаг первый

Для создания перспективного, расширяемого и эффективного сайта любой сложности следует начинать с простого. Это процесс нелёгкий, требует определённых базовых знаний PHP и MySQL, но если его рассмотреть по пунктам — то можно составить своего рода «рабочий план», который пригодится при создании новых сайтов. Подготовим «ядро» и базу для проекта. Вначале это будет обычный сайт визитка, но потом, добавляя функционал, его можна превратить во что угодно. Итак, приступим.

1. Подготовка базы данных. Создаём первую таблицу в БД MySQL

Создаём новую базу данных, например «mysite». Лично я привык работать с кодировкой UTF-8, по-этому сразу оговорюсь: проследите, чтобы все текстовые файлы сайта, сама база, таблицы и поля таблиц были в одной кодировке.
В новой базе делаем таблицу. Назовём её «pages». В этой таблице будут храниться статические страницы будущего сайта и информация о них. Таблица должна содержать следующие поля:

Сразу после создания таблицы вставляем в неё значения для главной страницы сайта. В поле «page_alias» для главной страницы предлагаю вставить значение «home». Метатеги — соответственно тематике всего сайта. Таким же образом можно посоздавать другие страницы, например «О компании» с алиасом «about» и своими метатегами, или «Контакты» с алиасом «contacts» и т.д.

2. Создаём файл конфигурации сайта

function close() <
mysql_close($this->link);
>

Этот файл пока содержит только простой класс подключения к базе данных, но в дальнейшем в него можно добавлять разные полезные функции, которые будут доступны из любого места в коде сайта. Не забудьте изменить логин и пароль к Вашей базе.

Если Вы работаете в среде Windows, я могу порекоммендовать использовать редактор Notepad++. В этом редакторе есть нумерация строк, и он легко переводит текст из одной кодировки в другую. ВНИМАНИЕ! Если Вы работаете в кодировке UTF-8 — конвертируйте файлы в UTF-8 without BOM — это поможет избежать проблем в будущем.

3. Создаём index.php — главный контроллер сайта

Файл конфигурации создан. Теперь в корневой папке сайта создаём index.php — это и будет основной скрипт сайта, своего рода «главный контроллер». Содержание файла index.php:

// ГЛАВНЫЙ КОНТРОЛЛЕР
switch ($_GET[option]) <
case «page»:
include($_SERVER[DOCUMENT_ROOT].»/com/page.php»);
break;
default:
include($_SERVER[DOCUMENT_ROOT].»/com/home.php»);
break;
>

include ($_SERVER[DOCUMENT_ROOT].»/template.php»);
$db->close();

4. Создаём компонент вывода обычной страницы

Создаём в папке «com» файл «page.php». Содержимое файла следущее:

5. Создаём компонент вывода главной страницы

Главная страница у нас в базе данных хранится под псевдонимом «home», и пока по своей структуре не отличается от обычных страниц сайта — это просто статья. Тем не менее создадим для неё отдельный компонент — на перспективу, так сказать.

Содержимое компонента «home.php» в папке «com» почти совпадает с содержимым компонента обычной страницы, за исключением строки запроса к базе и названия компонента. Строка запроса теперь выглядит так:

$query = «SELECT * FROM wx_pages WHERE page_alias=’home’ LIMIT 1»;

6. Создаём шаблон дизайна всего сайта

В корневой папке также должны быть папки «css» и «images» для элементов дизайна. В файле /css/style.css — можно настроить стили по своему усмотрению.

RewriteEngine On
RewriteBase /

Источник

Как самостоятельно сделать сайт на PHP?

PHP и HTML

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Как видно на скриншоте, строка не отображается в html коде страницы. И в браузере, и в коде видны лишь возвращенные дата и время. А это значит, что скрипт был обработан на серверной стороне. Поэтому создание сайта на php кардинально отличается от написания простых html страниц.

Динамический сайт

Современные сайты бывают двух основных типов:

Динамический сайт на php состоит из следующих файлов:

Как пишется сайт на PHP

Имеется html сайт со следующей структурой и дизайном:

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Код файла style.css :

Перед тем, как написать сайт на php до конца, весь html код нужно раскинуть по нескольким файлам:

А если просмотреть в браузере html код страницы, то вы увидите код первоначального исходника:

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

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

Путь в обход

Но такая разработка сайта требует затраты сил, наличия специализированного программного обеспечения и знаний. Поэтому хотелось бы найти более легкий вариант. Тогда следует воспользоваться конструктором php сайтов.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

С более подробным обзором популярных онлайн-конструкторов сайтов можно ознакомиться здесь. В интернете встречаются и десктопные версии конструкторов сайтов, но большая их часть платная.

Но генерация страниц ресурса происходит в них динамически. Наиболее популярные CMS :

Источник

УЧЕБНЫЕ МАТЕРИАЛЫ

Web-верстка, компьютерная графика,
мультимедиа

Уроки PHP и MySQL

Уроки PHP. Урок 3. Создание сайта на PHP

Функция require() при ошибке в сценарии останавливает выполнение сценария, а функция include() сообщает об ошибке и продолжает выполнение сценария. В этом разница между ними.

Упражнение 1. Создание простого шаблона сайта

На рис. 1 приведен шаблон сайта. В основе шаблона лежит макетная таблица, в ячейках с цветным фоном расположены одинаковые элементы сайта, на разных страницах сайта меняется содержимое только центральной ячейки.

Для создания единых элементов можно использовать функцию require, действие которой аналогично функции readfile.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

1. Создайте папку site_inc.ru в папке home на виртуальном сервере.

3. Перезапустите Денвер. Все файлы простого шаблона сохраняйте в папку www.

4. Осуществите код из рис. 2, и сохраните файл под именем index.php в папке www.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

5. Создайте файл verh.inc (рис. 3) и сохраните в папку www.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

6. Создайте файл left.inc (рис. 4) и сохраните в папку www.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

7. Создайте файл right.inc (рис. 5) и сохраните в папку www.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

8. Создайте файл niz.inc (рис. 6) и сохраните в папку www.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

9. Просмотрите результат, набрав в адресной строке www.site_inc.ru и нажав Enter (рис. 7).

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

10. Копированием файла index.php создайте файлы: kompany.php, product.php, uslugi.php, kontakt.php. В каждом файле измените содержимое центральной ячейки. Проверьте работоспособность гиперссылок. Результат на рис. 8.

11. Измените содержимое файла verh.inc. Убедитесь, что изменения произошли на всех страницах сайта.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Упражнение 2. Создание сайта на PHP с разворачивающейся панелью навигации

Будем создавать сайт газеты «Из первых рук» (рис. 9).

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рис. 9. Сайт газеты «Из первых рук»

В данном уроке создание сайта на PHP начинается с главной страницы.

1. В директории home на виртуальном сервере создайте папку с именем gazeta.local, внутри нее папку www. Запустите/перезапустите Денвер.

2. В папке www создайте главную страницу сайта index.php и впишите в нее код из листинга на рис. 10:

3. Создайте папку image в корне сайта (папка www). Скопируйте в нее изображения logo.gif и fon.jpg из папки CD_php/ php-3.

4. Создайте внутри папки www папку flash и скопируйте в нее файл banner.swf из папки CD_php/php-3.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Для просмотра в браузере в адресной строке введите gazeta.local/ Должно получиться так, как на рисунке 11.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Как видно из рис. 10, наша страница берет все стили из файла style.css, который находится в папке CSS. Отсюда следующее задание.

1. Создайте папку CSS.

2. В ней создайте файл style.css, и впишите в него код, как на рис. 12.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Создание сайта на PHP требует достаочно частой проверки внесенных изменений. Для проверки в адресной строке браузера введите gazeta.local/ Если все задания выполнены правильно, то в окне браузера отобразится сайт газеты «Из первых рук» (рис.13).

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рис. 13. Результат выполнения заданий 1 и 2

РАЗВОРАЧИВАЮЩАЯСЯ ПАНЕЛЬ НАВИГАЦИИ

Сначала создадим несколько страниц. Страницу с новостями назовем – news.php; статьи – stats.php; рубрики – rubrics.php; партнеры – partners.php; главная уже создана – index.php.

Также добавим подпункты в меню новости и статьи. В новостях добавим: «горячие» новости – hotnews.php; последние новости – lastnews.php. В статьях: заказать статью – zakaz.php; TOP 10 – TOP10.php.

Имея теперь название страниц, займемся созданием панели навигации.

1. Создайте в корне сайта файл menu.php.

2. Наберите в нем код из листинга на рис. 14.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рисунок 14. Файл menu.php

Подробней разберем код из листинга на рис. 14.

$but1=’ Главная ’; // здесь определяем переменную but1, которая несет в себе часть панели навигации. Также из значения атрибута href видно, что при переходе на страницу index.php, передается значение переменной t1, равное единице.

Так как остальные переменные but выполняют подобную функцию, мы сразу рассмотрим строку 18:

if ($t1==’1’) <echo $but1.$but2.$but3.$but4.$but5;>; // здесь выполняется условие, при соблюдении которого, скрипт выводит на странице значение определенных переменных.

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

Пришло время использовать функцию include(). Чтобы не путаться в переменных $but и в операторах if, вынесем часть кода, которая содержит значения переменных $but в отдельный файл.

1. Создайте в корне сайта config.php.

В результате выполнения задания 4, коды файлов menu.php и config.php должны соответствовать листингам на рис. 15 и 16.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рисунок 15. Файл menu.php

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рисунок 16. Файл config.php

Мы создали главную страницу сайта, сотдельный файл со всеми стилями, и разворачивающуюся панель навигации. Но проверить панель в действии, пока не можем, так как не существует страниц, на которые она ссылается. Значит, пора браться за создание шаблона страниц. Но сначала разберем логику, по которой будет создан наш шаблон.

Рассмотрим наш сайт. Основная часть страницы, текст в центре, окружена панелью навигации слева, дублером навигации и шапкой страницы сверху, и баннером справа. Только текст в центре несет в себе индивидуальное наполнение страницы, все остальное копируется на каждой странице. Внеся изменения, например, в заголовке title, нам придется вносить изменения во все файлы сайта, что довольно долго и не интересно.

Теперь посмотрим на сайт, точнее на его главную страничку, изнутри. Весь код идет сверху вниз, а 10% индивидуальной информации расположены где то посередине. Что наводит на простую мысль, которую мы реализуем, выполнив задание 5.

1. Скопируйте код, который предоставлен на рис. 17, из файла index.php.

2. Создайте файл top.php и вставьте код в него.

3. Повторите шаг 1 и 2, используя листинг на рис. 18 и создав файл endmenu.php.

4. Повторите шаг 1 и 2, используя листинг на рис. 19 и создав файл down.php.

В результате у вас должны появиться три новых файла, код которых должен соответствовать рис. 17, 18 и 19.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Рисунок 19. Файл down.php

Теперь изменим главную страницу, сделав ее шаблонной.

Замените весь код страницы index.php на пять строчек из листинга на рис. 20.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Посмотрите сайт в браузере (рис. 21).

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Создадим остальные страницы сайта.

1. Создайте файл news.php, вписав в него код из рис. 20, заменив строку 4 на:

2. Создайте файл hotnews.php, вписав в него код из рис. 20, заменив строку 4 на:

Буквально сегодня произошло.

3. Создайте файл lastnews.php, вписав в него код из рис. 20, заменив строку 4 на:

За последнюю неделю.

4. Создайте файл stats.php, вписав в него код из рис. 20, заменив строку 4 на:

Список статей за месяц.

5. Создайте файл zakaz.php, вписав в него код из рис. 20, заменив строку 4 на:

6. Создайте файл TOP10.php, вписав в него код из рис. 20, заменив строку 4 на:

7. Создайте файл rubriks.php, вписав в него код из рис. 20, заменив строку 4 на:

8. Создайте файл partners.php, вписав в него код из рис. 20, заменив строку 4 на:

Сейчас надо добавить гиперссылки для дублера навигации.

Замените в файле top.php часть кода, которая указана на рис. 22, на код из рис. 23.

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Проверьте работу всех ссылок (рис. 24)

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

1. Что делает функция include()?

2. Чем отличается функция include() от require()?

Источник

Урок 2. Создаём первую страницу на PHP. Операторы вывода

Принцип работы кода

Как выглядит PHP код и куда его вставлять?

Код PHP (файл index.php)

Демонстрация Скачать исходники
Результатом работы кода будет вывод обычного текста Привет, Мир!. Спросите зачем писать код php, чтобы вывести обычный текст? Оператор echo, о котором поговорим чуть позже, нужен не просто для вывода текста. Чаще echo используют для отображения результата работы какой-то функции, которая производила подсчёт или брала данные из БД ( Что такое База данных? ). То есть для отображения динамических данных.

Оператор echo в PHP

Как Вы уже поняли, оператор echo нужен для вывода данных. Содержимое (в нашем случае пока только текст) берём в кавычки, а в конце ставим точку с запятой ; это обозначает конец работы оператора.

Код PHP

Программа выведет Привет, Мир!.
В самом первом примере мы вставляли в html небольшой код php. Теперь, наоборот, внедрим в php-код элементы html.

Код PHP

В результате получим пустую страничку с заголовком Привет, Мир!

Оператор print в PHP

Текст будет выведен также, как и написан.

Чтобы скрипт не выдавал Вам ошибку, следите за тем, чтобы после echo 1. не содержать ни одного html-элемента. Страница и текст всё равно отобразятся. html нужен для красивой разметки содержимого.

2. быть как включен в html-код, так и содержать его внутри своих операторов вывода (echo, print и тд). Главное не забывать конструкцию

Со следующих уроков мы разберём основы создания сайтов на php, в которых увидите все плюсы использования данного языка!

Источник

Реализация MVC паттерна на примере создания сайта-визитки на PHP

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

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

Оглавление

Введение

Многие начинают писать проект для работы с единственной задачей, не подразумевая, что это может вырасти в многопользовательскую систему управления, ну допустим, контентом или упаси бог, производством. И всё вроде здорово и классно, всё работает, пока не начинаешь понимать, что тот код, который написан — состоит целиком и полностью из костылей и хардкода. Код перемешанный с версткой, запросами и костылями, неподдающийся иногда даже прочтению. Возникает насущная проблема: при добавлении новых фич, приходится с этим кодом очень долго и долго возиться, вспоминая «а что же там такое написано то было?» и проклинать себя в прошлом.

Вы можеть быть даже слышали о шаблонах проектирования и даже листали эти прекрасные книги:

Представленная статья будет полезна в первую очередь новичкам. Во всяком случае, я надеюсь что за пару часов вы сможете получить представление о реализации MVC паттерна, который лежит в основе всех современных веб-фреймворков, а также получить «пищу» для дальнейших размышлений над тем — «как стоит делать». В конце статьи приводится подборка полезных ссылок, которые также помогут разобраться из чего состоят веб-фреймворки (помимо MVC) и как они работают.

Прожженные PHP-программисты вряд ли найдут в данной статье что-то новое для себя, но их замечания и комментарии к основному тексту были бы очень кстати! Т.к. без теории практика невозможна, а без практики теория бесполезна, то сначала будет чуть-чуть теории, а потом перейдем к практике. Если вы уже знакомы с концепцией MVC, можете пропустить раздел с теорией и сразу перейти к практике.

1. Теория

Шаблон MVC описывает простой способ построения структуры приложения, целью которого является отделение бизнес-логики от пользовательского интерфейса. В результате, приложение легче масштабируется, тестируется, сопровождается и конечно же реализуется.

Рассмотрим концептуальную схему шаблона MVC (на мой взгляд — это наиболее удачная схема из тех, что я видел):

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

В архитектуре MVC модель предоставляет данные и правила бизнес-логики, представление отвечает за пользовательский интерфейс, а контроллер обеспечивает взаимодействие между моделью и представлением.

Типичную последовательность работы MVC-приложения можно описать следующим образом:

Модель — содержит бизнес-логику приложения и включает методы выборки (это могут быть методы ORM), обработки (например, правила валидации) и предоставления конкретных данных, что зачастую делает ее очень толстой, что вполне нормально.
Модель не должна напрямую взаимодействовать с пользователем. Все переменные, относящиеся к запросу пользователя должны обрабатываться в контроллере.
Модель не должна генерировать HTML или другой код отображения, который может изменяться в зависимости от нужд пользователя. Такой код должен обрабатываться в видах.
Одна и та же модель, например: модель аутентификации пользователей может использоваться как в пользовательской, так и в административной части приложения. В таком случае можно вынести общий код в отдельный класс и наследоваться от него, определяя в наследниках специфичные для подприложений методы.

Вид — используется для задания внешнего отображения данных, полученных из контроллера и модели.
Виды cодержат HTML-разметку и небольшие вставки PHP-кода для обхода, форматирования и отображения данных.
Не должны напрямую обращаться к базе данных. Этим должны заниматься модели.
Не должны работать с данными, полученными из запроса пользователя. Эту задачу должен выполнять контроллер.
Может напрямую обращаться к свойствам и методам контроллера или моделей, для получения готовых к выводу данных.
Виды обычно разделяют на общий шаблон, содержащий разметку, общую для всех страниц (например, шапку и подвал) и части шаблона, которые используют для отображения данных выводимых из модели или отображения форм ввода данных.

Контроллер — связующее звено, соединяющее модели, виды и другие компоненты в рабочее приложение. Контроллер отвечает за обработку запросов пользователя. Контроллер не должен содержать SQL-запросов. Их лучше держать в моделях. Контроллер не должен содержать HTML и другой разметки. Её стоит выносить в виды.
В хорошо спроектированном MVC-приложении контроллеры обычно очень тонкие и содержат только несколько десятков строк кода. Чего, не скажешь о Stupid Fat Controllers (SFC) в CMS Joomla. Логика контроллера довольно типична и большая ее часть выносится в базовые классы.
Модели, наоборот, очень толстые и содержат большую часть кода, связанную с обработкой данных, т.к. структура данных и бизнес-логика, содержащаяся в них, обычно довольно специфична для конкретного приложения.

1.1. Front Controller и Page Controller

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

Надеюсь, вы уже успели заметить, что у разных сайтов могут быть совершенные разные форматы построения адресной строки. Каждый формат может отображать архитектуру web-приложения. Хотя это и не всегда так, но в большинстве случаев это явный факт.

Рассмотрим два варианта адресной строки, по которым показывается какой-то текст и профиль пользователя.

Подход с множеством точек взаимодействия вы можете наблюдать на форумах с движком phpBB. Просмотр форума происходит через сценарий viewforum.php, просмотр топика через viewtopic.php и т.д. Второй подход, с доступом через один физический файл сценария, можно наблюдать в моей любимой CMS MODX, где все обращения проходят через index.php.

Эти два подхода совершенно различны. Первый — характерен для шаблона контроллер страниц (Page Controller), а второй подход реализуется паттерном контроллер запросов (Front Controller). Контроллер страниц хорошо применять для сайтов с достаточно простой логикой. В свою очередь, контроллер запросов объединяет все действия по обработке запросов в одном месте, что даёт ему дополнительные возможности, благодаря которым можно реализовать более трудные задачи, чем обычно решаются контроллером страниц. Я не буду вдаваться в подробности реализации контроллера страниц, а скажу лишь, что в практической части будет разработан именно контроллер запросов (некоторое подобие).

1.2. Маршрутизация URL

Маршрутизация URL позволяет настроить приложение на прием запросов с URL, которые не соответствуют реальным файлам приложения, а также использовать ЧПУ, которые семантически значимы для пользователей и предпочтительны для поисковой оптимизации.

К примеру, для обычной страницы, отображающей форму обратной связи, URL мог бы выглядеть так:
http://www.example.com/contacts.php?action=feedback

Приблизительный код обработки в таком случае:

Думаю, почти все так раньше делали.

С использованием движка маршрутизации URL вы сможете для отображения той же информации настроить приложение на прием таких запросов:
http://www.example.com/contacts/feedback

Здесь contacts представляет собой контроллер, а feedback — это метод контроллера contacts, отображающий форму обратной связи и т.д. Мы еще вернемся к этому вопросу в практической части.

Также стоит знать, что маршрутизаторы многих веб-фреймворков позволяют создавать произвольные маршруты URL (указать, что означает каждая часть URL) и правила их обработки.
Теперь мы обладаем достаточными теоретическими знаниями, чтобы перейти к практике.

2. Практика

Для начала создадим следующую структуру файлов и папок:

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Забегая вперед, скажу, что в папке core будут храниться базовые классы Model, View и Controller.
Их потомки будут храниться в директориях controllers, models и views. Файл index.php это точка в хода в приложение. Файл bootstrap.php инициирует загрузку приложения, подключая все необходимые модули и пр.

Будем идти последовательно; откроем файл index.php и наполним его следующим кодом:

Тут вопросов возникнуть не должно.

Следом, сразу же перейдем к фалу bootstrap.php:

Первые три строки будут подключать пока что несуществующие файлы ядра. Последние строки подключают файл с классом маршрутизатора и запускают его на выполнение вызовом статического метода start.

2.1. Реализация маршрутизатора URL

Пока что отклонимся от реализации паттерна MVC и займемся мрашрутизацией. Первый шаг, который нам нужно сделать, записать следующий код в .htaccess:

Этот код перенаправит обработку всех страниц на index.php, что нам и нужно. Помните в первой части мы говорили о Front Controller?!

Маршрутизацию мы поместим в отдельный файл route.php в директорию core. В этом файле опишем класс Route, который будет запускать методы контроллеров, которые в свою очередь будут генерировать вид страниц.

Замечу, что в классе реализована очень упрощенная логика (несмотря на объемный код) и возможно даже имеет проблемы безопасности. Это было сделано намерено, т.к. написание полноценного класса маршрутизации заслуживает как минимум отдельной статьи. Рассмотрим основные моменты…

С помощью функции explode производится разделение адреса на составлющие. В результате мы получаем имя контроллера, для приведенного примера, это контроллер contacts и имя действия, в нашем случае — feedback.

Далее подключается файл модели (модель может отсутствовать) и файл контроллера, если таковые имеются и наконец, создается экземпляр контроллера и вызывается действие, опять же, если оно было описано в классе контроллера.

Таким образом, при переходе, к примеру, по адресу:
example.com/portfolio
или
example.com/portfolio/index
роутер выполнит следующие действия:

2.2. Возвращаемся к реализации MVC

Перейдем в папку core и добавим к файлу route.php еще три файла: model.php, view.php и controller.php

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

Напомню, что они будут содержать базовые классы, к написанию которых мы сейчас и приступим.

Содержимое файла model.php

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

Содержимое файла view.php

В нашем случае общий шаблон будет содержать header, menu, sidebar и footer, а контент страниц будет содержаться в отдельном виде. Опять же это сделано для упрощения.

Содержимое файла controller.php

Метод action_index — это действие, вызываемое по умолчанию, его мы перекроем при реализации классов потомков.

2.3. Реализация классов потомков Model и Controller, создание View’s

Теперь начинается самое интересное! Наш сайт-визитка будет состоять из следущих страниц:

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

На предыдущем рисунке отдельно выделен файл template_view.php — это шаблон, содержащий общую для всех страниц разметку. В простейшем случае он мог бы выглядеть так:

Для придания сайту презентабельного вида сверстаем CSS шаблон и интегририруем его в наш сайт путем изменения структуры HTML-разметки и подключения CSS и JavaScript файлов:

В конце статьи, в разделе «Результат», приводится ссылка на GitHub-репозиторий с проектом, в котором проделаны действия по интеграции простенького шаблона.

2.3.1. Создаем главную страницу

Начнем с контроллера controller_main.php, вот его код:

В метод generate экземпляра класса View передаются имена файлов общего шаблона и вида c контентом страницы.
Помимо индексного действия в контроллере конечно же могут содержаться и другие действия.

Файл с общим видом мы рассмотрели ранее. Рассмотрим файл контента main_view.php:

Здесь содержиться простая разметка без каких либо PHP-вызовов.

Для отображения главной странички можно воспользоваться одним из следующих адресов:

Пример с использованием вида, отображающего данные полученные из модели мы рассмотрим далее.

2.3.2. Создадаем страницу «Портфолио»

В нашем случае, страница «Портфолио» — это единственная страница использующая модель.
Модель обычно включает методы выборки данных, например:

Класс контроллера модели содержится в файле controller_portfolio.php, вот его код:

В переменную data записывается массив, возвращаемый методом get_data, который мы рассматривали ранее.
Далее эта переменная передается в качестве параметра метода generate, в который также передаются: имя файла с общим шаблон и имя файла, содержащего вид c контентом страницы.

Вид содержащий контент страницы находится в файле portfolio_view.php.

Здесь все просто, вид отображает данные полученные из модели.

2.3.3. Создаем остальные страницы

Остальные страницы создаются аналогично. Их код досутпен в репозитории на GitHub, ссылка на который приводится в конце статьи, в разделе «Результат».

3. Результат

А вот что получилось в итоге:

сайт на php с кодом. Смотреть фото сайт на php с кодом. Смотреть картинку сайт на php с кодом. Картинка про сайт на php с кодом. Фото сайт на php с кодом

А вот в этой версии я набросал следующие классы (и соответствующие им виды):

4. Заключение

Шаблон MVC используется в качестве архитектурной основы во многих фреймворках и CMS, которые создавались для того, чтобы иметь возможность разрабатывать качественно более сложные решения за более короткий срок. Это стало возможным благодаря повышению уровня абстракции, поскольку есть предел сложности конструкций, которыми может оперировать человеческий мозг.

Но, использование веб-фреймворков, типа Yii или Kohana, состоящих из нескольких сотен файлов, при разработке простых веб-приложений (например, сайтов-визиткок) не всегда целесообразно. Теперь мы умеем создавать красивую MVC модель, чтобы не перемешивать Php, Html, CSS и JavaScript код в одном файле.

Данная статья является скорее отправной точкой для изучения CMF, чем примером чего-то истинно правильного, что можно взять за основу своего веб-приложения. Возможно она даже вдохновила Вас и вы уже подумываете написать свой микрофреймворк или CMS, основанные на MVC. Но, прежде чем изобретать очередной велосипед с «блекджеком и шлюхами», еще раз подумайте, может ваши усилия разумнее направить на развитие и в помощь сообществу уже существующего проекта?!

P.S.: Статья была переписана с учетом некоторых замечаний, оставленных в комментариях. Критика оказалась очень полезной. Судя по отклику: комментариям, обращениям в личку и количеству юзеров добавивших пост в избранное затея написать этот пост оказалось не такой уж плохой. К сожалению, не возможно учесть все пожелания и написать больше и подробнее по причине нехватки времени… но возможно это сделают те таинственные личности, кто минусовал первоначальный вариант. Удачи в проектах!

5. Подборка полезных ссылок по сабжу

В статье очень часто затрагивается тема веб-фреймворков — это очень обширная тема, потому что даже микрофреймворки состоят из многих компонентов хитро увязанных между собой и потребовалась бы не одна статья, чтобы рассказать об этих компонентах. Тем не менее, я решил привести здесь небольшую подборку ссылок (по которым я ходил при написаниие этой статьи), которые так или иначе касаются темы фреймворков.

5.1. MVC и другие паттерны

5.2. Шаблонизация

PHP сам по себе является шаблонизатором, но все же…

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *