Строим свою CMS на PHP и MySQL. Часть 1
Задача построения системы управления содержанием (CMS) может привести в замешательство новичка разработчика PHP. Но нет так страшен черт, как его малюют! В данной серии уроков мы построим простую, но полностью работоспособную систему с нуля.
В ходе процесса вы научитесь создавать базы и таблицы MySQL, работать с объектами, константами, включениями, сессиями и прочими инструментами PHP. Кроме того мы покажем, как отделять логику приложения от презентации и сделать код PHP более безопасным. А также вам откроется многое другое, полезное в деле создания собственной системы мечты.
Вы можете посмотреть работу готового приложения на странице демонстрации (с целью безопасности включен режим "только чтение", так что добавлять, изменять и удалять статьи не получится). Также можно скачать полный код PHP нашей меленькой CMS с переведенными комментариями.
Примечание: для изучения материалов уроков потребуется веб сервер Apache с установленным модулем PHP и сервер MySQL. Для работы на локальном компьютере можно воспользоваться одним из инструментов веб разработчика: XAMPP (на английском языке), Denwer, Open server или другим.
Функционал нашей CMS
Первым делом надо точно определиться, что будет делать наша CMS. Итак, вот список функций:
Клиентская часть:
- Главная страница, на которой выводиться список последних 5 статей
- Страница со списком всех статей
- Страница просмотра отдельной статьи
Серверная часть:
- Вход/выход для администратора
- Список всех статей
- Добавление новой статьи
- Редактирование существующей статьи
- Удаление существующей статьи
Каждая статьи имеет собственный заголовок, резюме и дату публикации.
Планирование работ
Для создания нашей CMS нужно сделать следующие шаги
- Создать базу данных
- Создать таблицу
articles
- Сделать файл конфигурации
- Построить класс
Article
- Написать скрипт клиентской части
index.php
- Написать скрипт серверной части
admin.php
- Создать шаблон клиентской части
- Создать шаблон серверной части
- Создать таблицу стилей и логотип системы
Примечание: на страницах уроков приводится код для нашей CMS готовый к копированию в ваши текстовые файлы. Если у вас нет желания создавать файлы самостоятельно, то можно скачать архив с исходниками, в котором содержатся все нужный папки и файлы.
Шаг 1. Создаем базу данных
На первом шаге нужно создать базу данных MySQL для хранения содержания. Можно сделать так:
-
Запускаем программу клиент
mysql
Открываем окно терминала и набираем командуmysql -u username -p
После запроса введите пароль для доступа к MySQL.
username
- имя пользователя, который имеет полномочия для создания баз данных. В случае работы на локальном компьютере можно использоватьroot
, хотя lzk безопасности всегда следует создавать пользователя с другим именем для решения задач администрирования. -
Создаем базу данных После метки
mysql>
вводим:create database cms;
И нажимаем Enter.
-
Выходим из программы клиента
mysql
После меткиmysql>
вводим:exit
И нажимаем Enter.
Теперь у нас есть пустая база данных, в которой можно размещать таблицы и содержание.
Для решения такой задачи также можно воспользоваться инструментами для администрирования баз данных, таким как phpMyAdmin, cPanel или Plesk (если они установлены на вашем сервере). В некоторых случаях использование подобных инструментов является единственным доступным для пользоавтеля инструментом для работы с базами данных (ситуация зависит от правил, установленных на вашем хостинге).
Шаг 2. Создаем таблицу articles
Наша простая CMS имеет единственную таблицу в базе данных: articles
. В ней содержатся все статьи в нашей системе.
Создадим схему таблицы. Схема таблицы описывает типы данных, которые могут содержаться в таблице и информацию о ней.
Создаем текстовой файл tables.sql
на жестком диске и добавляем в него следующий код:
DROP TABLE IF EXISTS articles; CREATE TABLE articles ( id smallint unsigned NOT NULL auto_increment, publicationDate date NOT NULL, # Когда статья опудликована title varchar(255) NOT NULL, # Полный заголовок статьи summary text NOT NULL, # Резюме статьи content mediumtext NOT NULL, # HTML содержание статьи PRIMARY KEY (id) );
Выше приведенный код определяет схему таблицы articles
. Он написан на SQL, языке для создания и манипулирования базами данных в MySQL (и во многих других системах).
Разберем выше приведенный код
- Создаем таблицу
articles
ВыражениеDROP TABLE IF EXISTS articles
удаляет любую существующую таблицуarticles
(вместе с данным - осторожно!). Мы выполняем данную операцию чтобы в базе не было двух таблиц с одинаковыми именами. ВыражениеCREATE TABLE articles ( )
создает новую таблицуarticles
. Код, размещенный в скобках, определяет структуру данных в таблице... - Определяем для каждой статьи уникальный ID Теперь можно определять структуру таблицы. Таблица состоит из набора полей (также их называют столбцами). Каждое поле содержит опредленный тип информации о статье. Сначала мы создаем поле
id
. Оно имеет типsmallint unsigned
(без знаковое маленькое целое), то есть число от 0 до 65,535. Таким образом, наша CMS может содержать до 65,535 статей. Также для него определяется атрибутNOT NULL
, который созначает, что поле не может быть пустым (null). Данное свойство существенно облегчает труд разработчика. Добавляем атрибутauto_increment
, который указывает MySQL назначать новое, уникальное значение для поляid
при создании записи. Итак, первая статья будет иметьid
1, вторая -id
2, и так далее. Мы будем использовать уникальные значения как указатели на статью при выводе и редактировании в CMS. - Добавляем поле
publicationDate
Следующая строка создает полеpublicationDate
, которое хранит дату публикации каждой статьи. Данное поле имеет типdate
, соответствующий значениям дат. - Добавляем поле
title
Теперь создаем полеtitle
, в котором размещается заголовок. Оно имеет типvarchar(255)
, то есть может хранить строку длиной до 255 символов. - Добавляем поля
summary
иcontent
Последние два поля 2,summary
иcontent
, содержат резюме статьи (краткое описание материала) и HTML содержание соответственно. Резюме имеет типtext
(то есть, может состоять из 65,535). А полеcontent
имеет типmediumtext
(то есть может содержать до 16,777,215). - Добавляем основной ключ Последняя строка в выражении
CREATE TABLE
определяет ключ для таблицы. Ключ также называют индексом, и он служит для быстрого поиска данных в таблице за счет некоторого увеличения требующегося пространства для хранения. Мы определяем полеid
какPRIMARY KEY
. Каждая таблица может содержать единственныйPRIMARY KEY
, так как данный ключ уникально определяет каждую запись в таблице. Кроме того, с помощью данного ключа MySQL очень быстро находит нужную запись.
Теперь у нас есть схема таблицы и ее нужно загрузить в MySQL для создания структуры. Самый простой способ - открыть окно терминала, перейти к папке с файлом tables.sql
и запустить следующую команду:
mysql -u username -p cms < tables.sql
...где username
- имя пользователя MySQL, а cms
- имя базы данных, которую мы создали на шаге 1.
Вводите пароль пользователя после запроса, и MySQL загрузит и выполнит код из файла tables.sql
, создав таблицу articles
в базе данных cms
.
Также можно также можно воспользоваться инструментами для администрирования баз данных, таким как phpMyAdmin, cPanel или Plesk (если они установлены на вашем сервере).
Шаг 3. Создаем файл конфигурации
Теперь у нас есть база данных и мы готовы разрабатывать код PHP. Начнем с создания файла конфигурации для хранения различных установок для нашей CMS. Данный файл будет использоваться остальными скриптами нашей системы.
Первым делом создаем папку cms
в папке веб сервера. Она будет содержать все файлы нашей CMS.
В папке cms
создаем файл config.php
и копируем в него следующий код:
<?php ini_set( "display_errors", true ); date_default_timezone_set( "Australia/Sydney" ); // http://www.php.net/manual/en/timezones.php define( "DB_DSN", "mysql:host=localhost;dbname=cms" ); define( "DB_USERNAME", "username" ); define( "DB_PASSWORD", "password" ); define( "CLASS_PATH", "classes" ); define( "TEMPLATE_PATH", "templates" ); define( "HOMEPAGE_NUM_ARTICLES", 5 ); define( "ADMIN_USERNAME", "admin" ); define( "ADMIN_PASSWORD", "mypass" ); require( CLASS_PATH . "/Article.php" ); function handleException( $exception ) { echo "Sorry, a problem occurred. Please try later."; error_log( $exception->getMessage() ); } set_exception_handler( 'handleException' ); ?>
Разберем код подробно:
- Выводим ошибки в браузере Строка
ini_set()
устанавливает режим вывода сообщений об ошибках в браузере. Отличная опция для отладки кода, но на готовом проекте данную опцию надо отключить ( установить значениеfalse
) для безопасности ресурса. - Устанавливаем временную зону Так как наша CMS будет использовать функцию PHP
date()
, нужно указать временную зону сервера для PHP (иначе PHP будет генерировать предупреждение). В примере установлена зона"Australia/Sydney"
— поменяйте на свою. - Устанавливаем детали доступа к базе данных Затем определяем константу
DB_DSN
, которая указывает PHP, где искать базу данных MySQL. Параметрdbname
должен соответствовать имени базы данных нашей CMS (cms
). Также мы будем хранить имя пользователя MySQL и пароль, которые используются для доступа к базе данных CMS в константахDB_USERNAME
иDB_PASSWORD
. Установите правильные значения в данных константах, которые соответствуют вашим настройкам. - Устанавливаем пути Мы устанавливаем 2 пути в нашем файле конфигураций:
CLASS_PATH
, который указывает на место хранения файлов классов, иTEMPLATE_PATH
, который указывает на место хранения шаблонов HTML. Оба пути указываются относительно верхнего каталогаcms
. - Устанавливаем количество статей, выводимых на главной странице
HOMEPAGE_NUM_ARTICLES
управляет максимальным количеством заголовков статей, которые выводятся на главной странице. Мы установили 5, но можно легко увеличить или уменьшить значение. - Устанавливаем имя и пароль администратора Константы
ADMIN_USERNAME
иADMIN_PASSWORD
содержат данные регистрации для администратора нашей CMS. - Включаем класс
Article
Так как файл классаArticle
(мы его создадим позже) требуется во всех скриптах нашего приложения, добавим его здесь. - Создаем обработчик исключительных ситуаций В завершение определяем
handleException()
- простую функцию для обработки исключений PHP, которые могут генерироваться при выполнении кода. Данная функция выводит общее сообщение об ошибке и записывает данные об ошибке в журнал веб сервера. Такая функция способствует улучшению безопасности системы за счет обработки исключений PDO, которые могут выводить имя пользователя и пароль на странице. После определения функцииhandleException()
, мы устанавливаем ее как обработчик исключений PHP, вызывая функциюset_exception_handler()
.Такой обработчик исключений сделан для упрощения материалов урока. "Правильный" способ для обработки исключений для перехвата всех вызовов PDO в
Article.php
заключается в использовании блоковtry ... catch
.
В следующем уроке мы построим основной класс нашего приложения - Article.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/_D9mx8WcZO0/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-11-26 » Капитан грузового судна, или Как начать использовать Docker в своих проектах
- 2024-11-26 » Обеспечение безопасности ваших веб-приложений с помощью PHP OOP и PDO
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-22 » Ошибки в Яндекс Вебмастере: как найти и исправить
- 2024-11-15 » Перенос сайта на WordPress с одного домена на другой
- 2024-11-08 » OSPanel 6: быстрый старт
- 2024-11-08 » Как установить PhpMyAdmin в Open Server Panel
- 2024-09-30 » Как быстро запустить Laravel на Windows
- 2024-09-25 » Next.js
- 2024-09-05 » OpenAI рассказал, как запретить ChatGPT использовать содержимое сайта для обучения
- 2024-08-28 » Чек-лист: как увеличить конверсию интернет-магазина на примере спортпита
- 2024-08-01 » WebSocket
- 2024-07-26 » Интеграция с Яндекс Еда
- 2024-07-26 » Интеграция с Эквайринг
- 2024-07-26 » Интеграция с СДЕК
- 2024-07-26 » Интеграция с Битрикс-24
- 2024-07-26 » Интеграция с Travelline
- 2024-07-26 » Интеграция с Iiko
- 2024-07-26 » Интеграция с Delivery Club
- 2024-07-26 » Интеграция с CRM
- 2024-07-26 » Интеграция с 1C-Бухгалтерия
- 2024-07-24 » Что такое сторителлинг: техники и примеры
- 2024-07-17 » Ошибка 404: что это такое и как ее использовать для бизнеса
- 2024-07-03 » Размещайте прайс-листы на FarPost.ru и продавайте товары быстро и выгодно
- 2024-07-01 » Профилирование кода в PHP
- 2024-06-28 » Изучаем ABC/XYZ-анализ: что это такое и какие решения с помощью него принимают
- 2024-06-17 » Зачем вам знать потребности клиента
- 2024-06-11 » Что нового в работе Яндекс Метрики: полный обзор обновления
- 2024-06-11 » Поведенческие факторы ранжирования в Яндексе
- 2024-06-11 » Скорость загрузки сайта: почему это важно и как влияет на ранжирование
Великие умы обсуждают идеи, средние - обсуждают поступки, а малые - людей Индийская пословица |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.