Managee / Content Management System +7 (495) 505-19-05
Главная

О продукте

Демо интерфейса

Демо функциональности

Наши Клиенты

Купить

Услуги

Контакты

Русский English 

Структура данных и БД

Основная идея и вообще

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

  • Дерево (tree) - это когда у пунктов есть подпункты (страницы на сайте).
  • Список (list) - подпунктов нет, но есть порядок следования (у дерева тоже есть), т.е. мы указываем, какой пункт идет первым, какой вторым и т.д.
  • Множество (set) - неупорядоченный список. Упорядочивается при выборке, например, по алфавиту или дате (новости).

Еще у нас можно в одном блоке хранить записи/элементы/пункты (это синонимы) разных типов, указав для полей, какому из типов элементов они принадлежат.

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

Как все это хранится в БД

Блок может состоять из одной или нескольких таблиц в зависимости от его сложности. Таблицы именуются так: префикс_название_блока__суффикс. Префикс нужен для того, чтобы не путать таблицы системы с чужеродными таблицами, если мы их всех храним в одной базе данных. По умолчанию префикс - ss_ (пусть будет site system, а вообще это по историческим причинам. К Shutzstaffel отношения не имеет). При описании префикс опустим, чтоб не загромождать.

Название блока - это понятно, суффикс - это дополнительный маркер, обозначающий смысл данной таблицы. Лучше будет видно на примере:

У нас есть блок "новости". Представляет собой множество. Пусть для простоты там есть всего 2 поля: "дата" и "текст". Причем поле "текст" может быть на разных языках, а дата - нет.

Тогда будут такие таблицы: news и news__ml. Здесь news - основная таблица, а news_ml - таблица для хранения многоязычных полей. Структура таблиц такая:

news:

_id идентификатор, первичный ключ (auto_increment)

_disabled "запись отключена". 0 или 1. Запись словно удаляется, но может быть восстановлена

date дата новости (пользовательские данные)

news_ml:

_node_id идентификатор записи в основной таблице (_id)

_language_id идентификатор языка

text текст новости (пользовательские данные)

Служебные поля, чтобы не путать их с пользовательскими, начинаются с "_".

Если блок подчинен другому, добавляется поле _master_id - какой записи блока-господина принадлежат записи этого блока.

Для упорядоченных блоков (список, дерево) добавляются дополнительные служебные поля:

Список:

_number порядковый номер для сортировки.

Дерево:

_parent  id родительского узла

_number

_children_count количество потомков. Используется движком для ускорения выборок.

Блоки, состоящие записей разных типов, устроены так:

table главная таблица, общие поля

table__type1 поля для первого типа

table__type2 поля для второго типа

В главной таблица добавляется поле _node_type - там хранится id типа записи.

Остальные таблицы имею поле _node_id для связки с главной таблицей.

Многоязычные таблицы выглядят так: table__type__ml

Служебные блоки

Блоки

struct_blocks

Хранит в себе собственно описания блоков. Состоит из записей двух типов - Блок и Категория. Категория - это папка для помещения туда блоков для облегчения навигации. Из полей имеет только name (см далее). Категория может иметь детей, а Блок - нет.

Структура:

  • keyword
    Ключевое слово. Используется для именования таблиц в БД.
  • name
    Название (многоязычное - ml)
  • type
    Тип. Выбор из set, list и table - множество, список и таблица
  • display
    Показ в интерфейсе. list или table. В первом случае интерфейс работы с блоком будет такой - слева список, справа редактирование. Во втором - сверху таблица с возможностью сортировать по столбцам (только у set)
  • display_table
    Показ таблицы. Перечисление через запятую полей, которые показывать в таблице блока (в нужном порядке)
  • display_items
    Показ списка. SQL-выражение, задающее правила отображения элементов в списке. Например, name или concat(number, ' - ', name)
  • sort_by
    Выражение для сортировки. Если указано, то сортировка осуществляется по нему. Если не указано - по полю "Показ списка"
  • sorting
    Направление сортировки. asc или desc
  • engine
    Встроенный (служебный). Редактирование его структуры не рекомендуется.
  • nodes_have_owner
    Элементы имеют владельца.
  • master_block_id
    Какому блоку подчинен.

Поля

struct_fields

Описание полей, из которых состоят блоки. Подчинен блоку "Блоки". Типы записей: Поле и Вкладка. Вкладка - это тоже типа папка для группировки Полей.

Структура:

  • keyword
    Ключевое слово. Для именования столбцов в БД
  • name
    Имя.
  • comment
    Комментарий. Текст для помощи
  • type_id
    Тип поля. Ссылка на элемент блока "Типы полей". Определяет внешний вид и поведение.
  • block_slave
    Подчиненный блок. Для полей типа "ссылка". На кого ссылаемся.
  • localizable
    Многоязычное (локализируемое). Поле позволяет хранить разные значения для разных языков
  • node_type
    Тип элемента, которому принадлежит поле (если блок может содержать элементы разных типов).
  • validation
    Валидация. Регулярное выражение, дающее истину при допустимом значении поля (preg_match). Пока не реализовано
  • default_value
    Значение по умолчанию, задается на языке MySQL. Например, CURDATE() или "Unknown". (Будет вызван select $default_value)

Типы полей

struct_fieldtypes

Структура:

  • essence
    Поведение. Выбор из списка:
    • string строка
    • text многострочный текст
    • html wysiwyg-редактор
    • checkbox флажок
    • password пароль (****)
    • enum перечисление (enum в MySQL)
    • set набор (set в MySQL)
    • date дата
    • time время
    • datetime дата и время
    • file файл с кнопкой "обзор" и превьюшкой
    • directory папка. Много файлов можно хранить
    • link ссылка на элемент в другом (или в этом же) блоке
    • link_multiple ссылки на много элементов (чекбоксами)
    • script_mysql автогенерящееся нередактируемое поле, MySQL-выражение
    • script_php то же самое, но php-выражение. Автогенерящиеся поля предназначены только для показа, без возможности редактирования.
  • sql
    SQL-определение
  • store_in_fs
    Хранить файлом (в противоположность хранению в БД).
  • validation
    Условие валидности (пока не реализовано)
  • built_in
    Встроенное (в противоположность добавленному пользователем). Пока игнорируется.
  • name
    Имя.

Типы элементов

struct_nodetypes

  • keyword
    Ключевое слово (для именования таблиц в БД)
  • can_have_children
    Может иметь детей
  • display_style
    Стиль для отображения, чтобы отличать элементы разных типов. font-weight:bold и пр.
  • name
    Название
  • name_multiple
    Название в множественном числе

Null
Отзывы
Copyright 2004-2006 © ООО "НУЛЛ", все права защищены.
Адрес: Москва, Озерковский пер., д. 7, Телефон: (495) 505-1905
Managee Сайт работает на Managee CMS
Версия: 0.99.71, сек.: 0.146, sql-запросов: 16.