Урок 12. Модуль CCK – пакет для конструирования содержания материалов

Создание сайта на Drupal 6. Практический вводный курс

При создании новой статьи пользователь сайта на Drupal определяет, к какому типу материала она будет относиться. Некоторые материалы, такие как Page и Story, включены изначально, другие активируются при включении соответствующих модулей, например, Book, Blog, Image. Однако ничего не мешает пользователю-администратору создавать собственные типы материалов под какие-нибудь специфические виды статей.

До этого мы видели, что формы редактирования всех типов материалов содержат примерно одинаковые поля: заголовок, меню, содержимое и другое. Хотя, например, тип "Картинки" имеет дополнительное поле для загрузки изображения. Но для какого-нибудь особенного типа материала этих полей может быть недостаточно. Например, может потребоваться поле, где будет указываться уровень статьи, какие-нибудь числовые значения, может потребоваться загрузка нескольких изображений и т.п.

В CMS Drupal можно добавлять собственные поля к материалам, как созданным собственноручно, так и тем, которые активируются при включении модулей. Для создания дополнительных полей используется модуль CCK (Content Construction Kit). Загрузите его с сайта drupal.org, установите в систему, также загрузите файл перевода с drupaler.ru.

Перейдите на страницу Модули и включите следующие подмодули CCK – Content, Option Widgets, Text. Также следует включить подмодуль модуля GeSHi – GeSHi field, – который позволяет создавать поле исключительно для программного кода с подсветкой синтаксиса.

Допустим, на нашем сайте будут публиковаться решения задач по программированию. Для подобного материала хорошо бы создать собственный тип (не Story и не блоговую запись), т.к., скорее всего, он потребует поля нестандартного типа. Переходим на страницу Управление ? Типы содержимого ? Добавить тип содержимого. В открывшейся форме в поле Название вписываем "Задача", а в поле Тип - "task", при желании можно заполнить поле описания типа. Далее раскройте раздел Свойства формы, в поле Название поля текста замените слово "Содержимое" на слово "Пояснение". Сохраните новый тип материала, после чего вы окажетесь на странице Управление ? Типы содержимого.

Теперь необходимо настроить поля только что созданного типа. Для этого надо перейти по ссылке управлять полями типа материала "Задача". К существующим стандартным полям добавим новое поле, в котором будет указываться язык программирования, на котором решена задача. Внизу страницы есть форма для добавления новых полей. Заполните ее следующим образом: в поле Метка впишите "Язык программирования", в Имя поля - "lang", тип данных и элемент — текст, текстовая строка. Нажмите на кнопку Сохранить, откроются настройки данного поля. Здесь установите флажок Обязательный и еще раз сохраните. После этого вы снова окажетесь на странице управления полями типа материала "Задача", где теперь в списке полей появится новое поле.

Следующее поле, которое нам потребуется, будет показывать, решена ли задача или еще нет. Добавляем такое поле: метка - "Задача решена", имя - "solved", тип — текст, элемент — флажки/радиокнопки. В настройках данного поля указываем: обязательный, список допустимых значений — "Да", "Нет" (каждое значение на отдельной строке).

Хотя исходный код решения задачи можно вставить в поле содержимого, но мы создадим специальное поле для кода. Метка - "Исходный код", имя — "source", тип — GeSHi field. Сохраним настройки поля как есть.

Теперь надо правильно выстроить последовательность полей, которую блогеры будут видеть в форме редактирования материала. Поля без проблем можно перемещать относительно друг друга. Расположите поля так, чтобы после Параметры меню, сразу следовали поля в следующей последовательности Язык программирования, Задача решена, Пояснение, Исходный код. Сохраните изменения.

Далее следует установить разрешения на странице Разрешение ролей. Блогеру должно быть позволено create task content, delete own task content, edit own task content.

Кроме того, не забываем, что у нас на сайте поддерживается таксономия. Заходим на страницу таксономии. Здесь два есть два словаря - "Image Galleries" и "Темы". Нас интересует только второй, нажимаем изменить словарь и в типах содержимого указываем помимо записи в блог еще и задачу. Сохранив изменения, добавляем еще один термин - "Решение задач". На странице списка терминов узнайте адрес страницы добавленного термина, после чего задайте для нее синоним taxonomy/term/tasks.

Наконец, создадим материал "Задача" от имени одного из блогеров. Примеры задач есть в архиве к данному курсу (файл tasks.odt). Обратите внимание, для поля GeSHi field можно выбрать подходящий язык для синтаксической подсветки. Также в данном поле не надо использовать тег code.

После сохранения статьи может не понравиться то, что слова "Pascal" и "Да" расположены ниже заголовков "Язык программирования" и "Задача решена", а не рядом. Чтобы исправить это, перейдите на страницу Управление содержимым ? Задача ? Отображение полей. Здесь в столбце Метка полей "Язык программирования" и "Задача решена" установите значение В линию.

Также можно обособить эти два поля от всего остального текста с помощью объединения их в отдельную группу. Для этого на странице модулей в CCK следует включить подмодуль Fieldgroup. Далее в управлении полями типа "Задача" создать новую группу, например "Информация о задаче" (taskinfo). Потом следует поднять только что созданное поле над полями "Язык программирования" и "Задача решена", а их как бы вставьте внутрь, немного сместив вправо. Чтобы название группы не отображалось, на странице отображения полей поставьте полю "Информация о задаче" метку Скрыто.

Добавьте еще несколько задач. Запустите cron, чтобы увидеть ссылку на задачи из облака тегов.