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のバージョンが一緒なんだから、まぁ、まんまじゃなくても使えるはずだよね。
ただ、その、「丹念に見ていく」作業が大変。
近くにデキる人がいるなら、お願いしたほうが良いです。
あるいは、業者にお願いしたほうが良いです。調査時間の無駄です(笑)
ただ、弊社は出来て、ノウハウも出来たので、いつでもご用命ください。見積致します(笑)