Файл шаблона главной темы Drupal для любого узла - PullRequest
1 голос
/ 06 июля 2010

Как я могу переключиться на другой файл шаблона темы для любого узла, который я хочу?Я понимаю, как создавать подтемы, такие как node-recipes.tpl.php для узла, который имеет путь «recipes».Но то, что я хочу, чтобы иметь контроль над всем базовым шаблоном, как 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;
}

спасибо

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

Да,

Вы можете полностью контролировать массив $ vars ['template_files']. Я всегда предлагаю добавлять в массив, а не перезаписывать его полностью.

У меня есть модуль, который я поддерживаю и добавляет несколько небольших советов, которые я часто использую. http://github.com/electblake/template_suggestions/blob/master/template_suggestions.module

Вы можете манипулировать массивом $ vars ['template_files'] в preprocess_node, preprocess_page и т. Д.

Если вы хотите переключить ваш page.tpl.php на другой файл темы, сделайте это в хуке preprocess_page ...

0 голосов
/ 23 августа 2010

Я использую эту функцию для создания шаблонов предложений, которые работают для меня сейчас.Спасибо всем за предложения.

<code>/**
 * 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 '
'; * / // dpm ($ vars);// print_r ($ вары [ 'template_files']);}
...