Blog

【ECCUBE2.13】商品一覧に説明欄を追加

2016/03/16

ECCUBE2.13

ECCUBE2.13で商品一覧に説明欄を追加する方法です。

実は、参考サイトを基にカスタマイズしたのですが、2.13では若干違いがあるため備忘録として残します。

参考サイト(2.11と2.12)
EC-CUBEでカテゴリページに説明文を追加する方法

1)DBにデータベースにカラムを2つ追加

dtb_categoryテーブルに以下のカラムを追加します。

admin_category

カラム名: category_info データ型: text
カラム名: info_flg データ型: smallint

それぞれ「ヌル(NULL)」に「null」を設定し保存します。

2)管理画面から追加・編集できるようにする

カテゴリ編集ページにテキストフィールドを追加します。
/data/Smarty/templates/admin/products/category.tpl

>div class="now_dir"<の直下に下記コードを追加します。

 <div class="now_dir">
    <!--{if $arrErr.category_name}-->
    <span class="attention"><!--{$arrErr.category_name}--></span>
    <!--{/if}-->
    <input type="text" name="category_name" value="<!--{$arrForm.category_name|h}-->" size="30" class="box30" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{$arrErr.category_name|sfGetErrorColor}-->" />
    <br />
    <br />
    <div>
        <!--説明追加-->
        <textarea name="category_info" cols="100" rows="15"><!--{$arrForm.category_info|escape}--></textarea>
        <br />
        <br />
        <!--{if $arrForm.level != "1" && $arrForm.parent_category_id != "0"}--><input type="checkbox" name="info_flg" id="info_flg" value="1"<!--{if $arrForm.info_flg}--> checked="checked"<!--{/if}--> /><label for="info_flg" class="fs10n">親カテゴリの説明を引き継ぐ</label><!--{/if}--><span class="red10"> (上限<!--{$smarty.const.LLTEXT_LEN}-->文字)</span>
    </div>
    <a class="btn-normal" href="javascript:;" onclick="eccube.setModeAndSubmit('edit','',''); return false;"><span class="btn-next">登録</span></a><span class="attention">&nbsp;(上限<!--{$smarty.const.STEXT_LEN}-->文字)</span>
</div>

/data/class_extends/page_extends/admin/products/
LC_Page_Admin_Products_Category_Ex.php

まず、LC_Page_Admin_Products_Category.phpの内容をLC_Page_Admin_Products_Category_Ex.phpへコピペします。

それからpublic function initParam()関数の中に下記コードを追加します。

* パラメーターの初期化を行う
*
* @param  SC_FormParam $objFormParam
* @return void
*/
public function initParam(&$objFormParam)
{
    $objFormParam->addParam('親カテゴリID', 'parent_category_id', null, null, array());
    $objFormParam->addParam('カテゴリID', 'category_id', null, null, array());
    $objFormParam->addParam('カテゴリ名', 'category_name', STEXT_LEN, 'KVa', array('EXIST_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
    //追加
    $objFormParam->addParam('説明', 'category_info', STEXT_LEN, 'KVa', array('SPTAB_CHECK'));
    $objFormParam->addParam('親カテゴリ説明のコピー', 'info_flg',  INT_LEN, null, array());
}

public function updateCategory()関数を以下に書き換えます。

/**
 * カテゴリを更新する
 *
 * @param  SC_FormParam $objFormParam SC_FormParam インスタンス
 * @return void
 */
public function updateCategory($category_id, $arrCategory)
{
    $objQuery =& SC_Query_Ex::getSingletonInstance();

    $arrCategory['update_date']   = 'CURRENT_TIMESTAMP';

    $objQuery->begin();
    $where = 'category_id = ?';
        
    //追記:親の設定を引き継ぐ時
    if($arrCategory['info_flg']) {
    $parent_category_id = $objQuery->get("parent_category_id", "dtb_category", $where, array($category_id));

    $arrCategory['category_info'] = $this->lfGetParentInfo($objQuery, $parent_category_id);
    }
        
    $objQuery->update('dtb_category', $arrCategory, $where, array($category_id));
    $objQuery->commit();
}

ファイルの最後の}の前に関数を追加します。

// 追記:親のcategory_infoを取得する
public function lfGetParentInfo($objQuery, $pid) {
   $where = "category_id = ?";
   $parent_info = $objQuery->get("category_info", "dtb_category", $where, array($pid));
   return $parent_info;
}

3)カテゴリページで説明文を表示

ここが参考サイトと違うところです。

/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php

以下を追加します。

/**
 * Page のAction.
 *
 * @return void
 */
function action() {
        
    parent::action();
        
    /* 追加データを取得 */
    $arrCtg = $this->lfGetCategoryData($this->mode, $this->arrSearchData['category_id']);
    $this->tpl_ctg_category_info = $arrCtg['category_info'];
        
}

/**
 * カテゴリデータの取得
 *
 * @return str
 */
function lfGetCategoryData($mode, $category_id = 0){
    if ($mode == 'search') {
        return array();
    } elseif ($category_id == 0) {
        return array();
    } else {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $where = "category_id = ?";
        $arrResult = $objQuery->select("*", "dtb_category", $where, array($category_id));
        $arrCtg['category_info'] = $arrResult[0]['category_info'];
            
        return $arrCtg;
    }
}

取得した説明文を表示する箇所を指定します。
/data/Smarty/templates/default/products/list.tpl

<!--{$tpl_ctg_category_info|nl2br_html}-->

以上で、無事説明が表示されるようになりました。

カテゴリー

月間アーカイブ

MORE

ミュージシャンズ・プラザ

神社仏閣ホームーページ制作

ホームページ制作問合せ