分類用語のコンマ区切りリストを表示しますか?


10

Drupal 7。

私のnode.tpl.phpで、分類用語のリストを出力したい(分類は「チャネル」と呼ばれる)。私が使用する場合:

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

確かに機能しますが、インライン化するためにできる最善の方法は、CSSを使用して左にフロートさせることです。カンマで区切ってください。何か案は?

どうも。

回答:


11

field.tpl.phpまたはを使用してフィールドにテーマを設定してみてくださいtheme_field()

例として(を使用field.tpl.php):

  1. field.tpl.php"modules / field / theme"からテーマディレクトリにコピーします
  2. そのファイルのコピーを作成し、名前を field--field-channel.tpl.php
  3. 好きなようにファイルを編集します。

これが機能する簡単な例として、次のfield--field-channel.tpl.phpようになります。

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

.tplファイルを使用してこれを実現するには、おそらく複数の方法がありますが、これは1つのオプションにすぎません。インラインスタイルを使用する代わりに、スタイルではなくクラスをDIVに追加して、スタイルシートに変更を加えることをお勧めします。


すばらしい、これは完璧に機能しました。そのようなフィールドでテンプレートを使用できることを知りませんでした。このことでまだ学ぶべきことがたくさんあります。再度、感謝します。
マイク、

tplファイルを使用すると、リソースに負荷がかかります。推奨されるモードは、以下のhook_fieldの提案を使用することです。
shaneonabike 14

11

フォーマッタテキストモジュールは、Drupalの7のために利用可能になりました、そしてカスタムテーマ作業をせずにこれを行うことができます。


テキストフォーマッタモジュールは、テーマレイヤーをいじくる必要がある上記の選択された回答とは対照的に、おそらくこれに対する理想的なソリューションです。
JamesWilson 2013

7

これは、theme_fieldアプローチを使用する1つの方法です(template.phpファイルに追加します)。

/**
 * 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
これは実際に大いに役立ちました!また、推奨される方法はtplファイルです!
shaneonabike 14

4

CSSでこれを簡単に行うことができます:

.field-type-taxonomy-term-reference .field-items .field-item {
  表示:インラインブロック;
  * display:インライン;
  *ズーム:1;
}
.field-type-taxonomy-term-reference .field-items .field-item:after {
  内容:「、」;
}
.field-type-taxonomy-term-reference .field-items .field-item:last-child:after {
  内容: "";
}

1
おかげで、私はこのように、スペースにUnicodeエスケープ使用していたもののcontent: ", \00a0"stackoverflow.com/a/5467676/724176
ヒューゴ


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
これはテーマシステムを回避し、ハードコーディングされた表示ロジックをtplファイルに入れ、メンテナンスの頭痛の種を作成します。
ジェレミーフランス語

ほとんど同じことをしているサイドモジュールを使用する方が良いですか?もっとメンテナンスしやすいコードを提供していただけませんか?
Rootical V. 2013

0

区切り文字とラッパーの方が簡単な場合は、Taxonomy Formatterモジュールを使用します。http//drupal.org/project/taxonomy_formatter

プロジェクトページの詳細:

これは、分類項目のカスタムフォーマッターを提供するために書かれた小さなモジュールです。デフォルトのフォーマッタはどちらも、divでラップされた用語を出力します。このモジュールは、要素タイプ、ラッパータイプ、両方のクラス、使用するセパレーター、および用語ページにリンクするかどうかを指定できる新しいフォーマッターを追加します。これにより、さらにカスタマイズ可能なレイアウトオプションが提供されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.