web-dev-qa-db-ja.com

カテゴリブログビューで記事タグの順不同リストを取得するにはどうすればよいですか?

com_contentカテゴリのブログビューのオーバーライドに取り組んでおり、順序付けられていないリストblog.phpの記事タグ。すべてのタグは<li>で囲む必要があります

<li>[tag]</li>
<li>[tag]</li>
<li>[tag]</li>
<li>[tag]</li>

強力な検索の結果、次のコードが見つかりました。

<select>
            <option value=""><?php echo JText::_('JOPTION_SELECT_TAG'); ?></option>
            <?php echo JHtml::_('select.options', JHtml::_('tag.options', true, true), 'value', 'text', $this->state->get('filter.tag')); ?>
</select>

これにより、すべてのタグのドロップダウンボックスが表示されます。

Screenshot

順序付けられていないリストに変更するにはどうすればよいですか?

更新:

たくさん遊んでみましたが、カテゴリブログの上部にタグリストが表示されません。 johanpwからのコードは機能しますが、各記事アイテムに対してのみなので、重複が発生します。リストで一度だけ選択したカテゴリ/サブカテゴリからすべての記事タグを取得する方法はありますか?

多分それはblog.phpにロードされるすべてのタグをレンダリングするためにblog_children.phpテンプレートのようなテンプレートによって行われる必要があります。

私のコーディングスキルはこの問題を解決するために低くなっています:(

2
Peter Reill

さて、私があなたを正しく理解しているなら、あなたはあなたの様々なカテゴリーのブログページ、これらのカテゴリーに関係しているすべてのタグに表示したいでしょう。ブログページにタグを表示するためのモジュールを使用したほうがいいと思います。あなたはカテゴリーでフィルタリングする可能性を提供する何かを見つけるか開発する必要があります-このようなものがすでにあるかどうかはわかりません。 JEDでタグモジュールの調査を行ってください。幸運かもしれません。

ただし、これは迅速でかなり汚い回避策です。

各カテゴリのブログページでは、以下を使用して、含まれている記事のすべてのタグを収集できます。

  1. ファイルの先頭から:

    _$tags = array();
    _
  2. 主要な記事のforeachの中、_$this->item = & $item;_のすぐ下:

    _$this->item = & $item;
    foreach ($this->item->tags->itemTags as $itemTag) {
        $tags[$itemTag->title] = $itemTag;
    }
    echo $this->loadTemplate('item');
    _
  3. 紹介記事のforeach内の同じコード:

    _$this->item = & $item;
    foreach ($this->item->tags->itemTags as $itemTag) {
        $tags[$itemTag->title] = $itemTag;
    }
    echo $this->loadTemplate('item');
    _
  4. これで_$tags_の配列で終了しました。

    これで、配列をループして、特定のブログページで利用できる記事に存在するすべてのタグを取得できます。

    _<div id="tagsListBox" class="tagsListBox">
        <ul id="tagsList" class="tagsList">
            <?php 
            foreach ($tags as $tag) { ?>
                <li><?php echo $tag->title; ?></li>
            <?php } ?>
        </ul>
    </div>
    _

リストをdivで囲み、特別なcssを使用してページ内のどこにでも配置できるように、要素に特別なIDとクラスを付与します。先行記事や紹介記事のforeachループの外側に配置します。記事のリンクセクションの先頭の上:<?php if (!empty($this->link_items)) : ?>

繰り返しますが、これは最もエレガントなソリューションではありませんが、より良いものが見つかるまで、あなたが望むものを提供することができます。

0
FFrewin

次のコードを試して、必要な出力が得られるかどうかを確認してください。

<ul>
  <?php foreach ($this->item->tags->itemTags as $tag) : 
    echo "<li>" . $tag->title . "</li>"; 
  endforeach; ?>
</ul>

置換$tag->title$tag->aliasエイリアスを表示したい場合。

3
johanpw