メニュー

Home >freoTIPS>プラグイン系TIPS> テンプレートを変えるだけでニュースをカテゴリーごとに表示する方法

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

2014/01/04 17:00|タグ:ニュースプラグイングッジョブ表示 51

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

ニュースプラグインでは、カテゴリーをつけることができます。
これを使って、ニュースを分類することができます。
デフォルトのままだとカテゴリーがごちゃ混ぜで表示されてしまうので、カテゴリーごとに表示してみます。

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

        <h2>ニュース一覧</h2>
        <table id="news">
       
        ~中略~
       
            </tbody>
        </table>

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

<!--{foreach from=$plugin_news_categories|smarty:nodefaults item='plugin_news_category' name='loop'}-->
<h3><a href="{$freo.core.http_file}/news?category_id={$plugin_news_category.id}">{$plugin_news_category.name}</a></h3>
    <table id="news">
        <thead>
            <tr>
                <th>日時</th>
                <th>タイトル</th>
                <th>コメント</th>
                <th>ファイル</th>
                <th>タグ</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th>日時</th>
                <th>タイトル</th>
                <th>コメント</th>
                <th>ファイル</th>
                <th>タグ</th>
            </tr>
        </tfoot>
        <tbody>
            <!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
            <!--{if $plugin_news_category.id == $plugin_news.category_id}-->
            <tr>
                <td><a href="{$freo.core.http_file}/news/view/{$plugin_news.id}">{$plugin_news.datetime|date_format:'%Y/%m/%d'}</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>
            <!--{/if}-->
            <!--{/foreach}-->
        </tbody>
    </table>
<!--{/foreach}-->

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

<!--{ニュースカテゴリーの繰り返しここから}-->
<h3><a href="{$freo.core.http_file}/news?category_id={ニュースカテゴリーID}">{ニュースカテゴリー名}</a></h3>
    <table id="news">
        <thead>
            <tr>
                ~中略~
            </tr>
        </thead>
        <tfoot>
            <tr>
                ~中略~
            </tr>
        </tfoot>
        <tbody>
            <!--{ニュースの繰り返しここから}-->
            <!--{もし今繰り返しているカテゴリーIDと今繰り返しているニュースのカテゴリーIDが等しければここから}-->

                ~中略~

            <!--{もし今繰り返しているカテゴリーIDと今繰り返しているニュースのカテゴリーIDが等しければここまで}-->
            <!--{ニュースの繰り返しここまで}-->
        </tbody>
    </table>
<!--{ニュースカテゴリーの繰り返しここまで}-->

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

ページ移動

関連エントリー

コメント

未花 月葉

先日はテンプレートを変えるだけでタグごとに表示するための
ソースの修正、有難うございました!
そしてニュースプラグイン、バナーつきブックマークプラグインの
バージョンアップ、お疲れ様です。
早速、使わせて頂いております。

そこで少しご教授いただけたらと思うのですが、
現在、これまでのミツ様の記事を参考に、
トップページにてニュースプラグインをカテゴリーごとに表示させております。
以下は自分用に改変したソースなのですが…。

----------------------------------------

<h3>news</h3>
<dl class="record">
<!--{foreach from=$plugin_newses|smarty:nodefaults item='plugin_news'}-->
<!--{if $plugin_news.category_id == 'カテゴリーID'}-->
<dt class="recordname">{$plugin_news.datetime|date_format:'%Y-%m-%d:'}</dt>
<dd class="recordlabel">
<!--{if $plugin_news.url}--><a href="{if $plugin_news.url|regex_match:'/^https?\:\/\//'}{$plugin_news.url}{else}{$freo.core.http_file}/{$plugin_news.url}{/if}">{$plugin_news.text}</a><!--{else}-->{$plugin_news.text|smarty:nodefaults}<!--{/if}-->
<!--{if $freo.user.authority == 'root' or $freo.user.authority == 'author'}-->
<a href="{$freo.core.http_file}/news/NULL_form?id={$plugin_news.id}" class="icon-pencil"><img src="{$freo.core.http_url}{$smarty.const.FREO_TEMP_IMG_DIR}space.gif" alt="編集" title="編集"></a>
<!--{/if}-->
</dd>
<!--{/if}-->
<!--{/foreach}-->
</dl>

----------------------------------------

トップページ等の表示件数を設定管理で5件とした場合、
ページ内における総件数の表示が5件になってしまいますよね?
これを、カテゴリーごとに表示件数を固定(5件)にしたい場合、
これはもうプラグインのPHPそのものをいじるか、
プラグインを複数設置するしか方法はないのでしょうか?

ご迷惑でない範囲でいいので、ご教授いただければ幸いです。

  • URL
  • 2014/01/21 08:08:51

ミツ@32877

こんにちは。
プラグインを利用頂きありがとうございます。

新着ニュースプラグインをリリースしました。
設定を変更することによってあるカテゴリーの新着ニュースのみを表示できるようにもなっています。
ただし、複数のカテゴリーの新着ニュースをそれぞれ表示したい場合は、同じプラグインを複数設置することが必要です。

新着ニュースプラグイン
http://32877.xii.jp/index.php/view/171

同じプラグインを複数設置する方法
http://32877.xii.jp/index.php/view/144

上記を参考にしてみてください。

  • 2014/01/22 19:06:40

未花 月葉

お世話になっております。

わー!!
ニュースプラグインの出来る限りでの応用範囲でと思っていたのに、有難うございます…!
ニュースプラグインのカテゴリー別表示と併せて使わせていただきますm(_ _)m
サイト上でのお知らせは表示件数が変動することもあるので、インフォメーション機能のほうを利用することにしてみます。
本当に有難うございました!

  • URL
  • 2014/01/23 08:08:16

NN

いつも虹色ミツバチ様のプラグインにはお世話になっております。
現在そちらで配布されているニュースプラグインを利用させていただいて
いるのですが、このニュース表示をカテゴリー毎に分けたいと思い、
Tipsの項目にある「テンプレートを変えるだけでニュースをカテゴリーごとに
表示する方法」(view/169)を見ながらニュース分類をしようとしたのですが、
この方法ではページ毎にニュースの分類がされてしまい、虹色ミツバチ様の
様々な記事に目を通し、色々試したつもりですが、自力での対処法が
わからなかったため、此方で質問させて頂きたく思いました。

現状はTips使用前のプラグイン配布時そのままで利用するとid順に並び、
ページを辿ればより古い(あるいは新しい)idの記事が見られます。
例えばページ1にはid11~id20の、ページ2にはid1~id10の記事が全て
ランダムな順序で並んでいるとします。
これをTipsの方法を使うと、ページ1はid11~id20の記事がカテゴリー毎に
「カテゴリ1の記事、1の記事、1の記事…、カテゴリ2の記事、2の記事、
2の記事…」と並び、ページ2でも同様にid1~id10の記事が「1の記事、
1の記事、1の記事…、2の記事、2の記事、2の記事…」と並びます。

これを「idの順序を無視してカテゴリー1の記事を全て並べる、1ページに
表示できる数より多ければ次のページにもカテゴリー1の記事を表示し続け、
少なければカテゴリー2の記事を同様にid順無視で全て並べる…」という
表示方法にしたいと思っています。

テンプレートhtmlの書き換えではなくphpの方の書き換えが必要そうに
思えるので、大変心苦しく思いますが、どうぞよろしくお願いいたします。

  • 2015/09/30 01:35:07

ミツ@32877

こんにちは。

>「idの順序を無視してカテゴリー1の記事を全て並べる、1ページに表示できる数より多ければ次のページにもカテゴリー1の記事を表示し続け、少なければカテゴリー2の記事を同様にid順無視で全て並べる…」

という表示方法にするには、本TIPSはご利用いただけません。
そのように表示したい場合は、ニュースプラグインのpage.news.phpの1233~1237行目、及びdisplay.news.phpの67~71行目にある

if ($ascending == true) {
$order = ' id';
} else {
$order = ' id DESC';
}

を、

if ($ascending == true) {
$order = ' category_id, id';
} else {
$order = ' category_id DESC, id DESC';
}

のようにしてください。
こうした時、管理画面→設定管理→プラグインの設定→ニュースプラグインの設定内の「並び順」を「idの昇順」にしていた場合は、カテゴリーの昇順及びIDの昇順で表示し、「idの降順」にしていた場合はカテゴリーの降順及びIDの降順で表示します。

お試し下さい。

  • 2015/09/30 14:46:44

NN

素早いご回答ありがとうございます。
無事求めていた表示方法にすることができました。
ミツ様の使い勝手の良いプラグインの配布・丁寧な解説・質問へのご回答のおかげでいつも本当に助けられています。
ありがとうございます。

  • 2015/10/05 01:12:27

コメント登録

登録フォーム
名前
メールアドレス
URL
コメント
投稿キー(スパム対策に、投稿キー を半角で入力してください。)

ユーティリティ

新着コメント

Twitter

サイト内検索

ページ上部へ