Bir alan için programlı olarak varsayılan değeri ayarlama


10

Drupal 6'da, varsayılan değerleri ayarlamak için PHP'yi kullanabiliriz, ancak aynı kod Drupal 7 ile kullanılamaz.

Bunu yapmaya çalışıyorum hook_form_alter(), ancak kod çalışmıyor.

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;
  }
}

Yanıtlar:


17

Form değiştirme işlevinizin gerçekten çalıştığını varsayarsak (bu çağrıyla onaylayabilirsiniz dsm()), alan öğesine ulaşmak için aşağıya gitmeniz gereken 2 dizi daha vardır:

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

Drupal 7'de, alanın çevrildiği her dil için bir dizi değere sahipsiniz (böylece birden fazla / sınırsız kardinaliteye sahip alanlar karşılanabilir) ve bunların her biri altında çeşitli farklı alan sütunları için dizidir. Çoğu durumda bu 'değer' olur, ancak her zaman olmaz (örneğin bir görüntü alanının dosya kimliği sütunu, alt sütunu vb. Vardır)

umarım yardımcı olur


Bu bir derinlik daha var :)$form["field_accounts"]["und"][0]["value"]['#default_value'] = $default;
giorgio79

2
Bu yanıt tüm widget'lar için çalışmaz; değerlerini nasıl belirlediklerine bağlıdır. Örneğin, bir varlık referans alanı ile şunları kullanın: $ form ['field_name'] ['und'] [0] ['target_id'] ['# default_value'] = $ varsayılan
Renee

@Renee Çok doğru; burada daha ayrıntılı bir açıklama var
Clive

1
Alan değerlerinin her zaman bir dil @Mouneer vardır, çok dilli bir siteniz yoksa varsayılan değer LANGUAGE_NONEkullanılmalıdır
Clive

1
Gerçekten de, biraz daha iyi @Mouneer :) açıklayabilirdi Şu anki dili bir yerde formda bulacaksınız (Sanırım belki $form['#entity']->languageama kontrol etmeliyim, bu yüzden sabit bir yerde kullanılabilir. geçerli dili de $languageglobal olarak belirlenen şekilde kullanır , ancak yine de buna yardımcı olacak API yöntemleri vardır ( field_get_itemsveya EntityMetadataWrappervarlık modülü tarafından sağlanan daha da iyi )
Clive

0

Bu doğru:

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

Bu iyi çalışıyor:

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;
  }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.