5

これは jQuery の専門家にとっては簡単なことだと思いますが、私はバックエンドの人なので、これを行う最善の方法を見つけることができません。Drupal には 2 つの配列があります。1 つはビューの名前のリストで、もう 1 つは各ビューのディスプレイのリストを含む配列です。2 つの配列を設定するコードは次のとおりです。

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

私が使用しているフォームのスニペットは次のとおりです。

$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 選択ボックスに適切な値を動的に入力することです。ユーザーが「view」の選択から「My Favorite View」を選択した場合、「view_display」フィールドへの #options として $viewdisplays['My Favorite View'] 配列を表示したいと考えています。

4

2 に答える 2

4

お願いしたことを実行するのは難しいことではありません。

  1. Drupal は、フォームのコピーを保持しているため、選択フォーム項目にどのようなオプションがあるかを認識しています。そのため、変更する選択のオプションに、可能なすべてのオプションを事前に入力する必要があります。また、それらの値が一意であることを確認する必要があるため、次のような配列は得られません。

    array(
      1 => 'a-a',
      2 => 'a-b',
      3 => 'a-c',
      4 => 'a-d',
      1 => 'b-a',
      2 => 'b-b',
    )
    
  2. 今、あなたには2つの選択肢があります
    1. を使用して、各ビューのオプションを JavaScript に送信します
      drupal_add_js($array, 'setting')。これにより、 が変数に追加$arrayされDrupal.settingsます。
    2. オプションは AJAX を介して取得できます。その場合、 でメニュー項目を作成する必要がありますhook_menu
  3. これで、ビューの選択の変更に対応し、それに応じてオプションを追加し、ajax 呼び出しまたは js 変数から取得するだけで済みます。変数アプローチを使用することをお勧めします。それは次のようになります。

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

    この js をフォームに追加する必要があります。それをjsファイルに入れ、ラップして$(document).ready追加することができますdrupal_add_js

于 2010-03-06T07:52:59.740 に答える
1

Hierarchical Selectモジュールを見たことがありますか? これは CCK フィールド タイプです。

このモジュールに関する詳細 (プロジェクト ページから):

... 「hierarchical_select」フォーム要素を定義します。これは、ユーザーが階層内のアイテムを選択できるようにするための大幅に拡張された方法です。

階層選択には、選択の系列全体または「最も深い」選択のみを保存する機能があります。ユーザーがツリー内で可能な限り深い選択を行うように強制したり、ユーザーがツリー内の任意の項目を選択できるように構成したりできます。レベルにラベルを付けたり、選択できるアイテム数を制限したり、ドロップボックスのタイトルを構成したり、サイト全体のアニメーション遅延を選択したりできます。Hierarchical Select を使用して、新しいアイテムやレベルを作成することもできます。

于 2010-03-11T15:15:53.863 に答える