Drupal 7.
Dans mon node.tpl.php, je veux imprimer une liste de termes de taxonomie (la taxonomie est appelée "canaux"). Si j'utilise:
<?php print render($content['field_channel']); ?>
Cela fonctionne, bien sûr, mais le mieux que je puisse faire pour les aligner est d'utiliser CSS pour les laisser flotter à gauche. Je voudrais qu'ils soient séparés par des virgules. Des idées?
THX.
Vous pouvez essayer de thématiser le champ en utilisant field.tpl.php
ou theme_field()
.
À titre d'exemple (en utilisant field.tpl.php
):
field.tpl.php
Dans votre répertoire de thème à partir de "modules/field/theme"field--field-channel.tpl.php
Comme exemple rapide/sale pour que cela fonctionne, field--field-channel.tpl.php
Pourrait ressembler à:
<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php if (!$label_hidden) : ?>
<div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>: </div>
<?php endif; ?>
<div class="field-items"<?php print $content_attributes; ?>>
<?php foreach ($items as $delta => $item) : ?>
<div style="display:inline;" class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>>
<?php
print render($item);
// Add comma if not last item
if ($delta < (count($items) - 1)) {
print ',';
}
?>
</div>
<?php endforeach; ?>
</div>
</div>
Il existe probablement plusieurs façons d'accomplir cela en utilisant le fichier .tpl, mais ce n'est qu'une option. Je recommande d'ajouter une classe au DIV au lieu d'un style et d'apporter les modifications dans votre feuille de style au lieu d'utiliser des styles en ligne.
Le module Text Formatter est maintenant disponible pour Drupal 7, et vous permet de le faire sans travail de thème personnalisé.
Voici une façon d'utiliser le theme_field
approche (ajoutez-le à votre template.php
fichier):
/**
* Implements theme_field()
*
* Make field items a comma separated unordered list
*/
function THEMENAME_field__NAME_OF_FIELD__NAME_OF_CONTENT_TYPE($variables) {
$output = '';
// Render the label, if it's not hidden.
if (!$variables['label_hidden']) {
$output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ': </div>';
}
// Render the items as a comma separated inline list
$output .= '<ul class="field-items"' . $variables['content_attributes'] . '>';
for ($i=0; $i < count($variables['items']); $i++) {
$output .= '<li>'. drupal_render($variables['items'][$i]);
$output .= ($i == count($variables['items'])-1) ? '</li>' : ', </li>';
}
$output .= '</ul>';
return $output;
}
Vous pouvez le faire facilement simplement en CSS:
. champ-type-taxonomie-référence-terme. éléments-champ. élément-champ { affichage: bloc en ligne; * affichage: en ligne; * zoom: 1; } . champ-type-taxonomie-terme-référence. éléments-champ. élément-champ: après { contenu: ","; } . champ-type-taxonomie-terme-référence. éléments-champ. élément-champ: dernier enfant: après { contenu: ""; }
Utilisez une fonction de prétraitement: http://planken.org/2009/08/03/create-comma-separated-taxonomy-term-list-drupal
<?php
if ($node->taxonomy) {
foreach($node->taxonomy as $term) {
if ($term->vid == 3) { // the id of the vocabulary
$my_terms[] = l(
t($term->name),
'taxonomy/term/' . $term->tid
);
}
}
}
if ($my_terms) { ?>
<div class="clear-block">
<div class="terms">
<?php print implode(", ", $my_terms); ?>
</div>
</div>
<?php } ?>
Encore plus facile pour le délimiteur et le wrapper, vous utilisez le module Taxonomy Formatter: http://drupal.org/project/taxonomy_formatter
Plus de détails sur la page du projet:
Il s'agit d'un petit module écrit pour fournir un formateur personnalisé pour les éléments de taxonomie. Les formateurs par défaut génèrent tous deux les termes enveloppés dans des divs. Ce module ajoute un nouveau formateur qui vous permet de spécifier le type d'élément, le type d'encapsuleur, les classes pour les deux, le séparateur utilisé et s'ils sont liés ou non aux pages de termes. Cela donne des options de mise en page beaucoup plus personnalisables.