โปรแกรมตั้งค่าเริ่มต้นสำหรับเขตข้อมูลโดยทางโปรแกรม


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 คุณมีอาร์เรย์ของค่าสำหรับแต่ละภาษาที่ฟิลด์ถูกแปลเป็น (เพื่อให้ฟิลด์ที่มีจำนวน cardinality ไม่ จำกัด / สามารถรองรับได้) และภายใต้แต่ละรายการนั้นอยู่ในอาร์เรย์สำหรับคอลัมน์ฟิลด์ที่แตกต่างกัน ในกรณีส่วนใหญ่นี่จะเป็น 'ค่า' แต่ไม่เสมอไป (ตัวอย่างเช่นฟิลด์รูปภาพมีคอลัมน์ id ไฟล์, คอลัมน์ alt และอื่น ๆ )

หวังว่าจะช่วย


มันเป็นความลึกอีกอย่างหนึ่ง :)$form["field_accounts"]["und"][0]["value"]['#default_value'] = $default;
giorgio79

2
คำตอบนี้ไม่สามารถใช้ได้กับทุกวิดเจ็ต ขึ้นอยู่กับวิธีที่พวกเขาระบุค่าของพวกเขา ตัวอย่างเช่นด้วยฟิลด์การอ้างอิงให้ใช้: $ form ['field_name'] ['und'] [0] ['target_id'] ['# default_value'] = $ default
Renee

@Reeee จริงมาก; มีคำอธิบายเพิ่มเติมในเชิงลึกที่นี่
ไคลฟ์

1
ค่าฟิลด์จะมีภาษา @Mouneer เสมอหากคุณไม่มีไซต์หลายภาษาLANGUAGE_NONEควรใช้ค่าเริ่มต้น
Clive

1
แน่นอนฉันอาจอธิบายได้ว่าดีกว่า @Meereer :) คุณจะพบภาษาปัจจุบันในรูปแบบที่ใดที่หนึ่ง (ฉันคิดว่าอาจจะ$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;
  }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.