Bir Form Drupal Dinamik Seçin

2 Cevap php

Ben bu jQuery uzmanlar için kolay bir eminim, ama ben bir arka uç bir adam değilim, ve bunu yapmanın en iyi yolu bulamıyor. Ben Drupal iki dizi var, bir manzaraya isimlerinin bir listesi ve diğer her görünüm için ekranların bir listesini içeren bir dizidir. İşte iki diziyi doldurmak için kod:

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

İşte ben çalışıyorum formun pasajı var:

$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(),
);

Ben ne yapmak istiyorum, dinamik uygun değerleri ile view_display seçme kutusunu doldurmak edilir. Kullanıcı 'görünümü' seçin "My Favorite View" seçtiyseniz, ben 'view_display' alanının # seçenekleri olarak $ viewdisplays ['Favori gör'] dizisi görüntülemek istiyorum.

2 Cevap

Bu ne sormak yapmak zor bir görev değil.

  1. Bu formun bir kopyasını saklar beri Drupal, bir form seç öğesi ne seçenekleri biliyorum. Yani buna sahip tüm seçenekleri ile değiştirmek istediğiniz select seçenekleri önceden doldurmak gerekir. Ayrıca değerleri benzersiz olduğundan emin olmak gerekir, bu nedenle böyle bir dizi alamadım:

    array(
      1 => 'a-a',
      2 => 'a-b',
      3 => 'a-c',
      4 => 'a-d',
      1 => 'b-a',
      2 => 'b-b',
    )
    
  2. Now you have two options
    1. You send your options for each view to the javascript using
      drupal_add_js($array, 'setting'). This will add the $array to the Drupal.settings variable.
    2. Sen AJAX ile seçenekleri alabilirsiniz. Bu durumda hook_menu ile bir menü öğesi oluşturmak gerekir.
  3. Şimdi sadece görünümleri için seçme bir değişime tepki ve buna göre seçenekler eklemek, bir ajax arama veya js değişkeni onları almak ya gerekir. Ben değişken yaklaşımı kullanarak öneriyoruz. Bu böyle bir şey olabilir:

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

    Bu forma js eklemek gerekir. Sen $(document).ready sarın ve drupal_add_js ile eklemek, bir js dosyasına koyabilirsiniz

Eğer Hiyerarşik Seç modülünü gördünüz mü? Bu CCK alan türü bulunuyor:

http://drupal.org/project/hierarchical_select

Bu yardımcı olur umarım!