2012-02-13 82 views
1

我有一個隨機的緩存視圖,我需要訪問的元素,而不顯示它來獲得訂單進入一個會議的一些next/prev按鈕上班。隨機緩存視圖的順序不同時出現在塊或視圖_get_view

當我使用views_get_view輸出視圖時,我得到與實際顯示完全不同的結果。有任何想法嗎?

$view = views_get_view('hotels_view'); 
    $view->set_display('block'); 
    $view->render(); 
    print sizeof($view->result); 
    $counter = 0; 
    foreach ($view->result as $result) { 
    echo 'Result: ' . $result->nid . ' -- ' . url('node/' . $result->nid, array('alias' => FALSE)).'<br />'; 
    $counter++; 
    //$_SESSION['hotels_listing'][$counter] = url('node/' . $result->nid, array('alias' => FALSE)); 
} 
+0

澄清的問題:當你說「隨機緩存」,你的意思是查看結果的隨機排序,緩存一生中,然後保持不變? – 2012-02-13 14:11:42

+0

@Henrik歐寶 - 現貨上。 – SpaceBeers 2012-02-13 14:15:56

+0

對不起,我忘了問:你正在使用哪個Drupal和Views版本? – 2012-02-13 19:47:44

回答

2

我沒有本地測試這一點,所以只是一些猜測:

先上去,我不知道這是否從D6變更爲D7,但IIRC,顯示IDS總是有附加一些,所以我期望需要使用'block_1'而不是'block'。

再看看render()函數,它期望顯示ID作爲參數。如果我正確讀取代碼,它不會檢查通過$view->set_display()設置的id,因此這可能會導致使用不同的(即默認)顯示,這會導致使用不同的緩存結果。

所以,你可能再試一次像這樣:

$view = views_get_view('hotels_view'); 
    $view->render('block_1'); 
    print sizeof($view->result); 
    $counter = 0; 
    foreach ($view->result as $result) { 
    echo 'Result: ' . $result->nid . ' -- ' . url('node/' . $result->nid, array('alias' => FALSE)).'<br />'; 
    $counter++; 
    //$_SESSION['hotels_listing'][$counter] = url('node/' . $result->nid, array('alias' => FALSE)); 
} 

在這樣的作品,你可能也想通過省略渲染,以節省一些處理時間,因爲你只是在查詢結果順序興趣,不區分實際輸出:

$view = views_get_view('hotels_view'); 
    $view->execute('block_1'); 
    [...]