2012-02-24 119 views
2

我希望這不是我一天中大部分時間都在尋找的一個愚蠢的問題!Drupal - 意見。以編程方式設置過濾器

我有一個簡單包含標題,文件和類別的內容類型(文檔)。分類值是必需的,並且由分類法「供電」。

我現在希望創建一個視圖,該視圖將顯示按分類術語分組和標題的這些文檔。

使用我有限的Drupal知識,我打算遍歷相關術語ID(使用taxonomy_get_tree($vid)),然後相應地呈現每個視圖。

要做到這一點,我一直希望能夠使用這段代碼。

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'))的值時,返回空值。

可能這是我的過濾器名稱與CCK字段名稱不一樣嗎?

我使用Drupal的7

任何幫助非常感謝,我運行的想法(和時間)。

+0

那麼,「文件」視圖是否真的存在?即您是從Views UI創建它的? – 2012-02-26 05:46:58

+0

是阿馬爾的觀點確實存在。 – 2012-02-27 12:40:34

回答

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

我打算繼續,並假設您要使用視圖顯示文檔節點的列表,這些節點按其已標記的類別分組。

有(的也許更多)兩種方式,通過它可以在3次做到這一點:

(a)選擇的顯示風格,讓您選擇一個分組字段。 (您可以嘗試默認情況下隨視圖一起提供的表格樣式)。假設您已通過視圖關係將node表正確關聯到taxonomy_term_data表,您可以選擇taxonomy_term_data.name作爲分組字段。

請注意,此分組在視圖剛剛呈現之前完成。所以,你的查詢只需要選擇一個(內容,標籤)對的平面列表。 (b)您也可以使用附件顯示類型來實現類似的功能。在列表視圖中首先顯示已使用類別,點擊該圖標將顯示包含所選文檔中標記的所有文檔的頁面(附件)。

要了解如何執行(a)或(b),請首先打開advanced_help模塊(該模塊不是視圖必備項,但建議使用)。

對於(一),請閱讀風格即views/help/style-grouping.html
對於(B),閱讀附件顯示在部分上分組的部分views/help/display-attachment.html

一對夫婦的有關做法事: (a)它將顯示該詞彙表中的所有術語,而不管它們是否用於標記至少一個文檔。

(b)即使當前正在查看的用戶無權訪問視圖,views_embed_view()也會返回NULL。所以,確保你抓住這種情況。

0

這裏有一個選擇:

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

我知道你大概可以設置此使用一些令人費解的方法,顯然會更好。但是,如果你只是想要一個快速和骯髒的直接訪問而沒有搞亂這個,會讓你在那裏。

相關問題