Создание контента
1. Данные общие для всех узлов (автор, дата публикации, версии и т.д.) Друпал хранит в таблицах node и node_revisions.
2. Данные расширяющие ТД Друпал хранит в таблицах создаваемых ССК. В нашем случае это таблица content_type_test.
mysql> select * from content_type_test; | |
---|---|
Column name | Value |
vid | 1 |
nid | 1 |
field_example_text_value | Here is some example text! Forbidden HTML will be stripped. |
field_example_text_format | 1 |
Добавление второго поля.
1. Добавление числового поля осуществляется включением модуля number.module, который входит в состав ССК.
2. Числовые поля для ввода данных используют те же текстовые поля, что говорит нам еще раз о независимости типа вводимых данных от способа ввода данных.
Примечание: Текст на выноске гласит о том, что несмотря на разницу типов данных (целое, дробь, текст) спосов ввода(виджет) одинаков для всех.
3. Способы конфигурации для полей целого типа и текстового типа различны.
4. Объясняется это разными способами валидации при вводе. Количество возможных вариантов для чисел меньше чем для текста, поэтому надо проводить дополнительную проверку перед помещением данных в БД. В свою очередь, ограничения для чисел вида "максимум" и "минимум" не имеют смысла применительно к текстовым полям.
Примечание: далее следует врезка цитаты из обсуждения о том, как ССК проверяет вводимые данные и почему все устроено именно так.
5. Нетрудно догадаться, что все созданные поля отображаются в БД.
6. Следует отметить, что различные типы данных хранятся в БД различными способами.
mysql> describe content_type_test; +-------------------------------------+------------------+------+-----+ | Field | Type | Null | Key | +-------------------------------------+------------------+------+-----+ | vid | int(10) unsigned | NO | PRI | | nid | int(10) unsigned | NO | | | field_example_text_value | longtext | YES | | | field_example_text_format | int(10) unsigned | NO | | | field_number_of_toes_you_have_value | int(11) | YES | | +-------------------------------------+-------------------------------+ Поле числового типа хранит только данные. Поле текстового типа хранит и данные и способ форматирования.
Множественные значения
1. Если поменять настройку поля с еденичное на "множественное" -- способ хранения даннх в БД изменится.
2. При включенной опции "multiple values" вы можете заполнять бесконечное количество полей указанного типа. Дополнительные свободные поля будут появляться всякий раз при новом редактировании материала.
Примечание: Выноски на картинке говорят о том, что
а) Каждый экземпляр поля модет иметь свой формат ввода
б) Коль скоро включена опция "multiple values" -- количество полей "Example text" теперь ничем не огранничено.
3. Как уже было сказанно, при включении опции "multiple values" - способ хранения данных меняется.
mysql> describe content_type_test; +-------------------------------------+------------------+------+-----+ | Field | Type | Null | Key | +-------------------------------------+------------------+------+-----+ | vid | int(10) unsigned | NO | PRI | | nid | int(10) unsigned | NO | | | field_number_of_toes_you_have_value | int(11) | YES | | +-------------------------------------+------------------+------+-----+ текстовые поля удалены из базы
4. Для полей помеченных как множественные ССК создает отдельные таблицы.
mysql> describe content_field_example_text; +---------------------------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------------------+------------------+------+-----+---------+-------+ | vid | int(10) unsigned | NO | PRI | 0 | | | delta | int(10) unsigned | NO | PRI | 0 | | | nid | int(10) unsigned | NO | | 0 | | | field_example_text_value | longtext | YES | | NULL | | | field_example_text_format | int(10) unsigned | NO | | 0 | | +---------------------------+------------------+------+-----+---------+-------+
5. А вот так данные хранятся в базе.
mysql> select * from content_field_example_text; | ||||
---|---|---|---|---|
vid | delta | nid | field_example_text_value | field_example_text_format |
1 | 0 | 1 | Here is some example text! <div>Forbidden HTML will be stripped.div> |
1 |
1 | 1 | 1 | I can use a different input format for each text field! | 3 |
1 | 2 | 1 | Even more example text. | 1 |
Семантическое значение и совместное использование полей
1. Одна из основных задач ССК состоит в том, что бы придать полям семантическое значение. Что это значит?
2. Это значит, что поле под названием "Возраст" имеет ту же природу (целое число) что и поле "Количество". Но значение они имеют разное.
3. Оба поля хранят числа. Оба сконфигурированы для ввода положительных чисел. Но возраст тем не менее должен пониматься как количество прожитых лет, а Количество должно пониматься как другое отличное значение (число ног, допустим).
4. Более того зачастую некое поле с неким семантическим значением должно использоваться более чем в одном типе данных.
5. Например тип данных Персона пожет иметь поле "Возраст" И тип данных "Животное" тоже может иметь поле "Возраст". семантически оба полля должны иметь одиаковое значение. ССК решает эту проблему позволяя вам использовать уже существующие поля в любом количестве типов данных.
Примечание: идея-то простая -- но поди изложи её внятно.
6. После того как поле использоваано более чем в одном типе денных его значения более не хранятся в таблицах имеющих отношение к типу данных. Создается новая таблица для хранения значений поля совместно используемого несколькими типами данных.
mysql> describe content_field_number_of_toes_you_have; +-------------------------------------+------------------+------+-----+ | Field | Type | Null | Key | +-------------------------------------+------------------+------+-----+ | vid | int(10) unsigned | NO | PRI | | nid | int(10) unsigned | NO | | | field_number_of_toes_you_have_value | int(11) | YES | | +-------------------------------------+------------------+------+-----+
7. После всех манипуляций изначальная таблица пришла к такому вот виду:
mysql> describe content_type_test; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | vid | int(10) unsigned | NO | PRI | 0 | | | nid | int(10) unsigned | NO | | 0 | | +-------+------------------+------+-----+---------+-------+
комментарии, как всегда, в комментарии