ECCUBEプラグイン WpPostのカスタマイズ ページング機能

はいどうもこんばんわANDくんです。

EC-CUBEのプラグイン、WpPostのカスタマイズシリーズでお送りしています。

今回はWpPostの記事を取得しつつ、ページング機能を付けるカスタマイズを行いたいと思います。
WpPostは記事を全件取得しつつ、ページングするような機能が付いてなかったのでそれをつけます。

カスタマイズ方法としてはあまり良くないカスタマイズしてると思うので参考程度に。もうちょっとどうにかしたかった。

まず、ページを作成します。
そして、そのページのメインコンテンツ部分を空にし、WpPostのブロックをメインコンテンツ部に表示になるように配置します。

        $expost = $wppost_postlist['postlist_exclude'];

から

        /**
         * コメント条件の取得
         * 
         * 
         */

の間に

        /* ▼▼▼ページャーをするための追加処理▼▼▼ */
        // テンプレートに渡すための初期化変数
        $this->range = 3; //前後にどれだけの数表示するか

        if(!empty($_GET["pages"])){
            $pages = $_GET["pages"];
            if(is_numeric($pages)){
                $pages--;
            }else{
                $pages = 0;
            }
        }else{
            $pages = 0;
        }
        $offset = $pages * $postnum;

        //記事数取得
        global $wpdb;
        $this->numposts = $wpdb->get_var("SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'"); //全記事取得
        $this->pages_num = $pages + 1;
        $this->max_pages_num = ceil($this->numposts / $postnum);

        if($this->pages_num < 1 || $this->pages_num > $this->max_pages_num ){
            $this->pages_num = 1;
            $offset = 0;
        }
        $this->loopStart = $this->pages_num - $this->range;
        if($this->loopStart < 1)$this->loopStart = 1;
        $this->loopEnd = $this->pages_num + $this->range + 1; //smartyのループはループ終端の一つ前で終わるようなので+1する
        if($this->loopEnd > $this->max_pages_num + 1)$this->loopEnd = $this->max_pages_num + 1;

        /* ▲▲▲ページャーをするための追加処理▲▲▲ */

を挿入します。

        $args = array(

の中の

            'offset'           => 0,

            'offset'           => $offset,

に変更します。

処理部は以上でOK。次にテンプレート部分でページャーを作ります。

<div class="pagination">
    <div class="pager">
        <!--{if $pages_num > 2 && $pages_num > $range+1}--><!--{* 最初へ *}-->
            <a href="<!--{$smarty.server.SCRIPT_NAME}-->" class="first">最初へ</a>
        <!--{/if}-->
        <!--{if $pages_num > 1}--><!--{* 前へ *}-->
            <a href="<!--{$smarty.server.SCRIPT_NAME}-->?pages=<!--{$pages_num-1}-->" class="prev">前へ</a>
        <!--{/if}-->
        <!--{section name=i start=$loopStart loop=$loopEnd}--><!--{* ループ箇所 *}-->
            <!--{if $pages_num == $smarty.section.i.index}-->
                <span class="page_here"><!--{$smarty.section.i.index}--></span>
            <!--{else}-->
                <a href="<!--{$smarty.server.SCRIPT_NAME}-->?pages=<!--{$smarty.section.i.index}-->"><!--{$smarty.section.i.index}--></a>
            <!--{/if}-->
        <!--{/section}-->
        <!--{if $pages_num < $max_pages_num}--><!--{* 次へ *}-->
            <a href="<!--{$smarty.server.SCRIPT_NAME}-->?pages=<!--{$pages_num+1}-->" class="next">次へ</a>
        <!--{/if}-->
        <!--{if $pages_num < $max_pages_num-1 && $pages_num < $max_pages_num-$range }--><!--{* 最後へ *}-->
            <a href="<!--{$smarty.server.SCRIPT_NAME}-->?pages=<!--{$max_pages_num}-->" class="last">最後へ</a>
        <!--{/if}-->
    </div>
</div>

こんな感じの物をページャーを置きたいところに配置します。
形とかもっと良い物あるかもしれませんが、最低限の機能は備えているかなと。
あとは軽くデザインを変更してください。今回はDB修正必要なかったはず・・・です。
ちょっと過去の事なので抜けてることもあるかもしれませんが・・・。

このような対応は下記のサイトのブログ箇所で行っています。参考までにご確認してみてください。
商品は・・・気が向いたら購入してみてはいかがでしょう!

コレクションシバ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.