Первый мой публичный модуль для Drupal 6 advanced_comment

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

Аватар пользователя Гость Гость 29 августа 2009 в 22:41

Чем он так интересен
Ну идея выкинуть в помойку СС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 и все
кому нужен модуль пишите, закачаю

Комментарии

Аватар пользователя Bios Bios 29 августа 2009 в 23:22

Интересная тема...
Я вот мучался нужно было в комментарии добавить новое полею... так и не доделал... Может подскажешь как сделать???

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 30 августа 2009 в 1:12

"mdinc" wrote:
Ну идея выкинуть в помойку ССK у меня витает давно

Так как ССК теперь входит в ядро друпал 7, представляю как вы будете его оттуда выковыривать Smile

Аватар пользователя shp shp 30 августа 2009 в 16:20

Да, в ядре D7 теперь есть API, чтобы цеплять поля к различным сущностям. А модуль CCK для семерки - просто UI для этого API.

Но, кстати, сделали они не совсем гибко. Любое поле связано сразу с двумя сущностями: bundle (article, story ...) и entity (node, taxonomy_term, user ...) Было бы круто оставить просто объекты, к которым можно подцепить любые поля...

Но хоть сделали "корзину", т.е. любое поле может быть отмечено как удаленное, но физически остается в БД. И может быть успеют до заморозки добавить централизованную загрузку entities.