Sınıflandırma terimlerinin virgülle ayrılmış listesi gösterilsin mi?


10

Drupal 7.

Düğüm.tpl.php dosyamda, sınıflandırma terimlerinin bir listesini yazdırmak istiyorum (sınıflandırma "kanallar" olarak adlandırılır). Eğer kullanırsam:

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

Açıkçası işe yarıyor, ancak onları satır içi elde etmek için yapabileceğim en iyi şey, onları sollamak için CSS kullanmaktır. Virgülle ayrılmalarını istiyorum. Herhangi bir fikir?

Teşekkür.

Yanıtlar:


11

Sen kullanarak alanını tema kullanımını deneyebilirsiniz field.tpl.phpya theme_field().

Örnek olarak (kullanarak field.tpl.php):

  1. field.tpl.phpTema modülünüze "modüller / alan / tema" dan kopyalayın
  2. Bu dosyanın bir kopyasını oluşturun ve yeniden adlandırın field--field-channel.tpl.php
  3. Dosyayı istediğiniz gibi düzenleyin.

Bunun çalışması için hızlı / kirli bir örnek olarak, field--field-channel.tpl.phpşöyle görünebilir:

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

Muhtemelen .tpl dosyasını kullanarak bunu başarmanın birden çok yolu vardır, ancak bu sadece bir seçenektir. DIV'e bir stil yerine bir sınıf eklemenizi ve satır içi stilleri kullanmak yerine stil sayfanızda değişiklikler yapmanızı öneririm.


Harika, bu mükemmel çalıştı. Bunun gibi alanlarda şablon kullanabileceğinizi bilmiyordum. Hala bu şeylerle öğrenecek çok şey var. Tekrar teşekkürler.
Mike

Tpl dosyalarını kullanmak biraz daha kaynak yoğun ve tercih edilen mod aşağıdaki hook_field önerisini kullanmaktır.
shaneonabike

11

Formatter Metin modülü Drupal 7 için kullanılabilir ve özel tema çalışması olmadan bunu sağlar.


Metin Biçimlendirici modülü, tema katmanında mucking gerektiren yukarıdaki seçilen cevabın aksine, muhtemelen şimdi bunun için ideal bir çözümdür.
JamesWilson

7

theme_fieldYaklaşımı kullanmanın bir yolu ( template.phpdosyanıza ekleyin ):

/**
 * 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
Süper harika teşekkürler bu aslında çok yardımcı oldu! Ayrıca tercih edilen yöntem sonra bir tpl dosyası!
shaneonabike

4

Bunu sadece CSS'de kolayca yapabilirsiniz:

.field-type-taxonomy-term-reference .field-items .field-item {
  ekran: satır içi blok;
  * ekran: satır içi;
  * yakınlaştırma: 1;
}
.field-type-taxonomy-term-reference .field-items .field-item: after {
  içerik: ",";
}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: after {
  içerik: "";
}

1
Teşekkürler, boşluk için kaçan Unicode kullanmak zorunda olmama rağmen, şu şekilde 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
Bu tema sistemini kaldırıyor, sabit kodlanmış ekran mantığını tpl dosyasına koyuyor ve bir bakım baş ağrısı oluşturuyor.
Jeremy French

Neredeyse aynı olan yan modülleri kullanmak daha mı iyi? Lütfen daha bakım dostu bir kod verebilir misiniz?
Rootical V.

0

Sınırlayıcı ve sarıcı için daha da kolay, Taksonomi Biçimlendirici modülünü kullanın: http://drupal.org/project/taxonomy_formatter

Proje sayfasından daha fazla detay:

Bu, sınıflandırma öğeleri için özel bir biçimlendirici sağlamak üzere yazılmış küçük bir modüldür. Varsayılan biçimlendiricilerin her ikisi de div olarak sarılmış terimleri çıkarır. Bu modül, öğe türünü, sarıcı türünü, her ikisi için sınıfları, kullanılan ayırıcıyı ve terim sayfalarına bağlantı verip vermemeyi belirtmenize olanak tanıyan yeni bir biçimlendirici ekler. Bu, çok daha özelleştirilebilir düzen seçenekleri sunar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.