Как написать виджет CCK с несколькими входными элементами?


То, что я ищу, - это не CCK flexifield или CCK Multigroup. Я пытаюсь разработать виджет CCK, который позволяет мне вводить два или более полей ввода на значение, что-то вроде того, что Doublefield делает для Drupal 7. Как бы я это развил?

 4
Author: Capi Etheriel, 2011-10-24

3 answers

Пример взят из поля Номер телефона CCK. Вам нужно будет

  1. Реализуйте функцию hook_field_settings() для возврата хранилища данных поля

    176     case 'database columns':
    177       return array(
    178         'number' => array(
    179           'type' => 'varchar',
    180           'length' => CCK_PHONE_PHONE_MAX_LENGTH,
    181           'not null' => FALSE,
    182         ),
    183         'country_codes' => array(
    184           'type' => 'varchar',
    185           'length' => CCK_PHONE_CC_MAX_LENGTH,
    186           'not null' => FALSE,
    187         ),
    188         'extension' => array(
    189           'type' => 'varchar',
    190           'length' => CCK_PHONE_EXTENSION_MAX_LENGTH,
    191           'not null' => FALSE,
    192         ),
    193       );
    
  2. Реализуйте hook_elements() для отображения реальных полей ввода, где вы создаете FAPI внутри функции cck_phone_process()

    598 function cck_phone_elements() {
    599   return array(
    600     'phone_number' => array(
    601       '#input' => TRUE,
    602       '#process' => array('cck_phone_process'),
    603       '#autocomplete_path' => FALSE,
    604     ),
    605   );
    606 }
    
 1
Author: ckng, 2011-12-11 19:31:19

Я построил что-то подобное для drupal 7. Учитывая, что CCK перешел в ядро drupal в d7, я не совсем уверен, насколько сильно будет отличаться код для модуля cck в d6, но, возможно, этот модуль поможет вам

Я написал этот модуль, так как мне нужно было каким-то образом записывать телефонные номера, но разделить их на код страны/код города и номер и сохранить их в отдельных столбцах базы данных. Все другие полевые модули, которые я пробовал, не допускали этого!

Таким образом, все числа может быть введен единообразно и, следовательно, представлен единообразно - особенно полезно, если вы используете его для хранения и управления информацией о клиентах и, возможно, вам потребуется экспортировать ее в различные приложения. В моем случае некоторые пользователи вводили телефонные номера с тире, другие - с косой чертой, а третьи снова без каких-либо разделяющих значений, что затрудняло управление ими и их отображение в беспорядке.

enter image description here

Разорвите код на части и измените его в соответствии с вашими потребностями (например, только 2 поля):

Это в моей песочнице: http://drupal.org/sandbox/tecjam/1320886

В Git: http://drupalcode.org/sandbox/tecjam/1320886.git/tree/e7c97511506ee6e92a44656aa02d31f4e8f69727

Мне нравится комментировать свой код, чтобы помочь себе (иногда комментариев больше, чем кода lol). Так что выяснение того, что делает, что и где, вообще не должно быть проблемой.

Вы всегда можете спросить, есть ли у вас какие-либо особые вопросы.

 3
Author: tecjam, 2011-12-08 16:27:05

Думаю, я должен поблагодарить Дженнифер Ходгдон (и Ларри Пейджа + Сергея Брина). В Poplarware есть замечательный путеводитель: http://poplarware.com/articles/cck_field_module

 1
Author: Capi Etheriel, 2011-12-11 16:49:12