2011-11-10 4 views
1

각 사용자 역할에 대해 별도의 테마를 적용하고 싶습니다. 관리자 측에서이 작업을 수행 할 수있는 옵션이 있음을 알고 있지만 프로그래밍 방식으로이 작업을 수행하려고합니다.
global $ custom_theme을 사용하여 옵션을 찾았습니다. 나는프로그래밍 방식으로 테마 적용

function mymodule_config_preprocess_page(&$variables) { 
global $custom_theme; 
$custom_theme = 'bluemarine'; 
init_theme(); 

}

로 내 코드를 변경 그러나이 수정을 요구하는 테마 됐나 영향을 미치는되지 않는 이유는 무엇입니까?

function mymodule_init() { 
    global $custom_theme; 
    $custom_theme = 'bluemarine'; 
} 

를 내가 아는 한 :

Pls는 저

답변

3

가 나는 그것이 전처리 변수의 시점에서 테마를 변경하는 너무 늦게 생각, 당신은 아마 hook_init()에서이 작업을 수행 할 수 있습니다 도움이 Drupal이 나중에이 과정에서 init_theme()으로 전화 할 필요가 없습니다. $custom_theme을 사용하여 사용할 테마를 결정하십시오.

+0

에서 테마 변경을 구현하기 위해 아마 최고의 후크입니다 array] : 첫 번째 인수가 유효한 콜백이 될 것으로 예상되면 ' –

+1

'에 'phptemplate_menu_local_tasks'가 제공됩니다./admin/build/themes 경로로 이동하십시오. 아래로 스크롤하여 '구성 저장'을 클릭하면 캐시가 지워지고 문제가 해결됩니다. – Clive

+0

죄송합니다. 한 가지 더 많은 문제가 있습니다. 테마가 블록 페이지에 영향을 미치지 않습니다. 관리자/빌드/블록 –

0

테마는 이미 mymodule_config_preprocess_page()이 실행될 때 초기화되었습니다. 일단 초기화되면 테마를 다시 초기화 할 수 없습니다.

ThemeKey 모듈 코드를 보면 $custom_theme의 값이 hook_init()으로 변경됩니다. call_user_func_array를() [function.call 사용자-func-을 : 그건 내가 다음 테마가 적용된 condtion을 변경하지만 유타는 나에게 "경고 경고 메시지를 제공 드루팔 6

function mymodule_init() { 
    global $custom_theme; 
    $custom_theme = 'bluemarine'; 
} 
관련 문제