2010-03-05 23 views
5

पर ड्रूपल डायनामिक चयन मुझे यकीन है कि यह jQuery विशेषज्ञों के लिए एक आसान है, लेकिन मैं बैकएंड लड़का हूं, और ऐसा करने का सबसे अच्छा तरीका नहीं मिल रहा है। मेरे पास ड्रूपल में दो एरे हैं, एक विचारों के नामों की एक सूची है, और दूसरा एक सरणी है जिसमें प्रत्येक दृश्य के लिए डिस्प्ले की एक सूची होती है।प्रपत्र

$form['view'] = array(
    '#type' => 'select', 
    '#title' => t('Select the view to be used for display'), 
    '#options' => $viewnames, 
); 
$form['view_display'] = array(
    '#type' => 'select', 
    '#title' => t('Select the display of the gallery view to be used'), 
    '#options' => array(), 
); 

मैं आपकी क्या अपेक्षाएं हैं, गतिशील view_display सलेक्ट बॉक्स से भरना है:

//load list of views in to array for select lists 
$views = views_get_all_views(); 
$viewnames = array(); 
$viewdisplays = array(); 
foreach ($views as $view) { 
    $viewnames[$view->name] = $view->name; 
    foreach ($view->display as $k) { 
    $id = $k->id; 
    $title = $k->display_title; 
    $viewdisplays[$view->name]['id'] = $id; 
    $viewdisplays[$view->name]['title'] = $title; 
    } 
} 

यहाँ प्रपत्र का स्निपेट है कि मैं के साथ काम कर रहा हूँ है: यहाँ कोड दो सरणियों को भरने के लिए है उचित मूल्य यदि उपयोगकर्ता ने 'व्यू' से "मेरा पसंदीदा दृश्य" चुना है, तो मैं $ viewdisplays ['मेरा पसंदीदा दृश्य'] सरणी को # viewtions 'view_display' फ़ील्ड के रूप में प्रदर्शित करना चाहता हूं।

उत्तर

4

जो भी आप पूछते हैं वह करना मुश्किल नहीं है।

  1. ड्रूपल जानता है कि एक चुनिंदा फॉर्म आइटम के विकल्प क्या हैं, क्योंकि यह फ़ॉर्म की एक प्रति रखता है। तो आपको उस विकल्प के विकल्पों को पूर्ववत करने की आवश्यकता होगी, जिसे आप अपने सभी विकल्पों के साथ बदलना चाहते हैं। इसके अलावा, आप यह सुनिश्चित करें कि उनके मूल्यों अद्वितीय हैं बनाने की जरूरत है, तो आप इस तरह एक सरणी नहीं मिलता:

    array(
        1 => 'a-a', 
        2 => 'a-b', 
        3 => 'a-c', 
        4 => 'a-d', 
        1 => 'b-a', 
        2 => 'b-b', 
    ) 
    
  2. अब आपके पास दो विकल्प
    1. है आप जावास्क्रिप्ट को प्रत्येक दृश्य के लिए अपने विकल्पों को भेज
      drupal_add_js($array, 'setting') का उपयोग कर। यह $array को Drupal.settings चर में जोड़ देगा।
    2. आप AJAX के माध्यम से विकल्प प्राप्त कर सकते हैं। उस स्थिति में आपको hook_menu के साथ मेनू आइटम बनाना होगा।
  3. अब आपको केवल विचारों के चयन में बदलाव पर प्रतिक्रिया करने की आवश्यकता है, और तदनुसार उनके विकल्प जोड़ें, या तो उन्हें AJAX कॉल या जेएस चर से प्राप्त करें। मैं परिवर्तनीय दृष्टिकोण का उपयोग करने की सिफारिश करेंगे। यह इस तरह कुछ दिख सकता है:

    $("#edit-view").change(function(){ 
        $("#edit-view_display").html(Drupal.settings.myVariable[$(this).val()]); 
    }).change(); 
    

    आपको यह जेएस आपके फॉर्म में जोड़ना होगा। आप एक js फ़ाइल में डाल सकता है, $(document).ready में लपेट और drupal_add_js

1

साथ इसे जोड़ने आप Hierarchical Select मॉड्यूल को देखा है? यह एक सीसीके क्षेत्र का प्रकार है।

इस मॉड्यूल (अपनी परियोजना पृष्ठ से) के बारे में कुछ और जानकारी:

... "hierarchical_select" फ़ॉर्म तत्व है, जो एक पदानुक्रम में उपयोगकर्ता आइटम का चयन बताने के लिए एक बहुत बढ़ाया तरीका है परिभाषित करता है।

पदानुक्रमित चयन में चयन की संपूर्ण वंशावली या केवल "गहन" चयन को बचाने की क्षमता है। आप इसे पेड़ में यथासंभव गहराई से चयन करने के लिए मजबूर करने के लिए कॉन्फ़िगर कर सकते हैं, या उपयोगकर्ता को पेड़ में कहीं भी किसी आइटम का चयन करने की अनुमति दे सकते हैं। स्तरों को लेबल किया जा सकता है, आप चयनित वस्तुओं की संख्या को सीमित कर सकते हैं, ड्रॉपबॉक्स के लिए शीर्षक कॉन्फ़िगर कर सकते हैं, साइट-व्यापी एनीमेशन विलंब का चयन कर सकते हैं, और इसी तरह। आप पदानुक्रमित चयन के माध्यम से भी नए आइटम और स्तर बना सकते हैं!

संबंधित मुद्दे