Строим свою CMS на PHP и MySQL. Часть 6
В предыдущих уроках серии мы построили простую CMS, которая имеет клиентскую и серверную части и позволяет осуществлять примитивное управление содержанием сайта без редактирования кода. Теперь расширим функционал нашего проекта. Добавим использование категорий.
Категории добавляют гибкости сайту - кроме перечисления всех статей в списке можно создавать отдельные страницы для категории, на которых будут выводиться только статьи, объединенные по какому-либо признаку.
Например, наша CMS выводит все типы статей вместе на главной и в архиве. Создав различные категории для новостей, обзоров и интервью можно будет использовать разные страницы для соответствующих разделов на нашем сайте, что существенно улучшит уровень удобства пользования ресурсом.
В новой демонстрации можно просмотреть, как функционируют категории. Каждый заголовок статьи сопровождается названием категории (он расположено ниже названия) - Interviews, Reviews или News. Нажав на название категории можно открыть страницу архива, на которой перечислены все статьи категории и ее описание вверху.
План действий
Возьмем за исходную точку нашу готовую CMS и будем модифицировать ее для добавления функционала категорий. Нужно сделать следующие шаги:
- Модифицировать базу данных
- Построить класс
Category
- Модифицировать класс
Article
для управления категориями - Модифицировать
index.php
для вывода категорий - Модифицировать
admin.php
для перечисления, добавления, редактирования, удаления и назначения категорий - Модифицировать шаблоны клиентской части и таблицы стилей для вывода категорий
- Модифицировать шаблоны серверной части управления перечислениями, добавлением, редактированием, удалением и назначением категорий.
Модифицируем базу данных
Сначала нужно расширить возможности базы данных MySQL для поддержки категорий. Нужно создать новую таблицу categories
и модифицировать таблицу articles
для включения ID категории, которая связана с каждой статьей.
Открываем файл tables.sql
оригинальной CMS и вносим изменения:
DROP TABLE IF EXISTS categories; CREATE TABLE categories ( id smallint unsigned NOT NULL auto_increment, name varchar(255) NOT NULL, # Название категории description text NOT NULL, # Короткое описание категории PRIMARY KEY (id) ); DROP TABLE IF EXISTS articles; CREATE TABLE articles ( id smallint unsigned NOT NULL auto_increment, publicationDate date NOT NULL, # Дата публикации категории categoryId smallint unsigned NOT NULL, # Идентификатор категории статьи title varchar(255) NOT NULL, # Полное название статьи summary text NOT NULL, # Короткое резюме content mediumtext NOT NULL, # Содержание HTML статьи PRIMARY KEY (id) );
Мы добавили новую таблицу categories
для хранения категорий. Каждая категория имеет уникальное поле для идентификации (id
), название категории (name
) и краткое описание для вывода на архивной странице (description
).
Также мы изменяем таблицу articles
для добавления поля categoryId
, которое используется для связывания каждой статьи с соответствующей категорией.
Поле, которое связывает одну таблицу с другой называется как внешний ключ (foreign key).
А что делать, если у вас уже есть статьи в базе данных?
Если использовать запрос из файла tables.sql
в MySQL, то он удалит существующую таблицу articles
в вашей базе cms
и построит ее с нуля. То есть все статьи, которые уже есть в CMS удалятся.
В подобной ситуации нужно модифицировать таблицу articles
с сохранением всех данных. MySQL позволяет выполнять такие задачи легко, благодаря выражению ALTER TABLE
. Упрощенно синтаксис ALTER TABLE
выглядит так:
ALTER TABLE имя_таблицы ADD имя_нового_поляопределение_нового_поля AFTER существующее_поле
Если у вас есть статьи в CMS, то нужно создать новую таблицу categories
и модифицировать имеющуюся таблицу articles
. Чтобы выполнить задачу, запрос в файле tables.sql
должен выглядеть так:
DROP TABLE IF EXISTS categories; CREATE TABLE categories ( id smallint unsigned NOT NULL auto_increment, name varchar(255) NOT NULL, # Name of the category description text NOT NULL, # A short description of the category PRIMARY KEY (id) ); ALTER TABLE articles ADD categoryId smallint unsigned NOT NULL AFTER publicationDate;
Применяем изменения
Теперь нужно применить изменения к нашей базе MySQL.
Если у вас уже есть база данных cms
, которая содержит статьи, то необходимо сделать резервную копию перед внесением изменений!
Если у вас нет базу данных cms
, то нужно ее создать, как было описано в предыдущих уроках серии:
mysql -u username -p create database cms; exit
Теперь можно загрузить файл tables.sql
в MySQL для внесения изменений в таблицу данных:
mysql -u username -p cms < tables.sql
Вводим пароль, когда система его запросит и нажимаем Enter. MySQL читает файл tables.sql
и выполняет команды из него, создавая и/или модифицируя таблицу в базе данных cms.
Для проверки результатов нужно войти в MySQL:
Затем используем команды SHOW TABLES
и EXPLAIN
для проверки схем таблиц в MySQL:
mysql> show tables; +---------------+ | Tables_in_cms | +---------------+ | articles | | categories | +---------------+ 2 rows in set (0.00 sec) mysql> explain articles; +-----------------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | publicationDate | date | NO | | NULL | | | categoryId | smallint(5) unsigned | NO | | NULL | | | title | varchar(255) | NO | | NULL | | | summary | text | NO | | NULL | | | content | mediumtext | NO | | NULL | | +-----------------+----------------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql> explain categories; +-------------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+---------+----------------+ | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | NO | | NULL | | | description | text | NO | | NULL | | +-------------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) mysql>
Обратите внимание на новое поле categoryId
в таблице articles
и новую таблицу categories
.
Теперь база данных нашей CMS для работы с категориями.
В следующих уроках мы реализуем остальные пункты плана по модификации CMS.
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/fnk_W8KJdLQ/lessons.php
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2024-03-13 » Стратегии SEO на 2024 год
- 2024-03-13 » Как использовать анимацию с помощью JavaScript-библиотеки GSAP
- 2024-03-13 » Использование GSAP 3 для веб-анимации
- 2024-03-13 » Cогласование топографической съёмки с эксплуатирующими организациями
- 2024-02-19 » Теряются лиды? Как настроить сквозную аналитику
- 2024-02-17 » Мерч и IT: на что обратить внимание в 2024 году
- 2024-02-16 » Копируем с RSync: основные примеры синхронизации файлов
- 2024-02-15 » Лучшие noCode AI платформы для создания диалоговых ботов
- 2024-02-14 » Факторы ранжирования Google 2024 — исследование Semrush
- 2024-02-12 » Перенос сайта на другой хостинг
- 2024-02-05 » В России сформирован реестр хостинг-провайдеров
- 2024-02-04 » Использование SSH для подключения к удаленному серверу Ubuntu
- 2024-02-03 » Подключаемся к серверу за NAT при помощи туннеля SSH. Простая и понятная инструкция
- 2024-02-02 » Настройка CI/CD для Gitlab-репозитория: схемы и гайд по шагам
- 2024-02-01 » GitLab CI Pipeline. Запуск сценария через SSH на удаленном сервере
- 2024-01-29 » Introduction to GitLab’s CI/CD for Continuous Deployments
- 2024-01-26 » Настройка GitLab CI/CD
- 2024-01-25 » Установка shell gitlab runner
- 2024-01-25 » Установка и регистрация gitlab-runner в docker контейнере
- 2024-01-25 » Переменные Gitlab-Ci
- 2024-01-25 » Настройка CI/CD в GitLab для синхронизации проекта с веб-серверами
- 2024-01-25 » Копирование файлов scp
- 2024-01-21 » Бездепозитные бонусы от казино: обзор условий и правил использования
- 2024-01-18 » Современная обработка ошибок в PHP
- 2024-01-18 » Пример шаблона проектирования MVC в PHP
- 2024-01-18 » Мифический человеко-DevOps
- 2023-12-28 » Google подвел итоги 2023 года в поиске
- 2023-12-28 » 5 ошибок отдела продаж, из-за которых вы теряете клиентов
- 2023-12-28 » Американский суд признал монополию Google на рынках дистрибуции Android-приложений
- 2023-12-28 » Хостинг-провайдер GoDaddy перестанет оказывать услуги пользователям из России
Там, где речь заходит об очень больших деньгах, разумно не доверять никому. |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.