EC-CUBE【2.12】商品検索結果を任意の数値で並び変え

2013年9月22日

えー、色々と書きたいカスタマイズを施してきたんだけど、なかなか更新できず…。

今回の「EC-CUBEの商品検索結果を任意の数値で並び変える」のは、商品コードでとか更新順とかは結構あったんだけど、これはなかったんで、更新しておこうかなと。

では、早速。

Step.1

まず、データベースをいじくります。

「dtb_products 」に「sort_by(名前はなんでもOK)」を追加

step1_001

 

こんな感じで。

データベースはこれで終了

Step.2

お次は「LC_Page_Admin_Products_Product.php」の修正

場所↓
/data/class/pages/admin/products/LC_Page_Admin_Products_Product.php

「パラメーター情報の初期化」に以下を追加(「パラメーター情報の初期化」をメモ帳とかで検索するとラクだよ。)

$objFormParam->addParam('昇降順', 'sort_by', STEXT_LEN, 'n', array('NUM_CHECK', 'SPTAB_CHECK', 'MAX_LENGTH_CHECK'));

さらに、「配列の添字を定義」に以下を追加

$checkArray = array('name', 'status',
'main_list_comment', 'main_comment', 'freearea_1', 'freearea_2',
'deliv_fee', 'comment1', 'comment2', 'comment3',
'comment4', 'comment5', 'comment6', 'gedai', 'sort_by',

「freearea_1」とか「gedai」とかは、気にしんといて下さい。

最後に、そのすぐ下「INSERTする値を作成する。」に以下を追加

$sqlval['sort_by'] = $arrList['sort_by'];

これでこのファイルは完了

Step.3

お次は「SC_Product.php」の修正

場所↓
/data/class/SC_Product.php

これは1箇所。

「商品詳細の SQL を取得する」に以下追加

,dtb_products.sort_by

こんな感じで。

Step.4

「/data/Smarty/templates/admin/products/product.tpl」
「/data/Smarty/templates/admin/products/confirm.tpl」

この2つのファイルを修正。

これは、商品登録ページと確認ページ。

まず、商品登録ページ「product.tpl」

お好きな箇所に以下追加

<tr>
  <th>昇降順</th>
  <td>
    <span class="attention"><!--{$arrErr.sort_by}--></span>
    <input type="text" name="sort_by" value="<!--{$arrForm.sort_by|h}-->" maxlength="<!--{$smarty.const.STEXT_LEN}-->" style="<!--{if $arrErr.sort_by != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}-->;<!--{/if}-->" size="60" class="box60" />
  </td>
</tr>

商品確認ページ「confirm.tpl」

お好きな箇所に以下追加

<tr>
  <th>昇降順</th>
  <td><!--{$arrForm.sort_by|h}--></td>
</tr>

これで、昇降順の任意の数値を入力できるようになった。

ちなみにここまでは「http://blog.majili.com/creative/adds-an-item-to-the-product-information-on-ec-cube-2-12/」を参考にさせて頂いてます。
(数値を表に表示する必要がないので、このケースでは/data/Smarty/templates/default/products/detail.tplはさわらなくてOK)

Step.5

ここからは、商品一覧ページの編集

data/Smarty/templates/default/products/list.tpl

これを、

<!--▼ページナビ(本文)-->
<!--{capture name=page_navi_body}-->
    <div class="pagenumber_area clearfix">
        <div class="change">
            <!--{if $orderby != 'price'}-->
                <a href="javascript:fnChangeOrderby('price');">価格順</a>
            <!--{else}-->
                <strong>価格順</strong>
            <!--{/if}--> 
            <!--{if $orderby != "date"}-->
                    <a href="javascript:fnChangeOrderby('date');">新着順</a>
            <!--{else}-->
                <strong>新着順</strong>
            <!--{/if}-->

こうしちゃう↓

<!--▼ページナビ(本文)-->
<!--{capture name=page_navi_body}-->
    <div class="pagenumber_area clearfix">
        <div class="change">
            <!--{if $orderby != "sort_by"}-->
                    <a href="javascript:fnChangeOrderby('sort_by');">新着順</a>
            <!--{else}-->
                <strong>新着順</strong>
            <!--{/if}-->
            <!--{if $orderby != 'price'}-->
                <a href="javascript:fnChangeOrderby('price');">価格順</a>
            <!--{else}-->
                <strong>価格順</strong>
            <!--{/if}-->

これでOK

Step.6

これで、最後。

data/class/pages/products/LC_Page_Products_List.php

「表示順序」の「新着順」を以下に書き換え

// 新着順
case 'sort_by':
    $objProduct->setProductsOrder('sort_by', 'dtb_products', 'DESC');
    break;

最後の最後に、これをデフォルトにしたい場合、新着順の下にある「default」を以下に変更

default:
                if (strlen($searchCondition['where_category']) >= 1) {
                    $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')';
                    $arrOrderVal           = $searchCondition['arrvalCategory'];
                } else {
                    $dtb_product_categories = 'dtb_product_categories';
                }
                $order = <<< __EOS__
                    (
                        SELECT
                            T3.rank * 2147483648 + T2.rank
                        FROM
                            $dtb_product_categories T2
                            JOIN dtb_category T3
                              ON T2.category_id = T3.category_id
                        WHERE T2.product_id = alldtl.product_id
                        ORDER BY T3.rank DESC, T2.rank DESC
                        LIMIT 1
                    ) DESC
                    ,product_id DESC
__EOS__;
                    $objProduct->setProductsOrder('sort_by', 'dtb_products', 'DESC');
					$objQuery->setOrder($order);
                break;

下から3行目を追加しただけ。

これで、ほんとに終了。

ここまでは「http://webmage.pro/blog/archives/284」を参考にさせて頂きました。

これで、商品登録の際に昇降順に数値を入れて行けば、楽天のように(楽天とは逆だっけ!?)数値が大きい商品が上に表示されます。

ちなみに、今回は日付を入れて昇降順としているようです。

例)1309221147(2013年9月22日11時47分)

まぁ、やり方は各々で。

ちなみに、TIMESTAMPとかで、リアルに日付とかでできるのかなとかも思ったんだけど、楽天ライクにしたかったので、今回の感じになりました。

また、あまり専門知識はないので、探りながらの作業でしたので、おかしい所やもっといい改善点があれば、コメント頂ければと思います。

それでは。

EC-CUBE【2.12】顧客情報の移行成功♪

2013年8月29日

アパレル関係のECサイトをEC-CUBEにて、現在構築中です。

色々と苦労した所があったので、更新も滞っている事もアリ、メモとして(実はアクセスアップも兼ねて…)。

まず、最初から大きな壁にぶち当たりました。

新規構築ではなく、システムを乗り換えてのリニューアル…。

「ec-cube 顧客 一括登録」「ec-cube 会員情報 csv」など、ググッるもなかなかいい方法が見つからず…。

でも、デキルと言った手前、なんとかしなくては…。

しかも、インポートする前システムが噂によると、メールアドレスがあれば登録できる状態だったみたいで、csvが電話番号がめちゃくちゃだったり、名前がなかったり…。

そして、なんとかかんとかデキました!!!!

もっと専門的なやり方もあるとは思うんだけど…。

とりえず、手順は以下です。

まず、公開するURLとは別にEC-CUBEの2.11.5(http://www.ec-cube.net/download/)をインストールします。

2.11.5はcsvを出力するだけの捨てシステムですので、サクッとインストールしちゃって下さい。

インストールが完了したら、会員登録を数件、登録します。

移行するデータの参考にするので、色々なパターンで登録するといいでしょう。

登録が完了したら、「データエクスポートモジュール(2.11系) 」をダウンロード。

こちら、プラグインではなくモジュールなので、気を付けて下さい。

「オーナーズストア>購入商品一覧」のデータエクスポートモジュール(2.11系)→設定から「移行データ作成」でデータをエクスポート。

出力した「shift_dataxxxxxxxxxxxx.tar.gz」内にある「dtb_customer.csv」を編集する。

先ほど登録した顧客データを参考に編集すればOK

ちなみに、サクっと調べた項目名は

【顧客ID,お名前1,お名前2,フリガナ1,フリガナ2,郵便番号1,郵便番号2,都道府県,住所1,住所2,メールアドレス,携帯メールアドレス,TEL1,TEL2,TEL3,FAX1,FAX2,FAX3,性別,職業,生年月日,パスワード,パスワードヒント質問,パスワードヒント答え,不明,不明,不明,不明,ポイント,ショップ用メモ,不明,登録日,更新日,不明,不明,メールマガジン】

不明の箇所は、今回入力しませんでした。

ここで、問題が2つ。

  1. 前カートシステムのパスワードはない
  2. 秘密の質問をどうするか…。

クライアントの要望としては、パスワード&秘密の質問共に全員決まったワードでいいとの事…。

よし、簡単だと思ったところ、パスワードは暗号化されてるんだ…。

でも、これで解決しました。

まず、

data/config/config.phpの16行目!?

define('AUTH_MAGIC', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx);

の値を、EC-CUBEパスワードメーカーのAUTH_MAGICに入力して各パスワードも入力。

変換方法をsha1にしてsubmit。

「変換後のパスワード」を「dtb_customer.csv」に入力

これで、csvはok。

圧縮してアップだけ…だけど、圧縮にもまた手間取りました。

「.tar.gz」で保存しなきゃいけないので、自分は「PeaZip」を使いました。

PeaZipは「Gzip」「Nomal」「Single volume」でTAR beforeにチェックで名前は「dtb_customer.tar.gz」で圧縮。

インポートする前に、会員登録の必須項目をすべて外してやる(必要なければやらないでOK)

data/class/helper/SC_Helper_Customer.php内の「’EXIST_CHECK’」をすべて削除。

このファイルは、csv登録後元の状態にして戻すので、バックアップをとるなりしといた方がいいです。

そして、先ほど圧縮したデータをインポートするEC-CUBEにデータ移行プラグイン(インポート)でインポート。

これでOK。

この後、元に戻した「SC_Helper_Customer.php(「’EXIST_CHECK’」の付いてる)」の更新を忘れないでください。

また、2.115も削除。

これで、本当にOK。

さて、この後商品情報もあるんだけど…。

おそらくこれは手入力になりそうな予感…。

みとけ、きーとけ。其の壱拾七

2012年2月25日

SWV  – Cosign
YouTube Preview Image

Tank – Next Breath
YouTube Preview Image

John Legend “Woke Up This Morning”
YouTube Preview Image

Tyga – ‘Rack City Remix’ (Feat. Wale, Fabolous, Young Jeezy, Meek Mill, & T.I.)
YouTube Preview Image

Page 1 of 25
1
2
3
4
5
10
20
...
Last »