CCK и БД - конспективный перевод (часть первая)

Главные вкладки

Аватар пользователя karasiov@drupal.org karasiov@drupal.org 11 ноября 2008 в 1:21

Адрес исходного материала: http://www.lullabot.com/articles/an_introduction_to_the_content_construc...

Синопсис: В статье рассказывается о том, каким образом модуль ССК получает, хранит и отображает данные.

Предисловие: Этот перевод не является дословным. Из каждого абзаца извлечено только то, что имеет отношение к делу(по моему мнению). Те предложения, которые были призваны обеспечить литературную красоту текста -- нагло пропущены (как и те, которых банально не понял). Причина тому -- обычная человеческая лень и ничего более.

Тезисы пронумерованы. Зачем? Не могу сказать. Видимо для того, чтобы придать тексту хоть какую-то убедительность.

Собственно конспект

Что такое ССК? Взгляд со стороны БД

1. Статья описывает ССК версии 5.х-1.4.
2. Предшественником ССК был модуль Flexinode.
3. CCK лучше чем Flexinode.

Типы материалов и content.module

1. Drupal5 позволяет создавать дополнительные типы данных (далее ТД).
2. Стандартная поставка содержит два ТД. Page и Story. Их можно удалить или перенастроить.
3. ССК предоставляет возможность создавать дополнительные разнотипные поля внутри существующих и создаваемых ТД.
4. Главный модуль в составе ССК -- это content.module.
5. При установке ССК content.module создает в БД дополнительные таблицы для каждого существующего ТД.
6. Так выглядит таблица для типа данных Page.

mysql> describe content_type_page;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| vid   | int(10) unsigned | NO   | PRI | 0       |       | 
| nid   | int(10) unsigned | NO   |     | 0       |       | 
+-------+------------------+------+-----+---------+-------+
поля vid и nid -- минимум необходимый для создания расширенного ТД

Примечание: А теперь внимательно! Тут важное.
7. Поля созданные через ССК представлены двухуровневой схемой.
8. Первый уровень -- ГЛОБАЛЬНЫЙ. Он не зависит от какой ТД то или иное поле расширяет.
9. Второй уровень -- УРОВЕНЬ ЭКЗЕМПЛЯРА. На этом уровне поле может быть настроено для конкретного ТД.
10. Это разделение легко иллюстрируется схемами таблиц из БД.

mysql> describe node_field;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| field_name      | varchar(32)  | NO   | PRI |         |       | 
| type            | varchar(127) | NO   |     |         |       | 
| global_settings | mediumtext   | NO   |     |         |       | 
| required        | int(11)      | NO   |     | 0       |       | 
| multiple        | int(11)      | NO   |     | 0       |       | 
| db_storage      | int(11)      | NO   |     | 0       |       | 
+-----------------+--------------+------+-----+---------+-------+
тут хранятся данные глобального уровня
mysql> describe node_field_instance;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| field_name       | varchar(32)  | NO   | PRI |         |       | 
| type_name        | varchar(32)  | NO   | PRI |         |       | 
| weight           | int(11)      | NO   |     | 0       |       | 
| label            | varchar(255) | NO   |     |         |       | 
| widget_type      | varchar(32)  | NO   |     |         |       | 
| widget_settings  | mediumtext   | NO   |     |         |       | 
| display_settings | mediumtext   | NO   |     |         |       | 
| description      | mediumtext   | NO   |     |         |       | 
+------------------+--------------+------+-----+---------+-------+
тут хранятся данные о том, как отображать поле (метка, вес, описание итд) --
то есть данные уровня ЭКЗЕМПЛЯРА

Создание нового ТД

1. Для создания нового ТД следует пройти на ...Administer -> Content management -> Content types -> Add content type (admin/content/types/add)
2. Для этой статьи автор создал тестовый ТД с именем "test" (Сюрпрайз! Сюрпрайз!пр. переводчика) и описанием "Test content type".

mysql> describe content_type_test;
+-------+------------------+------+-----+---------+-------+
| Field | Type             | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| vid   | int(10) unsigned | NO   | PRI | 0       |       | 
| nid   | int(10) unsigned | NO   |     | 0       |       | 
+-------+------------------+------+-----+---------+-------+

Структура таблицы для нового ТД

продолжение следует. Правки и замечания в комментарии

Комментарии

Аватар пользователя KCEOH KCEOH 15 ноября 2008 в 15:23

В свете вышедшего недавно CCK 6.x-2.1 не понятно, зачем было браться за перевод столь древнего материала.

Аватар пользователя graceman9 graceman9 8 февраля 2010 в 16:24

Автор молодец!

ИМХО для того, чтобы чувствовать себя на ты с модулем, полезно знать его эволюцию.
Проще начинать с простого.

Дочитав этот перевод забыл что это ПЕРВАЯ ЧАСТЬ.. вспомнил - и пошёл читать вторую и третью!