Создание PHP+MySQL сайта: от простого к сложному — шаг первый Чулан* Для создания перспективного, расширяемого и эффективного сайта любой сложности следует начинать с простого. Это процесс нелёгкий, требует определённых базовых знаний PHP и MySQL, но если его рассмотреть по пунктам — то можно составить своего рода «рабочий план», который пригодится при создании новых сайтов. Подготовим «ядро» и базу для проекта. Вначале это будет обычный сайт визитка, но потом, добавляя функционал, его можна превратить во что угодно. Итак, приступим. 1. Подготовка базы данных. Создаём первую таблицу в БД MySQL Создаём новую базу данных, например «mysite». Лично я привык работать с кодировкой UTF-8, по-этому сразу оговорюсь: проследите, чтобы все текстовые файлы сайта, сама база, таблицы и поля таблиц были в одной кодировке. В новой базе делаем таблицу. Назовём её «pages». В этой таблице будут храниться статические страницы будущего сайта и информация о них. Таблица должна содержать следующие поля: page_id — идентификатор страницы (SMALLINT, primary key, auto_increment); page_alias — псевдоним страницы для строки адреса ЧПУ (VARCHAR, 255); page_title — название страницы в окне браузера (VARCHAR, 255); page_meta_d — мета описание страницы для тега meta description (VARCHAR, 255); page_meta_k — мета ключевые слова для тега meta keywords (VARCHAR, 255); page_h1 — заголовок страницы (VARCHAR, 255); page_s_desc — краткое описание материала, например если материалы сайта будут в виде блога (TEXT); page_content — основной текст страницы, который будет выводиться в центральную колонку сайта (TEXT); page_publish — содержит «Y» — если страница опубликована, или «N» — если она скрыта (CHAR, по умолчанию «Y»). Сразу после создания таблицы вставляем в неё значения для главной страницы сайта. В поле «page_alias» для главной страницы предлагаю вставить значение «home». Метатеги — соответственно тематике всего сайта. Таким же образом можно посоздавать другие страницы, например «О компании» с алиасом «about» и своими метатегами, или «Контакты» с алиасом «contacts» и т.д. 2. Создаём файл конфигурации сайта В корневой папке сайта, которая должна быть пуста на данном этапе, создаём папочку «cfg», в ней с помощью .htaccess закрываем доступ директивой «deny from all». Создаём файл core.php следующего содержания: link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass); mysql_select_db($this->db); mysql_query('SET NAMES utf8'); } function close() { mysql_close($this->link); } function run($query) { $this->query = $query; $this->result = mysql_query($this->query, $this->link); $this->err = mysql_error(); } function row() { $this->data = mysql_fetch_assoc($this->result); } function fetch() { while ($this->data = mysql_fetch_assoc($this->result)) { $this->fetch = $this->data; return $this->fetch; } } function stop() { unset($this->data); unset($this->result); unset($this->fetch); unset($this->err); unset($this->query); } } Этот файл пока содержит только простой класс подключения к базе данных, но в дальнейшем в него можно добавлять разные полезные функции, которые будут доступны из любого места в коде сайта. Не забудьте изменить логин и пароль к Вашей базе. Если Вы работаете в среде Windows, я могу порекоммендовать использовать редактор Notepad++. В этом редакторе есть нумерация строк, и он легко переводит текст из одной кодировки в другую. ВНИМАНИЕ! Если Вы работаете в кодировке UTF-8 — конвертируйте файлы в UTF-8 without BOM — это поможет избежать проблем в будущем. 3. Создаём index.php — главный контроллер сайта Файл конфигурации создан. Теперь в корневой папке сайта создаём index.php — это и будет основной скрипт сайта, своего рода «главный контроллер». Содержание файла index.php: connect(); // ГЛАВНЫЙ КОНТРОЛЛЕР 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(); Переменная $_GET[option] будет указывать главному контроллеру какой компонент сайта загружать при запросе. Сейчас в нашем сайте предусмотрено только два компонента: «страница» и «главная страница» (в принципе можно обойтись и одним компонентом вывода обычной страницы, но часто вид главной страницы сайта отличается от обычных страниц пунктов меню). Логика работы главного контроллера такова: из URL строки извлекается название нужного компонента (значение переменной $option), в зависимости от его значения подключается файл самого компонента (содержится в папке /com). Файл компонента выполняет все необходимые работы, извлекает из базы данные и записывает их в переменные, для передачи в шаблон дизайна. В самом конце подключается файл дизайна сайта, в который и передаются все переменные и данные, извлечённые в компонентах. Это звучит намного сложнее, чем работает. 4. Создаём компонент вывода обычной страницы В корне сайта создаём папочку «com» — в ней будут храниться файлы компонентов. Компонент сайта, в моём понимании — это файл, в котором происходит обработка данных для разных разделов сайта. Например компонент обычной страницы извлекает из базы данных название, описание и текст материала, и записывает их в переменные $title, $meta_d, $meta_k, $content и др. Эти данные потом передаются в шаблон дизайна (под каждый компонент можно создавать свой шаблон дизайна) и выводятся пользователю в виде HTML-страницы. Например, компонент каталога, который можно создать в будущем, выполнял бы почти то же самое, но с данными про товары — а там своя специфика, другие поля в таблице, итд. По-этому для каждого функционального раздела сайта стоит создавать отдельный компонент. В схеме MVC (Model-View-Controller) компонент выполняет роль модели. Создаём в папке «com» файл «page.php». Содержимое файла следущее: run($query); $db->row(); // ПЕРЕМЕННЫЕ КОМПОНЕНТА $id = $db->data[page_id]; $alias = $db->data[page_alias]; $title = $db->data[page_title]; $h1 = $db->data[page_h1]; $meta_d = $db->data[page_meta_d]; $meta_k = $db->data[page_meta_k]; $s_desc = $db->data[page_s_desc]; $component = $db->data[page_content]; // ЕСЛИ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ if (!$id) { header("HTTP/1.1 404 Not Found"); $component = "ОШИБКА 404! Данной страницы не существует"; } $db->stop(); 5. Создаём компонент вывода главной страницы Главная страница у нас в базе данных хранится под псевдонимом «home», и пока по своей структуре не отличается от обычных страниц сайта — это просто статья. Тем не менее создадим для неё отдельный компонент — на перспективу, так сказать. Содержимое компонента «home.php» в папке «com» почти совпадает с содержимым компонента обычной страницы, за исключением строки запроса к базе и названия компонента. Строка запроса теперь выглядит так: $query = "SELECT * FROM wx_pages WHERE page_alias='home' LIMIT 1"; 6. Создаём шаблон дизайна всего сайта В корне сайта создаём файл template.php. По сути это обычный макет web-дизайна в формате HTML+CSS, только с PHP переменными в нужных местах. Между тегами title вставочка , в центральной колонке сайта вставочка и так по всему шаблону расставляем нужные переменные, которые объявлены в компонентах. В корневой папке также должны быть папки «css» и «images» для элементов дизайна. В файле /css/style.css — можно настроить стили по своему усмотрению. 7. Чистые ссылки и файл .htaccess Для создания чистых ссылок я использую mod_rewrite с прямыми указаниями правил для каждого компонента отдельно, так как разбор адресной строки средствами самого контроллера считаю излишним функционалом. Содержимое .htaccess на данном этапе такое: RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f # ЗАПРЕЩЁННЫЕ ФАЙЛЫ RewriteRule .htaccess - [F] RewriteRule template.php - [F] # ПРАВИЛА mod_rewrite RewriteRule page/([a-z0-9_-]+)([\/]{0,1})\.htm$ index.php?option=page&alias=$1 [L] В будущем мы будем дописывать правила для компонентов поиска, каталога, блога статей и т.д. Смысл один: преобразовать ссылки вида «mysite.com/index.php?option=pages&alias=about» в ссылку вида «mysite.com/pages/about.htm» — смотрится довольно красиво. Старайтесь в разработке избегать массива $_GET в целях безопасности и не надеяться на него. Целесообразно хранить в нём только параметры для главного контроллера (переменная $option) и для компонента (переменная $alias). Также в каждой папке сайта «на всякий случай» создайте пустой файл index.html — это нужно для того, чтобы при обращении к каталогу через адресную строку ничего не отображалось. Метки: php, mysql, движок сайта, контроллер, создание сайта, mvc Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом. ПОХОЖИЕ ПУБЛИКАЦИИ 12 марта 2018 в 16:22 Создание своей CMS — очередной велосипед? Или шаг в карьере? 6 апреля 2018 в 18:25 Для чего нужен PHP парсер? 10 апреля 2018 в 11:35 Телеграм Бот (для уведомлений, PHP) 23 апреля 2018 в 23:04 Локальный пакет Composer для создания проектов 29 мая 2018 в 20:23 Сообщения с сайта в ВК – просто и эффективно – PHP+CUrl