2012-05-03 13 views
6

を働いていない:Drupalの7 preprocess_viewsは私が私のDrupal 7 <code>template.php</code>ファイルに次のコード持って

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'は入力ミスですか?ビュー名が 'videos'の場合​​は、 '[yourThemeName] _preprocess_views_view__videos(&$ vars)'が必要です。 –

+0

私はdisply名がビデオであったため、この場合はマシン名がビデオであることを断言しました。上記のテンプレートファイルは完全に動作し、ビデオ - ビデオです。私はとにかく1つを取り除こうとします。ありがとう – Cybercampbell

+1

ホールド、私は何かと間違っていたと思うので、私はそれが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_*関数を実装することができます。テンプレート名の提案に基づいてテンプレートを操作する必要がある場合は、 'base'前処理関数名を見つけてそれを実装し、その関数で特定のケースをチェックする必要があります(上記の例のような特定のビューのように)。

+2

うわー!!!そのような明確で詳細な答えをどうもありがとう。あなたが知らない人を助けようと努力してくれたことに、どれだけ感謝しているかを表現することはできません。私はあなたの答えが100%正しいことを確認することができます!テストされ、働いている!!もう一度おねがいします@Henrik Opel – Cybercampbell

+0

今後の読者の皆様には、Drupal 7コアの重大なバグのために、これが最初に必要であることを指摘したいと思います。詳細については、この問題を確認してください:http://drupal.org/node/939462 – CoreDumpError