2012-02-24 18 views
2

これは私が大部分の時間を探しているばかげた質問ではないことを願っています!Drupal - Views。プログラムでフィルタを設定する

私は単純にタイトル、ファイルおよびカテゴリが含まれているコンテンツタイプ(ドキュメント)を持っています。カテゴリ値は必須であり、タクソノミーによって「給電」されます。

は、私は今、分類用語によってグループ化と題し、これらの文書を表示するビューを作成したいです。

taxonomy_get_tree($vid)を使用して)、関連する用語のIDを反復処理するために私の限られたDrupalの知識Iの意図を使用し、それに応じて各ビューをレンダリングします。私はこのスニペットを使用するために待っている。これを行うために

view = views_get_view('documents'); 

$view->set_display($display_id); 

$filter = $view->get_item($display_id, 'filter', 'field_dl_category'); 

$filter['value']['value'] = $filter_value; 

$view->set_item($display_id, 'filter', 'field_dl_category', $filter); 

$viewsoutput = $view->render(); 

しかし、これは機能しません。私が$filter($view->get_item($display_id, 'filter', 'field_dl_category'))の値を照会すると、nullが返されます。

これは私のフィルタ名がCCKフィールド名と同じではないのかもしれませんか?私はDrupalの7すべてのヘルプははるかに高く評価

を使用しています

は、私がアイデア(と時間)が不足しています。

+0

「ドキュメント」ビューは実際には存在しますか?ビューUIから作成したとしますか? –

+0

はいビューは存在しません。 –

答えて

0

私はついにこの作業をすることができましたが、私はやや異なったアプローチをとっていました。

ビューを変更して関連するコンテキストフィルタを追加し、この関数views_embed_viewを使用して必要な結果を得ました。

これが役立つ場合は、ビューテンプレートが編集されているように、これはすべてのためのケースではないかもしれない私の場合は

$display_id = 'default'; 
$vid = 7; 
$terms = taxonomy_get_tree($vid); 

foreach($terms As $term){  
    $content = views_embed_view('documents', $display_id, $term->tid); 

    //now we see if any content has been provided 
    if(trim($content) != ''){ 
     print "<h3>" . $term->name . "</h3>"; 
     print $content;   
    } 
} 

トリム($コンテンツ)を返す「」データのない:これは私のソリューションです。

私はそうポストをしてください場合ので、私は、これを行うためのより良い方法があると確信している非常に新しいDrupalの開発者です。

0

私は先に進み、ビューを使用して、の文書ノードのリストをタグ付けされたカテゴリ別にグループ化して表示すると仮定します。

2は、あなたが閲覧3でこれを行うことが可能な方法(多分よりの)があります

(a)は、あなたがグループ化フィールドを選択することができます表示スタイルを選択します。 (デフォルトでは、ビューが同梱されているテーブルスタイルを試すことができます)。 nodeテーブルとViews関係を使用してtaxonomy_term_dataテーブルを適切に関連付けるとしたら、グループ化フィールドとしてtaxonomy_term_data.nameを選択できます。

このグループ化は、ビューがレンダリングされる前に行われることに注意してください。したがって、クエリでは、(コンテンツ、タグ)ペアのフラットリストを選択するだけで済みます。

(b)アタッチメント表示タイプを使用して、同様の効果を得ることもできます。 を使用カテゴリを最初にリストビューでクリックすると、そのカテゴリにタグが付けられたすべての文書を含むページ(添付)が表示されます。

(a)または(b)を実行する方法を理解するには、最初にadvanced_helpモジュールをオンにします(これはビューの必要条件ではありませんが推奨されています)。

(A)、(B)についてviews/help/style-grouping.html
すなわちスタイルでグループの章を読んでは、あなたのアプローチについて物事のカップル

views/help/display-attachment.htmlすなわち添付ファイル表示のセクションをお読みください。

(a)少なくとも1つの文書にタグを付けるかどうかにかかわらず、その語彙からすべての用語を表示します。

(b)views_embed_view()は、現在表示しているユーザーがビューにアクセスできない場合でもNULLを返します。だから、その事件を確実に捉えるようにしてください。私は、あなたはおそらく、いくつかの複雑な方法を使用して、これを設定することができ、明らかにそれが良いだろう知っている

$view = views_get_view('view_machine_name'); 
$view->init_display('default'); 
$view->display_handler->display->display_options['filters']['your_filter_name']['default_value'] = 'your_value'; 
$view->is_cacheable = FALSE; 
$view->execute(); 
print $view->render(); 

0

は、ここでの代替です。しかし、もしあなたがちょうど迅速かつ汚れたまっすぐなアクセスを望んでいれば、これはあなたをそこに連れて行きます。

関連する問題