2010-04-16 8 views
20

Bien qu'il ait été facile de trouver des informations en ligne sur la façon de traiter d'autres sujets (par exemple les résultats de recherche), il est impossible de trouver un article simple sur la façon de traiter la sortie d'une page taxonomie/terme.Comment puis-je thématiser la taxonomie/terme/x page?

Comment puis-je le faire?

Répondre

1

La page de taxonomie n'est pas magique dans tout ce qu'il faut quelque chose de spécial pour le thème. Il y a un fichier modèle, une fonction de pré-traitement et quelques fonctions de thème, un peu comme n'importe quelle page.

Si vous souhaitez contrôler la sortie de la page de taxonomie par défaut qui est un peu brute, vous pouvez utiliser des vues pour remplacer la page par défaut. Vous pouvez alors utiliser des vues pour afficher uniquement des casse-têtes, faire des commandes personnalisées, utiliser un pager, etc.

Si vous voulez faire quelque chose de plus spécifique, vous devez éditer votre question pour nous dire ce que vous voulez faire.

12

Dans Drupal 6, vous pouvez utiliser les fichiers node-taxonomy.tpl.php et page-taxonomy-term.tpl.php dans votre thème pour modéliser des pages de taxonomie en considérant que le second est le wrapper pour le premier. Se comporter node-taxonomy.tpl.php comme node.tpl.php et page-taxonomy-term.tpl.php comme page.tpl.php. par exemple:

Page-taxonomie term.tpl.php

<?php require 'header.tpl.php'; ?> 
    <body class="<?php echo $body_classes; ?>"> 
     <div id="page"> 
      <?php require 'page-navigation.tpl.php'; ?> 
      <div id="main"> 
     <h2>Taxonomy term page</h2> 
     <div class="taxonomy-content"> 
      <?php if ($tabs): echo '<div id="tabs-wrapper" class="clear-block">'; endif; ?> 
      <?php if ($title && !$node): echo '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?> 
      <?php if ($tabs): echo '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?> 
      <?php if ($tabs2): echo '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?> 
      <?php if ($show_messages && $messages){ echo $messages; } ?> 
      <?php echo $help; ?> 
      <?php echo $content; // contains the output of node-taxonomy.php, that's why I call this wrapper template file. ?> 
     </div> <!-- #taxonomy-content -->     
      </div> <!-- #main -->   
     </div> <!-- #page --> 
     <?php echo $closure; ?> 
    </body> 
<?php require 'page-footer.tpl.php'; ?> 

nœud taxonomy.tpl.php

<div id="node-<?php echo $node->nid; ?>" class="node<?php if($sticky) echo ' sticky'; ?><?php if(!$status) echo ' node-unpublished'; ?>"> 
    <div class="taxonomy-node"> 
     <div class="node-body"> 
     <a class="node-title" href="<?php echo $node_url ?>" title="<?php echo $title ?>"> 
      <?php echo $title ?> 
     </a> 
     <span class="node-cck-field"> 
      <?php echo $node->field_cck_blah[0]['view']; ?> 
     </span>        
     </div>     
    </div> 
</div> 

Eh bien, la partie la plus importante: Par défaut le node-taxonomy.tpl.php n'est pas connu de Drupal, nous devons donc introduire ceci comme suggestion de modèle dans le fichier template.php de notre thème, ici nous allons:

/** 
* Adding custom PHPTemplate suggestions on taxanomy pages. 
* 
* @param $vars 
* A sequential array of variables to pass to theme template. 
*/ 
function phptemplate_preprocess_node(&$vars) { 
    if(arg(0) == 'taxonomy'){ 
    $suggestions = array('node-taxonomy'); 
    $vars['template_files'] = array_merge($vars['template_files'], $suggestions); 
    } 
} 

Il y a également un taxonomy-term.tpl.php, en ce qui concerne Drupal 7.
Il est un exemple de code, ne pas » oublier d'utiliser check_plain() & check_url() sur les impressions.

+0

Merci Sepehr! Cela fonctionne, mais tous mes blocs de vue sur la page obtiennent le même traitement de mise en forme ... (ils sont affichés en tant que teasers de noeud) Y at-il un moyen d'arrêter de détruire mes vues? – askon

+0

Vous êtes incroyable. – Steve

1

Vous feriez mieux utiliser le code suivant dans template.php

foreach ($vars['node']->taxonomy as $term) { 
    $vars['template_files'][] = 'node-term-'. $term->tid; 
    } 

Parce que vous pouvez utiliser des noms de fichiers tels que le noeud terme-VOTRE-TERM-ID.tpl.php pour chaque terme.

si vous voulez faire une utilisation plus efficace:

if ($hook == 'node') { 
     if (arg(0) == 'taxonomy') { 
     foreach ($vars['node']->taxonomy as $term) { 
     $vars['template_files'][] = 'node-term-'. $term->tid; 
     } 
    } 
    } //if bracket close