Durch Kommas getrennte Liste der Taxonomiebegriffe anzeigen?


10

Drupal 7.

In meiner node.tpl.php möchte ich eine Liste von Taxonomiebegriffen ausdrucken (die Taxonomie heißt "Kanäle"). Wenn ich benutze:

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

Es funktioniert natürlich, aber das Beste, was ich tun kann, um sie inline zu bringen, ist, CSS zu verwenden, um sie nach links zu schweben. Ich möchte, dass sie durch Kommas getrennt werden. Irgendwelche Ideen?

Danke.

Antworten:


11

Sie können versuchen, das Feld mit field.tpl.phpoder zu thematisieren theme_field().

Als Beispiel (mit field.tpl.php):

  1. Kopieren field.tpl.phpSie von "modules / field / theme" in Ihr Themenverzeichnis.
  2. Erstellen Sie eine Kopie dieser Datei und benennen Sie sie in um field--field-channel.tpl.php
  3. Bearbeiten Sie die Datei nach Belieben.

Als schnelles / schmutziges Beispiel field--field-channel.tpl.phpkönnte dies folgendermaßen aussehen:

<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>

Es gibt wahrscheinlich mehrere Möglichkeiten, dies mithilfe der .tpl-Datei zu erreichen, dies ist jedoch nur eine Option. Ich empfehle, dem DIV anstelle eines Stils eine Klasse hinzuzufügen und die Änderungen in Ihrem Stylesheet vorzunehmen, anstatt Inline-Stile zu verwenden.


Super, das hat perfekt funktioniert. Ich wusste nicht, dass Sie Vorlagen für solche Felder verwenden können. Ich muss noch viel mit diesem Zeug lernen. Danke noch einmal.
Mike

Die Verwendung von tpl-Dateien ist etwas ressourcenintensiver und der bevorzugte Modus ist die Verwendung des folgenden Vorschlags für hook_field.
Shaneonabike

12

Das Textformatierungsmodul ist jetzt für Drupal 7 verfügbar und ermöglicht dies ohne benutzerdefinierte Themenarbeit.


Das Textformatierungsmodul ist jetzt wahrscheinlich die ideale Lösung dafür, im Gegensatz zu der oben gewählten Antwort, bei der in der Themenebene herumgespielt werden muss.
James Wilson

7

Hier ist eine Möglichkeit, den theme_fieldAnsatz zu verwenden (fügen Sie ihn Ihrer template.phpDatei hinzu):

/**
 * 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
Super toll danke das hat mir sehr geholfen! Auch die bevorzugte Methode dann eine tpl-Datei!
Shaneonabike

4

Sie können dies einfach in CSS tun:

.field-type-taxonomy-term-reference .field-items .field-item {
  Anzeige: Inline-Block;
  * Anzeige: Inline;
  * Zoom: 1;
}}
.field-type-taxonomy-term-reference .field-items .field-item: after {
  Inhalt: ",";
}}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: after {
  Inhalt: "";
}}

1
Vielen Dank, obwohl ich Escape- Unicode für den Speicherplatz verwenden musste, wie folgtcontent: ", \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
Dies umgeht das Themensystem, fügt fest codierte Anzeigelogik in die tpl-Datei ein und verursacht Wartungsprobleme.
Jeremy French

Ist es besser, Seitenmodule zu verwenden, die fast dasselbe tun? Könnten Sie bitte einen wartungsfreundlicheren Code angeben?
Rootical V.

0

Noch einfacher für Trennzeichen und Wrapper ist das Modul Taxonomy Formatter: http://drupal.org/project/taxonomy_formatter

Weitere Details von der Projektseite:

Dies ist ein kleines Modul, das geschrieben wurde, um einen benutzerdefinierten Formatierer für Taxonomieelemente bereitzustellen. Die Standardformatierer geben beide die in divs eingeschlossenen Begriffe aus. Dieses Modul fügt einen neuen Formatierer hinzu, mit dem Sie den Elementtyp, den Wrapper-Typ, Klassen für beide, das verwendete Trennzeichen und angeben können, ob sie mit den Begriffsseiten verknüpft sind oder nicht. Dies bietet viel mehr anpassbare Layoutoptionen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.