2012-04-24 23 views
1

Harvest Chosen jQueryプラグインを使用して、Wordpressサイトの送信ボタン付きドロップダウンリストを作成しています。これは、所与のタクソノミーからのすべての用語を表示するように接続され、ユーザが用語を選択してから、サブミットボタンを押して、選択された用語に関連する対応するページをロードすることを可能にする。複数選択jQuery

私は今、分類がタームから複数の選択肢を使って動作するようにプラグインを取得しようとしています。私は選択をしており、フロントエンドでは複数の用語を選択できますが、複数の選択肢を提出する方法を理解することはできません。

私のコードには何かが欠けていることは知っていますが、複数の用語を選択できるように変更する必要があるのはわかりません。

これは私がこれまで持っているものです。

<form action="<?php bloginfo('url'); ?>"> 
<div> 
<?php 
function get_terms_dropdown($taxonomies, $args){ 
    $myterms = get_terms($taxonomies, $args); 
    $output ="<select name='topics' class='chosen' style='width:500px' multiple='true'>"; 
    foreach($myterms as $term){ 
     $root_url = get_bloginfo('url'); 
     $term_taxonomy = $term->taxonomy; 
     $term_slug = $term->slug; 
     $term_name = $term->name; 
     $link = $term_slug; 
     $output .="<option value='".$link."'>".$term_name."</option>"; 

} 
    $output .="</select>"; 
return $output; 
} 

$taxonomies = array('topics'); 
$args = array(); 
echo get_terms_dropdown($taxonomies, $args); 

?> 
<div><input type="submit" value="Filter" /></div> 
</div> 
</form> 

通常、複数の選択のために、URLの構造は、「AND」クエリのために、以下のようになります。

domain.com/?topics=topic1+topic2+topic3 

OR次'OR'クエリの場合:

domain.com/?topics=topic1,topic2,topic3 

これらのオプションのいずれかを取得すると、今すぐ使用できますAND/OR検索のオプションを追加しようとしています)

この作業を正しく行うための助けや指針は素晴らしいでしょう。

+0

PHPを使用している場合、 '?topics [] = topic1&topics [] = topic2&topics [] = topic3&mode = AND'のようなクエリ文字列を期待している可能性があります。これが問題ないかどうか私に教えてください。 –

+0

こんにちはSalman。複数の選択ドロップダウンから1つの値だけを選択すると、送信は正常に機能し、最初の '?' URLに追加されます。問題は、複数の選択肢があり、選択された最後の値が選択され、そのページがロードされます。 – Rob

+0

複数のドロップダウンから1つの値を選択すると、送信は正常に行われ、最初の '?'がURLに追加されます。この問題は、複数の選択肢があり、選択された最後の値が選択され、そのページが読み込まれます... $ output。= "";これはURLのように作成されます:domain.com/?topics=letterTOPIC1&topics=letterTOPIC2私はstr_replaceを使って変更することができますが、&、+/etcはurlencodedであり、str_replaceする方法を見つけることができません。 – Rob

答えて

1

フォームを送信すると、あなたはJavaScriptでURLを構築し、のようなものでページを変更することができます:

$('form').submit(function() { 
    var selectArray = $('select').val(); 
    var newURL = "http://domain.com/?topics="; 
    for (var i = 0; i < selectArray.length; i++) { 
     if (1 != 0) { 
      newURL += "+"; 
     } 
     newURL += selectArray[i]; 
    } 
    window.location = newURL; 
}); 

内訳:フォームが送信されたとき$('form').submit(function() { [...] });が発射されます。フォームに固有のクラス$('form.yourClass')またはID $('form#yourID')でこの資格を取得したいと考えています。

$('select').val()は、selet要素の選択された値の配列を返します。クラス$('select.yourClass')またはID $('select#yourID')のフォームと同じ方法で修飾する必要があります。 JavaScriptは配列を通り、それぞれの値をhttp://domain.com/?topics=というルートURLに追加し、各値の間には+が入ります。完了すると、ユーザーは新しいURLにリダイレクトされます。

+0

こんにちはMatthew - 私はこれをどのように実装するのか少し拡張できますか?私のJavascriptのスキルはかなりスリムです私は恐れています... – Rob

+0

それはjQueryです。 '$(' form ')。submit(function(){})'は、ページ上のフォームが送信されたときに起動します。 '$( 'form#myFormID')'や '$( 'form.myFormClass')'のようなIDで修飾することができます。 $( 'select')。val()はselect要素の値を返します。あなたは正しい方法を得るためにそれを修飾することができます。私は私の例に詳細を追加します。 –