2012-03-02 46 views
1

我有一個要求在內容中執行索引搜索,該內容必須在結果中包含一對標籤。標籤必須是隨機選擇。該平臺是Drupal 7.12Drupal:D7重寫視圖返回的值

我創建了一個視圖,管理通過search_api SOLR搜索的結果。該視圖返回所需的內容,似乎按預期工作。我已經包含了幾個Global:自定義文本字段作爲標記條目的佔位符。

我現在正在尋找解決方案來管理隨機標記值的要求。隨機化不是問題,問題是如何將隨機值包含到查看結果中。

我目前的做法是編寫一個views_pre_render掛鉤來攔截顯示爲字段([nothing][nothing_1])的佔位符。測試代碼如下所示

function MODULE_views_pre_render(&$view) 
{ 
    $view_display = $view->display['default']; 
    $display_option = $view_display->display_options; 
    $fields = $display_option['fields']; 
    foreach($view->result as $result) 
    { 
     $fields['nothing']['alter']['text'] = sprintf("test %d", rand(1,9)); 
    } 
} 

當視圖渲染我目前沒有看到佔位符的任何變化。

任何接近方法的指針,備用解決方案等都會被感激地接收,因爲此時此刻消耗了大量稀缺時間。從鉤子內調用print_r($view)轉儲超過46M到一個包含2個項目的結果集的日誌文件。

回答

2

您的任務有兩種可能的解決方案。

第一種方法是做模板級別的一切。爲要隨機化的視圖字段定義一個模板。在顯示的高級設置中,轉到主題:信息。確保選擇了正確的主題並找到您的字段的模板建議。他們從最普遍到最具體的開始列出,你可以選擇適合你的更好的東西。 我想你的領域最具體的模板建議將是這樣的:views-view-field - [YOR VIEW NAME] - [你的顯示名稱] - nothing.tpl.php。在主題模板目錄中創建具有該名稱的文件,並且在此模板中,您可以渲染任何您想要的內容。

默認情況下,該模板只有一個行:

print $output; 

,你可以將其更改爲:

print sprintf("test %d", rand(1,9)); 

,或者別的什麼,無論如何:)

第二種方法是去Views PHP模塊。通過此模塊,您可以添加一個自定義PHP字段,您可以在其中執行任何您想要的操作。儘管模塊還沒有發佈,但對於大多數任務來說似乎工作得很好,而且對於如隨機數字這樣一個簡單的任務來說,它肯定會奏效。

+0

榮譽...這個岩石和簡單! <?php print「link to $ output」; ?>加上緩存緩存有解決方案封裝簡單本身。我現在將添加主要功能。 – 2012-03-04 08:33:02

+0

最近重新訪問了解決方案,現在已經使用Views_PHP模塊,如上所述並調用模塊函數,從而在視圖定義中而不是在表示層中維護邏輯。再次感謝領導。 – 2012-04-05 09:55:39

0

我在尋找另一個問題時偶然發現了這個,並認爲我會貢獻。

除了添加其他模塊或修改模板,只需添加一個視圖「排序標準」的「全球:隨機」。