【EC-CUBE】レビュー管理で出力するCSVの項目をカスタマイズする。

【EC-CUBE】レビュー管理で出力するCSVの項目をカスタマイズする。

こんにちは、fukasawaです。最近は仕事中飴を舐めることが多いです。チョコだと脂質が気になるので飴にしてみたのですが、細くなった飴で舌がサクッと切れたりするので少し困ります。味噌汁がしみる…

さて、EC-CUBEにはレビュー機能があり、商品毎にレビューを投稿することができます。投稿されたレビューは管理画面の「商品管理>レビュー管理」からCSV形式でダウンロードすることができますが、デフォルトの状態では、レビューが紐付いている商品の商品ID等を取得することができません。
今回は、レビュー管理のCSV出力を行った際に出力する項目をカスタマイズし、商品IDを出力する方法について少し書いてみようと思います。

※EC-CUBEバージョン2.13.1の使用を想定した内容になっています

CSV出力項目に商品IDを追加する

レビューに紐づく商品の商品IDをCSV出力項目に追加します。
CSVダウンロードを行った際に出力される項目はDBの「dtb_csv」というテーブルで管理されています。レビュー機能に限らずCSV出力項目を追加したい場合、このテーブルにレコードを新しく追加することになります。


INSERT INTO dtb_csv(
    no,
    csv_id,
    col,
    disp_name,
    rank,
    rw_flg,
    status,
    create_date,
    update_date,
    mb_convert_kana_option,
    size_const_type,
    error_check_types
)
 VALUES 
(
    1001,
    '4', 
    'A.product_id',
     '商品ID', 
     '1', 
     '1', 
     '1', 
     CURRENT_TIMESTAMP,
     CURRENT_TIMESTAMP,
     'n',
     'INT_LEN',
     'NUM_CHECK,MAX_LENGTH_CHECK'
);

※各カラムについてはテーブル定義を参照してください(EC-CUBEのモジュールをダウンロードすると、\docs\table_definition.xlsにテーブル定義が含まれています。)

csv_id

レビュー機能に項目を追加する場合は4を設定します。どの機能のCSV出力に項目を追加するかを指定しており、商品管理の場合:1、会員管理の場合:2、受注管理の場合:3、カテゴリの場合:5 をそれぞれ指定します。

col

CSV出力に含めるテーブルのカラムを指定します。今回は'A.product_id'を指定しています。先頭のAについてですが、レビュー機能のCSV出力部分のソースを確認すると、SQLのfrom句に以下が指定がされていることを確認できます。


    $from = 'dtb_review AS A INNER JOIN dtb_products AS B on A.product_id = B.product_id';

dtb_reviewというテーブルに「A」という別名が設定されています。今回はこの別名「A」を指定し、dtb_reviewテーブルのproduct_idを取得しています。dtb_csvテーブルに入っている他のレコードを見るとわかるのですが、colカラムには取得したい内容がSQL文の一部として設定されています。

レコードを追加した後は「管理画面→コンテンツ管理→CSV出力項目設定→レビュー」に「商品ID」が表示されるようになり、出力項目の順番を入れ替えられるようになります。

CSV出力項目のおすすめレベルを「★」から数値に変更する

管理画面のレビュー管理からCSVをダウンロードしてみるとわかるのですが、おすすめレベルが「★」で出力されています。画面表示のときは「★」で出力されていても良いのですが、CSVデータとして扱う場合は数値の方が都合よいケースもあると思います。ということで、これを数値で出力するよう変更してみます。

以下のSQLを発行し、既存のレコードを更新します。


UPDATE dtb_csv SET col =  'A.recommend_level as recommend_level' WHERE csv_id =4 AND disp_name =  'おすすめレベル'

このレコードはもともと「mtb_recommend」テーブルを使用しておすすめレベルを「★」に変換するよう設定されているのですが、おすすめレベルの数値をそのまま出力するよう変更しています。

CSV出力項目にレビューを書いた顧客の会員IDを出力する

まず、レビューを投稿した会員の会員IDがDBに入るように作られていないので、入れるようカスタマイズします。「dtb_review」テーブルには既にcustomer_idというカラムが存在しているのですが、実際には使われておらず、レビューを投稿するとNULLが設定されます。カラムがあるのに何故使われていないのだろうと疑問に思いつつ、下記のようにコードを修正します。

\data\class_extends\page_extends\products\LC_Page_Products_Review_Ex.php


    //登録実行
    public function lfRegistRecommendData(&$objFormParam)
    {
        $objQuery =& SC_Query_Ex::getSingletonInstance();
        $arrRegist = $objFormParam->getDbArray();

        $arrRegist['create_date'] = 'CURRENT_TIMESTAMP';
        $arrRegist['update_date'] = 'CURRENT_TIMESTAMP';
        $arrRegist['creator_id'] = '0';
        if(isset($_SESSION['customer']['customer_id'])){
            $arrRegist['customer_id'] = $_SESSION['customer']['customer_id'];
        }

        //-- 登録実行
        $objQuery->begin();
        $arrRegist['review_id'] = $objQuery->nextVal('dtb_review_review_id');
        $objQuery->insert('dtb_review', $arrRegist);
        $objQuery->commit();
    }

※if文のあたりが追記箇所です。会員がログインしていた場合に、レビューを投稿した会員の会員IDが設定されるようにしています。

※lfRegistRecommendData()というメソッドがない場合は追加してください。

コードを修正したら、CSV出力項目に会員IDが追加されるよう「dtb_csv」テーブルにレコードを追加します。


INSERT INTO dtb_csv(
    no,
    csv_id,
    col,
    disp_name,
    rank,
    rw_flg,
    status,
    create_date,
    update_date,
    mb_convert_kana_option,
    size_const_type,
    error_check_types
)
 VALUES 
(
    1002,
    '4', 
    'A.customer_id',
     '会員ID', 
     '1', 
     '1', 
     '1', 
     CURRENT_TIMESTAMP,
     CURRENT_TIMESTAMP,
     'n',
     'INT_LEN',
     'NUM_CHECK,MAX_LENGTH_CHECK'
);
  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ