Drupal: добавить код обмена в option_widgets в form_alter? - PullRequest
0 голосов
/ 29 января 2010

Кто-нибудь знает, как я могу добавить следующее в form_alter? В настоящее время у меня есть два целочисленных поля cck, которые заполняются из sql с помощью команды php values.

Одно поле предназначено для марки, а другое - для модели. И марки, и модели являются собственными типами узлов. Модель имеет ссылку на узел для создания.

То, что я хочу сделать в раскрывающемся списке Make (CCK: INTEGER: SELECT), находится в процессе изменения, измените содержимое поля модели. Я создал свою собственную форму на заказ, но она слишком громоздкая и я хочу использовать базовые формы редактирования узла друпал.

В идеале я хочу быть в состоянии передать это в микс. '#attributes' => array ('onchange' => 'populatemodels (this, \' edit-field-model \ ')')

Кто-нибудь знает способ сделать это в коде?

В моем form_alter добавление атрибута не приводит к изменениям в коде:

#field_make (Array, 14 elements)

    *
      #type (String, 20 characters ) optionwidgets_select
    *
      #default_value (Array, 1 element)
          o
            0 (Array, 1 element)
                +
                  value (String, 1 characters ) 8
    *
      #required (String, 1 characters ) 1
    *
      #columns (Array, 1 element)
          o
            0 (String, 5 characters ) value
    *
      #title (String, 4 characters ) Make
    *
      #description (String, 0 characters )
    *
      #delta (Integer) 0
    *
      #field_name (String, 10 characters ) field_make
    *
      #type_name (String, 3 characters ) car
    *
      #tree (Boolean) TRUE
    *
      #weight (String, 2 characters ) -1
    *
      #access (Boolean) TRUE
    *
      #count (Integer) 9
    *
      #attributes (Array, 1 element)
          o
            onchange (String, 39 characters ) populatemodels(this,'edit-field-model')

Спасибо - Мэтт

1 Ответ

0 голосов
/ 29 января 2010

Я думаю, что у меня был прорыв.

CCK / options_widgets.module optionwidgets_select_process ($ element, $ edit, & $ form_state, $ form) {

Дополнительно в свой код form_alter я добавил

drupal_add_js ( 'сайты / все / модули / адаптивные / adaptive.js');

Который содержит скрипт populatemodels

Я изменил этот код, чтобы он передавал атрибуты на следующий шаг

$element[$field_key] = array(
    '#type' => 'select',
    '#title' => $element['#title'],
    '#description' => $element['#description'],
    '#required' => isset($element['#required']) ? $element['#required'] : $field['required'],
    '#multiple' => isset($element['#multiple']) ? $element['#multiple'] : $field['multiple'],
    '#options' => $options,
    '#default_value' => isset($element['#value'][$field_key]) ? $element['#value'][$field_key] : NULL,
    >>> '#attributes' => isset($element['#attributes']) ? $element['#attributes'] : NULL, <<
  );

Путем добавления '#attributes' => isset ($ element ['# attribute'])? $ element ['# attribute']: NULL, в отображаемом коде теперь появляется onchange.

...