如何切换到我想要的任何节点的不同主题模板文件? 我理解如何为具有“食谱”路径的节点创建像node-recipes.tpl.php这样的子主题。但我希望控制整个基本模板,如page.tpl.php。 我可以在template.php中使用一些预处理功能吗?
现在我在template.php文件中有这个:
function mythemename_preprocess_node(&$vars) {
// template name for current node id
$suggestions = array('node-'. $vars['nid']);
// additional node template names based on path alias
if (module_exists('path')) {
// we already can have a path alias
if (isset($vars['path'])) {
$alias = $vars['path'];
}else{
// otherwise do standard check
$alias = drupal_get_path_alias('node/'. $vars['nid']);
}
if ($alias != 'node/'. $vars['nid']) {
$add_path = '';
foreach (explode('/', $alias) as $path_part) {
$add_path .= !empty($path_part) ? $path_part.'_' : '';
$suggestions[] = 'node-'. $add_path;
}
// adding the last one (higher priority) for this path only
// node-some-long-path-nofollow.tpl.php (not for anchestors)
$suggestions[] = end($suggestions) .'-nofollow';
}
$suggestions=array_map(stripTag, $suggestions);
//print_r($suggestions);
}
$vars['template_files'] = isset($vars['template_files']) ? array_merge($vars['template_files'], $suggestions) : $suggestions;
}
感谢
答案 0 :(得分:3)
是,
您可以完全控制$ vars ['template_files']数组。我总是建议添加到数组而不是完全覆盖它。
我有一个我维护的模块,它添加了一些我经常使用的小建议。 http://github.com/electblake/template_suggestions/blob/master/template_suggestions.module
您可以在preprocess_node,preprocess_page等中操作$ vars ['template_files']数组。
如果你想将page.tpl.php切换到另一个主题文件,请在preprocess_page钩子中进行...
答案 1 :(得分:0)
我正在使用此功能创建适合我的模板建议。感谢大家的建议。
/**
* Override or insert PHPTemplate variables into the templates.
* These are the main outer templates such as page.tpl.php
*/
function phptemplate_preprocess_page(&$vars) {
$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;
$vars['template_files'][] = $template_filename;
}
}
//----
//print_r(arg());
/* print '<pre>';
print_r($vars);
print '</pre>';*/
//dpm($vars);
//print_r($vars['template_files']);
}