• 虹色ミツバチ
  • freoカスタマイズメモ、テンプレート・プラグイン配布/officeTIPS
検索プラグイン
虹色ミツバチ

> Entry >freo>freoTips>プラグイン系TIPS> テンプレートを変えるだけでニュースをタグごとに表示する方法

【freo】【freoTips】【プラグイン系TIPS】テンプレートを変えるだけでニュースをタグごとに表示する方法

当サイトで配布しているニュースリンクプラグインのリンクをタグごとに表示する方法です。

ニュースプラグインでは、タグをつけることができます。
これを使って、ニュースを分類表示することができます。

たとえば、ニュースを「ジャンルA」「ジャンルB」「ジャンルC」の3つに分類したいとします。
ニュース登録時に、タグ部分に「ジャンルA」または「ジャンルB」または「ジャンルC」と登録します。

デフォルトだと、ニュースは登録ID順(昇順か降順を選ぶことはできます)に表示されます。
このままだとジャンルがごちゃ混ぜで表示されてしまうので、ジャンルごとに表示してみます。

[freo/templates/plugins/news/default.html]をエディタで開きます。
28行目~71行目を変更します。
デフォルトではこうなってます↓

        <h2>ニュース一覧</h2>
        <table id="news">
            <thead>
                <tr>
                    <th>日時</th>
                    <th>カテゴリー</th>
                    <th>タイトル</th>
                    <th>コメント</th>
                    <th>ファイル</th>
                    <th>タグ</th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <th>日時</th>
                    <th>カテゴリー</th>
                    <th>タイトル</th>
                    <th>コメント</th>
                    <th>ファイル</th>
                    <th>タグ</th>
                </tr>
            </tfoot>
            <tbody>
                <!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
                <tr>
                    <td><a href="{$freo.core.http_file}/news/view/{$plugin_news.id}">{$plugin_news.datetime|date_format:'%Y/%m/%d'}</a></td>
                    <td><a href="{$freo.core.http_file}/news?category_id={$plugin_news.category_id}">{$plugin_news_categories[$plugin_news.category_id].name}</a></td>
                    <td><!--{if $plugin_news.url}--><a href="{$plugin_news.url}">{$plugin_news.title}</a><!--{else}-->{$plugin_news.title}<!--{/if}--></td>
                    <td>{$plugin_news.text|smarty:nodefaults|strip_tags|mb_truncate:30:'...'|escape}</td>
                    <td>
                        <!--{if $plugin_news_files[$plugin_news.id].file}-->
                            <img src="{$freo.core.http_url}{$smarty.const.FREO_FILE_DIR}plugins/news_files/{$plugin_news.id}/{$plugin_news_files[$plugin_news.id].file}" alt="{$plugin_news.title}" />
                        <!--{/if}-->
                    </td>
                    <td>
                        <!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}-->
                            <a href="{$freo.core.http_file}/news?tag={$plugin_news_tag|smarty:nodefaults|escape:'url'}">{$plugin_news_tag}</a><!--{if !$smarty.foreach.loop.last}-->,&nbsp;<!--{/if}-->
                        <!--{/foreach}-->
                    </td>
                </tr>
                <!--{/foreach}-->
               
            </tbody>
        </table>

これを、下記のように変更します。

<h2>ジャンルA</h2>
    <dl class="news">
        <!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
            <!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}-->
                <!--{if $plugin_news_tag == 'ジャンルA'}-->
                <dt>{$plugin_news.datetime|date_format:'%Y/%m/%d'}</dt>
                    <dd>
                        <!--{if $plugin_news.url}--><a href="{$plugin_news.url}">{$plugin_news.title}</a><!--{else}-->{$plugin_news.title}<!--{/if}-->
                        <!--{if $plugin_news.text}-->{$plugin_news.text}<!--{/if}-->
                        <br />
                        【タグ:<!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}--><a href="{$freo.core.http_file}/news?tag={$plugin_news_tag|smarty:nodefaults|escape:'url'}">{$plugin_news_tag}</a><!--{if !$smarty.foreach.loop.last}-->,&nbsp;<!--{/if}--><!--{/foreach}-->】
                        <!--{if $freo.user.authority == 'root' or $freo.user.authority == 'author'}--><a href="{$freo.core.http_file}/news/admin_form?id={$plugin_news.id}"><img src="{$freo.core.http_url}images/icons/edit.png" alt="編集" title="編集" width="16" height="16" /></a><!--{/if}-->
                    </dd>
                <!--{/if}-->
            <!--{/foreach}-->
        <!--{/foreach}-->
    </dl>
<h2>ジャンルB</h2>
    <dl class="news">
        <!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
            <!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}-->
                <!--{if $plugin_news_tag == 'ジャンルA'}-->
                <dt>{$plugin_news.datetime|date_format:'%Y/%m/%d'}</dt>
                    <dd>
                        <!--{if $plugin_news.url}--><a href="{$plugin_news.url}">{$plugin_news.title}</a><!--{else}-->{$plugin_news.title}<!--{/if}-->
                        <!--{if $plugin_news.text}-->{$plugin_news.text}<!--{/if}-->
                        <br />
                        【タグ:<!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}--><a href="{$freo.core.http_file}/news?tag={$plugin_news_tag|smarty:nodefaults|escape:'url'}">{$plugin_news_tag}</a><!--{if !$smarty.foreach.loop.last}-->,&nbsp;<!--{/if}--><!--{/foreach}-->】
                        <!--{if $freo.user.authority == 'root' or $freo.user.authority == 'author'}--><a href="{$freo.core.http_file}/news/admin_form?id={$plugin_news.id}"><img src="{$freo.core.http_url}images/icons/edit.png" alt="編集" title="編集" width="16" height="16" /></a><!--{/if}-->
                    </dd>
                <!--{/if}-->
            <!--{/foreach}-->
        <!--{/foreach}-->
    </dl>
<h2>ジャンルC</h2>
    <dl class="news">
        <!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
            <!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}-->
                <!--{if $plugin_news_tag == 'ジャンルA'}-->
                <dt>{$plugin_news.datetime|date_format:'%Y/%m/%d'}</dt>
                    <dd>
                        <!--{if $plugin_news.url}--><a href="{$plugin_news.url}">{$plugin_news.title}</a><!--{else}-->{$plugin_news.title}<!--{/if}-->
                        <!--{if $plugin_news.text}-->{$plugin_news.text}<!--{/if}-->
                        <br />
                        【タグ:<!--{foreach from=$plugin_news_tags[$plugin_news.id]|smarty:nodefaults item='plugin_news_tag' name='loop'}--><a href="{$freo.core.http_file}/news?tag={$plugin_news_tag|smarty:nodefaults|escape:'url'}">{$plugin_news_tag}</a><!--{if !$smarty.foreach.loop.last}-->,&nbsp;<!--{/if}--><!--{/foreach}-->】
                        <!--{if $freo.user.authority == 'root' or $freo.user.authority == 'author'}--><a href="{$freo.core.http_file}/news/admin_form?id={$plugin_news.id}"><img src="{$freo.core.http_url}images/icons/edit.png" alt="編集" title="編集" width="16" height="16" /></a><!--{/if}-->
                    </dd>
                <!--{/if}-->
            <!--{/foreach}-->
        <!--{/foreach}-->
    </dl>

つまりはこんな感じです↓

<h2>ジャンルA</h2>
<dl class="news">
   <!--{plugin_newsesの配列の繰り返しここから}-->
         <!--{個別ニュース記事に登録されているタグの配列の繰り返しここから}-->
            <!--{もしタグに'ジャンルA'が登録されてたらここから}-->
                ~省略~
            <!--{もしタグに「ジャンルA」が登録されてたらここまで}-->
         <!--{個別ニュース記事に登録されているタグの配列の繰り返しここまで}-->
   <!--{plugin_newsesの配列の繰り返しここまで}-->
</dl>

これが下線部に変更を加えた上で(ジャンルBとジャンルCに変更してます)3回繰り返されているというわけです。

ただし、タグが重複して登録されていた場合、複数のジャンルにダブって表示されてしまうので注意が必要です。
たとえば、一件のニュース記事に「ジャンルA」と「ジャンルB」のどちらのタグも登録されていた場合、「ジャンルA」の表示欄と「ジャンルB」の表示欄のどちらにもリンク記事が表示されてしまいます。
ですので、分類表示の条件として使用したいタグは重複しないように登録することをオススメします。

ちなみに、ページやデフォルト画面に表示したい場合も、↑のソースを利用できます

2014/01/04 タグ部分の不具合を修正しました。大変失礼いたしました。

ページ移動

関連記事

ユーティリティ

Twitter

ページ上部へ