Разнесение $terms в шаблоне темы по $terms_$vid

Главные вкладки

Аватар пользователя naked_child naked_child 26 сентября 2009 в 18:55

Как известно, $terms в шаблоне темы node.tpl.php содержит темизированные
теги, относящиеся к данной записи. Содержит все без разбора, даже если из
разных словарей.

На моём сайте есть словарь "Авторы", и выводить автора текста среди кучи
других тегов мне показалось идеологически неверным. Подумав, я решил, что
удобнее всего мне будет разложить $terms на переменные вида $terms_N, где
N -- id словаря.

В файл template.php темы добавил хук phptemplate_preprocess_node. В
основном он стандартный, только дописал несколько строк в конце:

<?php

function phptemplate_preprocess_node(&$variables) {
  
$node $variables['node'];
  if (
module_exists('taxonomy')) {
    
$variables['taxonomy'] = taxonomy_link('taxonomy terms'$node);
  }
  else {
    
$variables['taxonomy'] = array();
  }

  if (

$variables['teaser'] && $node->teaser) {
    
$variables['content'] = $node->teaser;
  }
  elseif (isset(
$node->body)) {
    
$variables['content'] = $node->body;
  }
  else {
    
$variables['content'] = '';
  }

  

$variables['date']      = format_date($node->created);
  
$variables['links']     = !empty($node->links) ? theme('links'$node->links, array('class' => 'links inline')) : '';
  
$variables['name']      = theme('username'$node);
  
$variables['node_url']  = url('node/'$node->nid);
  
$variables['terms']     = theme('links'$variables['taxonomy'], array('class' => 'links inline'));
  
$variables['title']     = check_plain($node->title);

  

// Flatten the node object's member fields.
  
$variables array_merge((array)$node$variables);

  

// Display info only on certain node types.
  
if (theme_get_setting('toggle_node_info_'$node->type)) {
    
$variables['submitted'] = theme('node_submitted'$node);
    
$variables['picture'] = theme_get_setting('toggle_node_user_picture') ? theme('user_picture'$node) : '';
  }
  else {
    
$variables['submitted'] = '';
    
$variables['picture'] = '';
  }
  
// Clean up name so there are no underscores.
  
$variables['template_files'][] = 'node-'$node->type;

 

// Ниже раскладываем $terms по $terms_N

  

foreach ($node->taxonomy as $term) {
    
$taxonomies[$term->vid][]=$term;
  }

  if (

count($taxonomies)==0) {return;}

  

$original_taxononomy=$node->taxonomy;

  while (list (

$v,$t) = each ($taxonomies)) {
    
$node->taxonomy=$t;
    
$variables["taxonomy_$v"] = taxonomy_link('taxonomy terms'$node);
    
$variables["terms_$v"]     = theme('links'$variables["taxonomy_$v"], array('class' => 'links inline'));
  }

  

$node->taxonomy=$original_taxonomy;

}

?>

После активизации этого хука в шаблонах нод появляются дополнительные
переменные $terms_1,2,...,N с темизированными и разложенными по словарям
тегами записей. Применение -- по вкусу.

Комментарии