EC-Cube 2.11→2.13 をやってみた

EC-Cubeを使っている人は、世の中にどのくらいいるのだろう。。。。

日本では、かなりデファクトスタンダードになっていると思っていますが、どうでしょう?

で、業務にて2.11→2.13への作業の必要性が出てきましたので、作業を行ってみました。

要点をまとめます。

1.2.13をインストール。
2.テンプレート他を移植(これが結構大変:後述)
3.2.13のテーブルをtrancate。
4.2.11のデータを2.13へ転送(これも結構大変:後述)
5.config.phpを微調整。特にテンプレートを変更しているなら、気にして。
6.プラグインをインストール
7.テスト

<テンプレートの移植>
既存の開発者がいれば変更点を聞くことも出来ますが、今回はいませんでしたので、2.11のデフォルト状態を比較して、変更されていると思しきデータを拾い出しました。で、ハマったのが、カテゴリリスト。表示されないんです。とにかく。
理由はわかりません。詳しく調べていません。ただ、「category.tpl」の中の一部を変更しました。

<!--{if $arrTree[cnt].display == 1}-->
               ↓
<!--{if $arrTree[cnt].display == 1 or true}-->

たぶん、詳しく調べればわかるんでしょう、きっと。DBのデータの持ち方の問題なのかな・・・・

あと、新着情報の日付の扱いもハマりました。「news.tpl」の中の一部。

<!--{assign var="date_array" value="-"|explode:$arrNews[data].news_date_disp}-->
               ↓
<!--{assign var="date_array" value="-"|explode:$arrNews[data].cast_news_date}-->

news_date_dispって誰やねん。。。。。って感じで・・・・

もちろん、どちらも標準テンプレートですよ?なのに・・・・(笑)

<データの転送>
今回、元も先もMySQLを使用しました。詳細は書きません(興味のある方はご連絡下さい。コンサルします:笑)が、おおよそ以下の事をやってます。作業するにあたっては、OSがUnix系だったのでshell scriptを作って一気に転送するようにしました。

1.2.11にあって、2.13に無いテーブル、フィールドを2.13側に追加

ALTER TABLE \`dtb_baseinfo\` ADD \`tax\` DECIMAL(10,0) NOT NULL AFTER \`downloadable_days_unlimited\`, ADD \`tax_rule\` SMALLINT(6) NOT NULL AFTER \`tax\`, ADD \`email05\` TEXT NOT NULL AFTER \`tax_rule\`;
ALTER TABLE \`dtb_payment\` CHANGE \`rule_max\` \`rule\` DECIMAL(10,0) NULL DEFAULT NULL;
ALTER TABLE \`dtb_payment\` ADD \`module_code\` TEXT NOT NULL AFTER \`memo10\`;
ALTER TABLE \`dtb_products_class\` ADD \`class_combination_id\` INT(11) NULL DEFAULT '0' AFTER \`product_id\`;
ALTER TABLE \`dtb_shipping\` ADD \`deliv_id\` INT(11) NOT NULL AFTER \`del_flg\`, ADD \`shipping_num\` TEXT NULL AFTER \`deliv_id\`;
ALTER TABLE dtb_recommend_products DROP PRIMARY KEY;
ALTER TABLE dtb_recommend_products ADD PRIMARY KEY (\`product_id\`,\`recommend_product_id\`,\`rank\`);
ALTER TABLE dtb_products_class DROP INDEX dtb_products_class_unique_key;  ←これ、結構大事

2.全てのテーブルをtrancate。
3.オーダー関連テーブルの NOT NULLを削除。

ALTER TABLE \`dtb_order\` CHANGE \`discount\` \`discount\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order\` CHANGE \`use_point\` \`use_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order\` CHANGE \`add_point\` \`add_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order\` CHANGE \`birth_point\` \`birth_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order_temp\` CHANGE \`discount\` \`discount\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order_temp\` CHANGE \`use_point\` \`use_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order_temp\` CHANGE \`add_point\` \`add_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_order_temp\` CHANGE \`birth_point\` \`birth_point\` DECIMAL(10,0) NULL DEFAULT '0';
ALTER TABLE \`dtb_payment\` CHANGE \`module_code\` \`module_code\` text NULL DEFAULT '';

4.以下でがっさりデータを転送。その際、USE句が邪魔なので、grep -vと、mtb_zipも邪魔なので、grep -v。あと、プラグインも邪魔なので、grep -v dtb_plugin

mysqldump -h $SRC_HOST -t -c -n --skip-extended-insert --default-character-set=binary -B $SRC_DB -u $SRC_USER --password=$SRC_PASS

5.カテゴリの使い方が違うので、調整。

UPDATE dtb_products_class SET classcategory_id1 = (SELECT classcategory_id FROM dtb_class_combination WHERE class_combination_id = dtb_products_class.class_combination_id);
UPDATE dtb_products_class SET classcategory_id2 =(SELECT classcategory_id FROM dtb_class_combination WHERE class_combination_id =(SELECT parent_class_combination_id FROM dtb_class_combination WHERE class_combination_id = dtb_products_class.class_combination_id));

6.暫定で変更していたテーブル構造を元に戻す
7.郵便番号データを通常のルートで設定

ネットを調べていると、皆さん結構苦労されているよう。で、2.11→2.12→2.13としないと、という記述があるけど、これは、標準の移植ツールを使おうとした場合。
今回経験した感じでは、かえって必要なデータが移植出来て無かったりして苦労した。

結局、「もしかして、力技でできんじゃね?」的な発想で2.11→2.13を強行。懸念材料は以下でした。

1.データベースを上手に転送出来ねんじゃね?
2.テンプレート使えねぇんじゃね?

杞憂でした。データ構造を丹念に比較して見ていくと、まぁ、出来ない相談じゃないです。テンプレートは、Smartyのバージョンが一緒なんだから、まぁ、まんまじゃなくても使えるはずだよね。

ただ、その、「丹念に見ていく」作業が大変。

近くにデキる人がいるなら、お願いしたほうが良いです。
あるいは、業者にお願いしたほうが良いです。調査時間の無駄です(笑)

ただ、弊社は出来て、ノウハウも出来たので、いつでもご用命ください。見積致します(笑)


Comments are closed.