Програмно встановити значення поля за замовчуванням для поля


10

У Drupal 6 ми могли використовувати PHP для встановлення значень за замовчуванням, але той самий код не можна використовувати з Drupal 7.

Я намагаюся це зробити hook_form_alter(), але код не працює.

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"]['#default_value'] = $default;
      // …
      break;
  }
}

Відповіді:


17

Якщо припустити, що ваша функція зміни форми фактично запущена (що ви можете підтвердити за допомогою цього дзвінка dsm()), насправді є ще 2 рівні масиву, на які потрібно перейти, щоб потрапити на елемент поля:

$form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;

У Drupal 7 у вас є масив значень для кожної мови, поле було переведено (таким чином, щоб поля з множинною / необмеженою кардинальністю можна було задовольнити), і під кожною з них знаходиться масив для різних різних стовпців поля. У більшості випадків це буде "значення", але не завжди (наприклад, поле зображення містить стовпчик ідентифікатора файлу, альт-колонку тощо)

Сподіваюся, що це допомагає


Це ще одна глибина :)$form["field_accounts"]["und"][0]["value"]['#default_value'] = $default;
giorgio79

2
Ця відповідь не буде працювати для всіх віджетів; залежить від того, як вони визначають їх значення. Наприклад, з полем референції сутності використовуйте: $ form ['ім'я_поля'] ['і'] [0] ['target_id'] ['# default_value'] = $ default
Renee

@Renee Дуже правда; є більш глибоке пояснення тут
Clive

1
Значення полів завжди мають мову @Mouneer, якщо у вас немає багатомовного сайту, LANGUAGE_NONEслід використовувати за замовчуванням
Clive

1
Справді, я міг би пояснити, що трохи краще @Mouneer :) Ви знайдете де-небудь поточну мову у формі десь (думаю, можливо, $form['#entity']->languageале мені доведеться перевірити, щоб її можна було використовувати замість постійної. Код пошуку також використовуватиметься поточна мова, що визначається $languageглобальним, але існують методи API, які так чи інакше допоможуть ( field_get_itemsабо ще краще, що EntityMetadataWrapperнадається модулем сутності)
Clive

0

Це правильно:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);

  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"][LANGUAGE_NONE][0]['value']['#default_value'] = $default;
      // …
      break;
  }
}

0

Це добре працює:

function my_form_alter(&$form, &$form_state, $form_id) {
  dsm($form);
  switch($form_id) {
    case 'accounts_node_form':
      $form["field_accounts"]["und"][0]['value']['#default_value']=$default;
      break;
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.