2011-04-11 3 views
2

좋아, 여기 거래가있다 : 나는 여러 다른 섹션이있는 드루팔 (Drupal) 웹 사이트를 만들고있다. 각 섹션은 콘텐츠 형식을 표시하는보기입니다. 각 섹션에는 고유 한 콘텐츠 형식이 있습니다. 예를 들어 콘텐츠 형식이 blog?q=blog을 가리키는보기가 있습니다.Drupal 7 - template.php의 어떤 페이지 템플릿이 사용 되는가를 나타내는 변수는 무엇입니까?

모든 섹션은 서로 약간 다르게 보입니다. '웹 사이트 내 웹 사이트'와는 다르지만 다를 수는 있지만 동일한 템플릿 파일을 모두 사용할 수없고 각각을 CSS로 수정할 수는 없습니다. 각 섹션에는 자신의 page.tpl.php이 필요합니다.

아쉽게도 AFAIK Drupal 테마의 .info 파일은 전체 테마에 대해 page.tpl.php을 할당하거나 각 노드에 page-node-####.tpl.php을 할당 할 수 있습니다. 이 웹 사이트에는 많은 컨텐츠가 있으므로 Drupal을 모든 생성 된 노드에 대해 동일한 새로운 page-node-####.tpl.php을 설정하도록 설정하면 관리하기가 매우 쉽습니다.

이 문제를 해결하려면 pathauto를 사용하여 각 콘텐츠 형식의 별칭을 만듭니다. 예를 들어 콘텐츠 유형이 blog 인 모든 노드에 ?q=blog/[post title]이라는 별칭이 지정됩니다. template.php을 수정하여 'blog'로 시작하는 별칭의 페이지에 page-blog.tpl.php을 사용하십시오.

다른 사람들이 이런 종류의 일을 시도하고 설명 된 것과 같은 기능을 만들었습니다. 불행히도, 내가 본 모든 것들은 드루팔 (Drupal 6 이하)을위한 것입니다. 나는 성공한 것들을 수정하려고 시도했다. 지금까지,하지만 난이 올바른 궤도에 있다고 생각 :

function basic_preprocess_page(&$vars, $hook) { 
    ... 

    if(module_exists('path')) { 
     $alias = drupal_get_path_alias($_GET['q']); 
     $site_section = "blog"; 
     if(strpos($alias, $site_section) === 0) { 
      $VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE = "/path/to/page-blog.php"; 
     } 
    } 
} 

내가 $VARIABLE_THAT_TELLS_THE_PAGE_WHAT_TEMPLATE_TO_USE 사람이 그것이 무엇인지 않습니다 찾을 수 있습니까?

어쩌면 내 사이트 구조가 잘못되었을 수도 있습니다. 누구든지 내 사이트를 재구성하는 방법을 알고 있으므로 별도의 섹션으로보다 쉽게 ​​테마를 만들 수 있습니다!

감사합니다. (c:

편집 : 아마도 템플릿 제안을 대신 사용해야합니다. 누구든지 이것을 설정하는 데 사용할 함수 또는 변수를 알고 있습니까?

답변

3

그들은 D7에서이 배열 키의 이름을 변경했는데 어디에도 문서화 된 것을 보지 못했습니다. 나는 디버깅의 좋은 비트 후에 이것을 마침내 발견했다.

function myTheme_preprocess_page(&$vars) { 
global $node; 

if ($node->type == 'blog') { 
    $vars['theme_hook_suggestions'] = array('my__blog_template'); // use my--blog-template.tpl.php, note '-' = '_' 
} 
elseif ($node->type == 'articles') { 
    $vars['theme_hook_suggestions'] = array('article__node_template'); // use article--node-template.tpl.php 
} 
} 

아를하고 template.php로 변경 한 후 드루팔 캐시를 플러시하는 것을 잊지 마세요 : 당신은 너무 같은 hook_preprocess_page()와 template.php에 테마 템플릿을 대체 할 수 있습니다.

0

좋아, 나는 그것을 발견 :이 기능에 http://drupal.org/node/223440#comment-991840

$alias = drupal_get_path_alias($_GET['q']); 
    if ($alias != $_GET['q']) { 
    $template_filename = 'page'; 
    foreach (explode('/', $alias) as $path_part) { 
     $template_filename = $template_filename . '-' . $path_part; 
     $variables['template_files'][] = $template_filename; 
    } 
    } 

신용 사용자 MFB로 이동합니다.

나는 많은 문제가 있었으므로 아무도 유용하다고 생각하면 여기에서 설명하겠다.

이 함수는 template.php에 있습니다. <theme name>_preprocess_page 기능의 일부 여야합니다. 그것이하는 일은 별칭을 취한 다음 그것을 여러 구성 요소로 분해하는 것입니다. 예를 들어, 별명이 ?q=blog/blog-post-title 인 페이지에있는 경우 blogblog-post-title으로 분해됩니다. 그런 다음 각 구성 요소를 템플릿 제안의 이름으로 바꿉니다.

page-blogpage-blog-blog-post-title

템플릿 제안 다른 템플릿 파일입니다 : 페이지는 이제 두 개의 새 템플릿 제안을 가지고 있도록합니다 ($variables[] 배열 내부)에 template_files[] 배열에 각 템플릿 제안을 넣습니다. 이 경우에는 페이지 용이지만 필수적 일 필요는 없습니다. 블록, 노드 등을 생각할 수있는 모든 것에 대한 템플릿 제안을 할 수 있습니다. '템플릿 제안'이라는 이름이 당신을 속일 수는 없습니다. 템플리트 제안은 기본 템플리트가 존재하는 한 그대로 사용됩니다. 왜 그런 이름을 지 었는지 모르겠습니다. 나는 그것이 개명되어야한다고 생각한다.

당신이 할 일은, 당신이 별칭을 가리키는 템플릿 제안을 찾기 위해 Drupal을 설정 했으므로 나머지는 모두 당신의 테마에있는 새로운 템플릿 파일을 만드는 것입니다. 이 경우 전체 블로그 섹션을 테마로하고 싶다고 가정 해 봅시다. 템플릿 폴더에서 내가 원하는 레이아웃으로 page--blog.tpl.php (--double 하이픈 - 참고)라는 파일을 만들어야합니다.

드루팔 (Drupal은 찾을 수있는 가장 구체적인 템플릿 제안을 사용합니다. 원하신다면 page--blog--blog-post-title이라는 템플릿을 만들 때 한 블로그 게시물을 완전히 다른 모습으로 보이게 할 수 있습니다. 테마의 템플릿 디렉토리. (다시, 이중 하이픈을 참고하십시오.)