प्रोग्रामेटिक रूप से किसी फ़ील्ड के लिए डिफ़ॉल्ट मान सेट करें


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
यह उत्तर सभी विजेट के लिए काम नहीं करेगा; यह निर्भर करता है कि वे अपने मूल्य को कैसे निर्दिष्ट करते हैं। उदाहरण के लिए, एक इकाई क्षेत्र के साथ, उपयोग करें: $ फॉर्म ['field_name'] ['und'] [०] [] target_id ’] [_ # default_value’] = $ डिफ़ॉल्ट
Renee

@ रेनी बहुत सच; वहाँ एक और अधिक में गहराई से व्याख्या दी गई है यहाँ
क्लाइव

1
फ़ील्ड मान हमेशा एक भाषा है @Mouneer, यदि आपके पास बहुभाषी साइट नहीं है तो डिफ़ॉल्ट LANGUAGE_NONEका उपयोग किया जाना चाहिए
क्लाइव

1
वास्तव में, मैं समझा सकता था कि थोड़ा बेहतर @ मौनीर :) आपको वर्तमान भाषा कहीं न कहीं रूप में मिल जाएगी (मुझे लगता है कि शायद, $form['#entity']->languageलेकिन मुझे जांच करनी होगी, ताकि एक निरंतर के स्थान पर इसका उपयोग किया जा सके। पुनः प्राप्ति कोड) के रूप में भी द्वारा निर्धारित वर्तमान भाषा का प्रयोग करेंगे $languageकि वैसे भी साथ वैश्विक, लेकिन देखते हैं मदद करने के लिए एपीआई तरीकों ( field_get_itemsया और भी बेहतर EntityMetadataWrapperइकाई मॉड्यूल द्वारा प्रदान की)
क्लाइव

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.