Visualizza un elenco separato da virgole di termini di tassonomia?


10

Drupal 7.

Nel mio node.tpl.php, voglio stampare un elenco di termini di tassonomia (la tassonomia si chiama "canali"). Se uso:

<?php print render($content['field_channel']); ?>

Funziona, ovviamente, ma il meglio che posso fare per metterli in linea è usare i CSS per spostarli a sinistra. Vorrei che fossero separati da virgole. Qualche idea?

Grazie.

Risposte:


11

Puoi provare a utilizzare il campo usando field.tpl.phpo theme_field().

Ad esempio (usando field.tpl.php):

  1. Copia field.tpl.phpnella directory dei temi da "moduli / campo / tema"
  2. Crea una copia di quel file e rinominalo in field--field-channel.tpl.php
  3. Modifica il file come preferisci.

Come esempio rapido / sporco per far funzionare tutto questo, field--field-channel.tpl.phppotrebbe apparire come:

<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php if (!$label_hidden) : ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</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>

Probabilmente ci sono molti modi per farlo usando il file .tpl, ma questa è solo un'opzione. Consiglio di aggiungere una classe al DIV invece di uno stile e di apportare le modifiche al foglio di stile invece di utilizzare gli stili incorporati.


Fantastico, ha funzionato perfettamente. Non sapevo che avresti potuto usare modelli su questi campi. Ho ancora molto da imparare con queste cose. Grazie ancora.
Mike,

L'uso dei file tpl è un po 'più intenso di risorse e la modalità preferita è quella di utilizzare il suggerimento hook_field di seguito.
shaneonabike,

11

Il modulo Formatter di testo è ora disponibile per Drupal 7 e ti consente di farlo senza un tema personalizzato.


Il modulo Formatter di testo è probabilmente la soluzione ideale a questo ora, al contrario della risposta scelta sopra che richiede di spostarsi nel livello del tema.
JamesWilson,

7

Ecco un modo per usare l' theme_fieldapproccio (aggiungilo al tuo template.phpfile):

/**
 * 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'] . ':&nbsp;</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;
}

1
Grazie davvero, questo ha aiutato molto in realtà! Anche il metodo preferito quindi un file tpl!
shaneonabike,

4

Puoi farlo facilmente solo nei CSS:

.field-type-taxonomy-term-reference .field-items .field-item {
  display: blocco in linea;
  * display: inline;
  * zoom: 1;
}
.field-type-taxonomy-term-reference .field-items .field-item: after {
  contenuto: ",";
}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: after {
  contenuto: "";
}

1
Grazie, anche se ho dovuto usare Unicode con escape per lo spazio, in questo modo content: ", \00a0": stackoverflow.com/a/5467676/724176
Hugo


0
<?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 } ?>

3
Questo sta evitando il sistema a tema, inserendo una logica di visualizzazione codificata nel file tpl e creando un mal di testa per la manutenzione.
Jeremy francese,

È meglio usare moduli laterali che stanno facendo quasi lo stesso? Potresti fornire un codice più semplice per la manutenzione?
Rootical V.

0

Ancora più semplice per il delimitatore e il wrapper, si utilizza il modulo Formattore tassonomia: http://drupal.org/project/taxonomy_formatter

Maggiori dettagli dalla pagina del progetto:

Questo è un piccolo modulo scritto per fornire un formattatore personalizzato per gli articoli di tassonomia. I formattatori predefiniti producono entrambi i termini racchiusi in div. Questo modulo aggiunge un nuovo formattatore che consente di specificare il tipo di elemento, il tipo di wrapper, le classi per entrambi, il separatore utilizzato e se si collegano o meno ai termini pagine. Ciò offre opzioni di layout molto più personalizzabili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.