2012-05-03 4 views
6

나는 내 드루팔 7 template.php 파일에 다음 코드가 있습니다드루팔 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'는 오타가 아닙니까? 뷰 이름이 'videos'인 경우,'[yourThemeName] _preprocess_views_view__videos (& $ vars)'를 기대합니다. –

+0

나는 disply 이름이 비디오이고이 경우 기계 이름이 비디오이기 때문에 나는 asumed했다. 위에 나열된 템플릿 파일은 완벽하게 작동하며 비디오 - 비디오입니다. 나는 경우에 대비하여 어쨌든 하나 제거하려고합니다. 감사합니다 – 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 Opel – Cybercampbell

+0

당신의 환상적인 답변을 독자들에게 전하기 위해서, 이것은 드루팔 (Drupal 7) 코어의 중대한 버그로 인해 처음에는 필요하다는 것을 지적하고 싶었습니다. 자세한 내용은이 문제를 확인하십시오. http://drupal.org/node/939462 – CoreDumpError