2009-08-19 80 views
1

傳遞UID作爲參數正常工作與此代碼:Drupal的6次2:設置日期參數

$bouts = views_get_view_result('Results', 'page_1', array($user->uid)); 

在views_get_view_result重點線,設置參數爲:

$view->set_arguments($args); 

但是關於通過什麼日期範圍?

另外,如果在視圖中指定了某種過濾器,是否有一種方法可以對它進行參數化修改?

views_get_view_result: 

/** 
* Investigate the result of a view. 
* from Drupal.org. 
* 
* @param string $viewname 
*  The name of the view to retrieve the data from. 
* @param string $display_id 
*  The display id. On the edit page for the view in question, you'll find 
*  a list of displays at the left side of the control area. "Defaults" 
*  will be at the top of that list. Hover your cursor over the name of the 
*  display you want to use. A URL will appear in the status bar of your 
*  browser. This is usually at the bottom of the window, in the chrome. 
*  Everything after #views-tab- is the display ID, e.g. page_1. 
* @param array $args 
*  Array of arguments. (no keys, just args) 
* @return 
*  array 
*   An array containing an object for each view item. 
*  string 
*   If the view is not found a message is returned. 
*/ 
function views_get_view_result($viewname, $display_id = NULL, $args = NULL) { 
    $view = views_get_view($viewname); 
    if (is_object($view)) { 
    if (is_array($args)) { 
     $view->set_arguments($args); 
    } 
    if (is_string($display_id)) { 
     $view->set_display($display_id); 
    } 
    else { 
     $view->init_display(); 
    } 
    $view->pre_execute(); 
    $view->execute(); 
/* print "<pre> $viewname: $display_id"; 
    print_r(get_class_methods($view)); */ 
    return $view->result; 
    } 
    else { 
    return t('View %viewname not found.', array('%viewname' => $viewname)); 
    } 
} 
+0

AFAIK views模塊中沒有'views_get_view_result()'函數 - 你自己聲明瞭嗎?如果是這樣,你應該添加它的定義以允許答案。 – 2009-08-23 17:43:28

+0

你已經創建瞭如此多的drupal問題。你應該把所有的東西合而爲一。 – 2009-08-29 03:45:20

回答

1

作爲將數據範圍並給予發佈函數定義,你可以通過日期範圍中,只有當該視圖會接受它們作爲參數。我不是100%確定,但afaik日期範圍只能被定義爲過濾器,而不是作爲參數,導致你的第二個問題:

以編程方式更改視圖過濾器設置是可能的,但有點混亂,給定相當複雜的視圖對象/數組mashup結構。在你上面發佈的功能中,第一行是

$view = views_get_view($viewname); 

之後,$ view包含整個視圖對象。所述過濾器設置每個顯示定義的,因此假設你有一個視圖僅具有默認顯示,你會發現

$view->display['default']->display_options['filters'] 

下在過濾器設置(注意,對象/數組符號組合 - 的顯示是一個包含的對象類型views_display)

'filters'數組每個過濾器都包含一個條目,根據過濾器類型不同而有不同的元素。爲了您的目的,我建議僅使用您感興趣的過濾器和預配置/硬編碼值創建一個虛擬視圖。使用調試器(或var_dump/print_r),您可以在創建視圖後查看過濾器數組。從你在那裏找到的,你應該能夠推斷出如何注入你的自定義日期範圍。


免責聲明:在這個視圖中查看這樣有點煩人,而不是有效,但它的工作原理。到目前爲止,我還沒有找到簡明的Views2文檔,可以直接解釋這些內容,因爲我發現official API documentation對代碼的使用有點缺乏。 (當然,這可能只是我愚蠢;)

0

如果您使用視圖2,您可以使用GUI來添加日期參數。然後,在URL,就可以把:

www.yousite.com/yourview/startDate--finishDate

對於起始日期/ finishDate,格式爲YYYY-MM-DD-HH。

GL!