Программно изменить текстовое поле CCK - PullRequest
0 голосов
/ 15 декабря 2010

Я пытаюсь добавить флажок «Показать» в несколько текстовых полей cck. Приведенный ниже код добавляет поле, но при отправке формы я не вижу значений в массиве $ form_state при проверке формы.

Что я могу делать не так?

<?php

/**
 * Implementation of hook_form_FORM_ID_alter().
 */
function leghist_form_paleghist_node_form_alter(&$form, &$form_state) {

  //Add function to manipulate cck node form
  $form['#after_build'][] = 'leghist_cck_after_build';
}


/**
 * Implementation of hook after_build();
 */
function leghist_cck_after_build ($form, &$form_state) {

  //Add display option to titles
  foreach (element_children($form['field_lg_pop_names']) as $key) {

    $form['field_lg_pop_names'][$key]['display'] = array(
      '#type' => 'checkbox',
      '#title' => t('Display'),
      '#process' =>  array('leghist_display_process')
    );

  }

  return $form;
}

/**
 * Implementation of hook element_process
 */
function leghist_display_process($element) {
  dsm('yuk');
}

?>

Ответы [ 2 ]

0 голосов
/ 15 декабря 2010

Изменение формы в функции #after_build - плохая идея.Хотя элементы формы могут отображаться на странице, они не будут обрабатываться как часть формы.

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

0 голосов
/ 15 декабря 2010

Даже после прочтения полей hook_form_alter () и CCK о подводных камнях, на которые нужно обратить внимание при использовании hook_form alter в CCK, я все еще был в замешательстве, потому что по сути я делаю именно то, что они предлагают. *

Я наконец решил попробовать другой подход, и у меня сработали следующие изменения:

<?php

//Changed from hook_form_FORM_ID_alter to  hook_form_alter
/**
 * Implementation of hook_form_FORM_ID_alter().
 */
function leghist_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'paleghist_node_form') {
    //Add function to manipulate cck node form
    leghist_cck_alter($form);

  }

}


/**
 * Adds Element to $form
 */
function leghist_cck_alter (&$form) {

  //Add display option to titles
  foreach (element_children($form['field_lg_pop_names']) as $key) {

    $form['field_lg_pop_names'][$key]['display'] = array(
      '#type' => 'checkbox',
      '#title' => t('Display'),
      '#process' =>  array('leghist_display_process')
    );

  }

}

/**
 * Implementation of hook element_process
 */
function leghist_display_process ($element) {

  return $element;
}
...