Чем он так интересен
Ну идея выкинуть в помойку ССK у меня витает давно
Что было сделано
по идее данную фиксу можно сделать для любого модуля ну наверно потом я просто сделаю модуль который будет цеплять данный функционал к любой форме
но пока просто я прикрутил возможность создавать поля для модуля advanced_comment и так поехали
в месте где заполняется форма
<?php
$advanced_comment_fields_module = drupal_get_path('module', 'advanced_comment') . '/fields.module';
if(file_exists($advanced_comment_fields_module)){
include_once $advanced_comment_fields_module;
if(function_exists('advanced_comment_filelds_form')){
// Заполняем форму дополнительными полями
advanced_comment_filelds_form($form);
}
?>
А в $advanced_comment_fields_module, добавляем форму такого плана
<?php
function advanced_comment_filelds_form(&$form){
$form['description'] = array(
'#type' => 'textarea',
'#title' => t('Describe it'),
'#default_value' => variable_get('description', ''),
'#cols' => 60,
'#rows' => 5,
'#weight'=>-100,
'#description' => t('Log description.'),
'#fields'=>array('description' => array('type' => 'varchar', 'length' => 32, 'not null' => TRUE, 'default' => variable_get('description', ''))),
);
$form['admin'] = array(
'#type' => 'checkbox',
'#title' => t('Only admin can view'),
'#default_value' => variable_get('admin', 0),
'#weight'=>-101,
'#fields'=>array('admin' => array('type' => 'int', 'length' => 2, 'not null' => TRUE, 'default' => variable_get('admin', 0))),
);
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#size' => 30,
'#maxlength' => 64,
'#weight'=>-102,
'#description' => t('Enter the name for this group of settings'),
'#fields'=>array('name' => array('type' => 'varchar', 'length' => 30, 'not null' => TRUE, 'default' => '')),
);
$form['hidden'] = array(
'#type' => 'value',
'#value' => 'is_it_here',
'#fields'=>array('is_it_here' => array('type' => 'int', 'length' => 2, 'not null' => TRUE, 'default' => 0)),
);
}
?>
Ну тут все понятно там где поля формы пишем же и данные таблицы
ну а потом все просто
<?php
// Получаем и забиваем новыми полями
$fields=advanced_comment_get_fields();
// Пересобираем переменные формы в таблицу
$table = array(
'fields' => $fields,
'primary key' => array('fid'),
);
$table['fields']+=array(
'fid' => array(
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
'description' => 'The {advanced_comment_fields}.fid for which the statistics are compiled.',
));
// Создаем новую таблицу полей
db_create_table($ret, 'advanced_comment_fields', $table);
?>
Это и все что надо для создания дополнительных полей, причем их можно всегда изменить, а следить за тем надо ли создавать таблицу заново, следит функция которая анализирует хеш полей.
Осталось только добавить обработчик в submit и все
кому нужен модуль пишите, закачаю
Комментарии
Интересная тема...
Я вот мучался нужно было в комментарии добавить новое полею... так и не доделал... Может подскажешь как сделать???
Так как ССК теперь входит в ядро друпал 7, представляю как вы будете его оттуда выковыривать![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
частично
Да, в ядре D7 теперь есть API, чтобы цеплять поля к различным сущностям. А модуль CCK для семерки - просто UI для этого API.
Но, кстати, сделали они не совсем гибко. Любое поле связано сразу с двумя сущностями: bundle (article, story ...) и entity (node, taxonomy_term, user ...) Было бы круто оставить просто объекты, к которым можно подцепить любые поля...
Но хоть сделали "корзину", т.е. любое поле может быть отмечено как удаленное, но физически остается в БД. И может быть успеют до заморозки добавить централизованную загрузку entities.