Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

1.6. Продукты и категории - создаем таблицы БД

08/12/2019, by Ivan

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

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

Данные Описание
ID Номер товара для внутренней работы сайта
Name Имя товара
ЧПУ Нужен больше для поисковых систем
Description Детальная информация о товаре
SKU Артикул товара для пользователей сайта
Price Цена товара
Stock Количество товара на сайте
Primary image Главное изображение
Additional images Дополнительные изображения

 В последующих статьях мы расширим этот список, а пока нам достаточно и этого.

Категории товаров имеет свой список полей:

Данные Описание
ID Номер категории для внутренней работы сайта
Name Имя категории
Description Описание категории
ЧПУ Читаемый URL для поисковых систем

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

  • Версирование контента
  • Разграничение прав доступа
  • Комментарии контента, страниц, товаров
  • Рейтинги страниц, товаров

Страницы

Страницы это будут обычные статические разделы нашего сайта: Контакты, информаци о доставке и оплате и т.д. Данные этих страниц представлены в следующей таблице:
Данные Описание
Имя Имя страницы
ЧПУ URL страницы
ID Внутренний номер страницы
Heading Содержимое тега h1
Title Содержимое тега <title>
Content Содержимое страницы
Keywords Содержимое мета-тега ключевых слов
Description Содержимое мета-тега описания

Content

Страницы - это основной тип содержимого, который мы будем расширять, когда нужно будет хранить больше полей. Страницы категорий это по сути такие же страницы, только нужно больше полей для связи с товарами. 
Данные Описание
ID Номер для внутренней работы
Name Имя контента
ЧПУ  
Content Содержимое страницы контента
Type Тип контента (например page, product, category)
Order Сортировка контента, например для пунктов в меню
Parent Родитель контента, нужно для иерархии, например для подкатегорий или каталога страниц
Meta keywords Ключевые слова
Meta description Мета-описание
Date created Дата создания
Creator Автор контента
Active Показывать контент посетителям или нет
Secure Поле для разграничения прав, например на просмотр только зарегистрированным пользователям

Ревизии

В друпале есть система ревизии, у нас будет тоже своя подобная система.
Данные Описание
ID Внутренний номер контента
Current revision Текущий номер ревизии
Теперь когда мы распланировали наши типы материалов приступим к созданию нашей базы данных. Для каждого типа мы создадим отдельную таблицу. В результате у нас должны быть вот такие таблицы:
Таблица Описание
Content Для хранения связей активных версий контента с информацией, которая не изменяется для различных версий, например автор контента.
Versions Для хранения данных отдельной версии контента
Content types Записываем типы материалов нашего фреймворка, соотносим контент к типу материала.
Products Расширяем данные о продуктах
Revision history Сохраняем историю наших ревизий

Content

Весь контент на сайте у нас будет хранится в этой таблице. Если мы хотим раширить тип материала, то мы будем делать это в отдельной таблице. Например у нас будут продукты, они будут хранится в таблице Content, но при этом будут связаны с таблицей Products через ID.
Поле Тип Описание
ID Integer (auto increment) Поле для связи с другими таблицами
Current_revision Integer Поле для связи с таблицей версий
Active Boolean Показывает опубликованный или нет контент
Secure Boolean Доступен или нет контент только авторизированным пользователям
Parent Integer Связь с родительским контентом
Order Integer Поле для сортировки контента
Author Integer ID пользователя, который создал контент
Type Integer ID типа контента, для расширения данных контента
Path Varchar Поле для хранения ЧПУ
 Теперь можно выполнить запросы к бд и создать таблицу Content:
CREATE TABLE `content` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `current_revision` int(11) NOT NULL,
  `active` tinyint(1) NOT NULL,
  `secure` tinyint(1) NOT NULL,
  `parent` int(11) NOT NULL,
  `order` int(11) NOT NULL,
  `author` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `path` char(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;