EC-CUBE カテゴリー一覧の取得・表示方法

Pocket

EC-CUBEでカテゴリ一覧を取得する方法

カテゴリクラスの編集

カテゴリー一覧を取得するためにクラスを編集します。ここではカテゴリーブロック用クラスのLC_Page_FrontParts_Bloc_Category_Exを編集します。

継承クラスにはactionが設定されていないため以下のように設定します。

class LC_Page_FrontParts_Bloc_Category_Ex extends LC_Page_FrontParts_Bloc_Category
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init()
    {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process()
    {
        parent::process();
    }

    public function action()
    {
        $this->arrAllCatList = $this->GetAllCatList();
    }

    public function GetAllCatList()
    {
        $arrRet = array();

        echo "function test ok";

        return $arrRet;
    }
}

この状態でサイトを見ると以下の画像のようにechoの部分が出力されてます。
eccube-get-category1

データベースからデータを取得

クラスファイルの準備ができたので、データを取得します。データを取得するためにはSC_Query_Exクラスを使います。

このクラスをインスタンス化したら、後は列やテーブルのセットをしていけばOK。最後にクエリを実行してデータを取得します。

public function GetAllCatList()
{
    $arrRet = array();

    // クエリの準備
    $objQuery =& SC_Query_Ex::getSingletonInstance();

    // 取得したい列のセット、 *はすべて取得
    $col = '*';

    // 取得したいデータが入ってるテーブルのセット
    $table = 'dtb_category';

    // 順序のセット、ここではrank=カテゴリ画面で設定した順序
    $objQuery->setOrder('rank');

    // クエリを実行し、データを取得
    $arrRet = $objQuery->select($col, $table, $where);

    // データの中身の表示テスト
    echo "<pre>";
    var_dump($arrRet);
    echo "</pre>";

    // echo "function test ok";

    return $arrRet;
}

ここでは中身を確認するため、var_dump($arrRet)を使ってデータを出力しています。結果は以下のようになります。
eccube-get-category2

クエリで設定した通り、rank順にデータを取得できています。このデータを使って次はテンプレートにデータを出力してみます。

取得したカテゴリ一覧を表示する方法

EC-CUBEのカテゴリブロックで表示する

データの取得ができたので、次はテンプレートから得たデータを出力します。frontparts/bloc/category.tplを開いてEC-CUBEのテンプレートを加工していきましょう。

デフォルトではカテゴリツリーを表示するようになっているので、いったんこの部分を削除し、新しく取得したデータを表示してみます。

デフォルトテンプレートのカテゴリツリーをインクルードしている部分を削除します。

<!--{strip}-->
  <div class="block_outer">
    <div id="category_area">
      <div class="block_body">
        <h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_bloc_category.gif" alt="商品カテゴリ" /></h2>
        
        <!-- インクルードを削除 -->

      </div>
    </div>
  </div>
<!--{/strip}-->

この中にデータを出力したいのでforeachを使って取得したデータを表示するようにコーディングしていきます。ここではカテゴリー名とリンクを出力してみます。

<!--{strip}-->
<div class="block_outer">
  <div id="category_area">
    <div class="block_body">
      <h2><img src="<!--{$TPL_URLPATH}-->img/title/tit_bloc_category.gif" alt="商品カテゴリ" /></h2>

      <!-- インクルードを削除 -->
      <!--{foreach from=$arrAllCatList item=arrCat key="key" name="category_list"}-->
        <ul>
          <li>
            <a href="<!--{$smarty.const.ROOT_URLPATH}-->products/list.php?category_id=<!--{$arrCat.category_id|u}-->">
              <!--{$arrCat.category_name|h}-->
            </a>
          </li>
        </ul>
      <!--{/foreach}-->

    </div>
  </div>
</div>
<!--{/strip}-->

foreachで繰り返しの設定を行ったら、あとは先ほど出力したデータを見ながら必要なものを取り出すだけです。実行結果は以下のようになります。
eccube-get-category3

カテゴリーの表示まとめ

こんな感じでデータベースのデータを簡単に出力することができます。カテゴリーの他にも商品登録から1週間以内のものに自動的にNEWマークをつけたりといったこともデータの出力とクラス側のコーディングで簡単にできるのです。