2012-05-03 99 views
6

我有我的Drupal 7 template.php文件下面的代碼:的Drupal 7 preprocess_views不工作

function mytheme_preprocess_views_view__videos__videos(&$vars) { 
     drupal_add_css(drupal_get_path('theme', 'mytheme') . "/css/qwembed-jquery-1.0.css"); 
     drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/jquery.swfobject.1-1-1.min.js', array('type' => 'file', 'scope' => 'footer')); 
     drupal_add_js(drupal_get_path('theme', 'mytheme').'/js/qwembed-jquery-1.0.js', array('type' => 'file', 'scope' => 'footer')); 
    } 

我需要加載這些CSS和JS時,才顯示該視圖文件。

視圖顯示名稱爲:Videos 視圖機器名稱爲:videos

和重載文件是:

views-view--videos--videos.tpl.php 

views-view-unformatted--videos--videos.tpl.php 

views-view-fields--videos--videos.tpl.php 

任何想法,爲什麼這是不工作?

+0

是雙'__videos__videos'只是一個錯字?如果視圖名稱是「視頻」,我期望'[yourThemeName] _preprocess_views_view__videos(&$ vars)'。 –

+0

我認爲這是因爲顯示名稱是視頻,在這種情況下,機器名稱是視頻。上面列出的模板文件完美地工作,他們是視頻 - 視頻。爲了以防萬一,我會嘗試刪除一個。由於 – Cybercampbell

+1

等一下,我想我是被什麼東西錯了,所以我想它會*不*只有一個「__videos」,以及工作。將重新檢查並添加答案。 –

回答

21

的問題很可能是你嘗試實施基於相同的命名模式預處理功能用於模板覆蓋。但是預處理函數與默認情況有所不同,它們只能根據「基本」模板的名稱實現,而不能基於模板建議針對「特定」版本實現相同的機制。詳情請參閱我的answer to a more generic question

所以你需要回落到落實「基地」預處理功能,並檢查它是否被調用該函數內所需的視圖(以及可選的顯示器),大致是這樣:

function [yourThemeName]_preprocess_views_view(&$vars) { 
    $view = $vars['view']; 
    if ('videos' == $view->name) { 
    // Add desired manipulations for all 'videos' views 
    if ('videos' == $view->current_display) { 
     // Add desired manipulations for the 'videos' display only 
    } 
    } 
} 

可以也加你通過實現嘗試通過適當的名稱爲功能檢查調用特定版本的通用預處理功能所期望的行爲 - 見this article末的一個例子 - 但是這引入了相當長的一段處理開銷,並會只有有意義的,如果你需要特定的預處理功能的許多意見。

每種視圖類型都有更多的「基礎」預處理功能,您可以直接執行 - 有關可用選項,請參閱'views/theme/theme.inc'中的template_preprocess_views_view_*列表。

作爲基本規則,每當模板有template_preprocess_*函數時,您也可以實現相應的yourThemeOrModuleName_preprocess_*函數。如果您需要處理基於模板的名稱建議模板,你需要找到「基地」預處理函數名,實現這一點,在功能檢查您的具體情況(如對特定視圖,如上面的例子)。

+2

哇!非常感謝你提供了這樣一個清晰而詳細的答案。我無法表達我多麼感激你爲幫助你甚至不知道的人而付出的努力。我可以確認你的答案是100%正確的!測試和工作!再次感謝@Henrik歐寶 – Cybercampbell

+0

爲了您夢幻般的回答未來的讀者,我想指出,這是因爲在Drupal 7核心顯著的bug只有在首位必要的。看看這個問題的更多細節:http://drupal.org/node/939462 – CoreDumpError