EC-CUBE2.12系へのアップグレードはひとまず保留

またEC-CUBEネタです。
前々から気になっていたEC-CUBE2.12系。

色々と改善されているようですが、やはり一番気になるところはプラグイン機能搭載でしょうか。
毎回カスタマイズしていた部分などはプラグインで簡単に機能拡張できるようになりそうですね。
これを気にさらに知識を深めたいところです。

2.4系から2.11系へのアップグレードは試行錯誤しながら出来た!?つもりなので、今回も頑張ろうと思い情報収集してみましたが、これが結構手こずりそうです。
DB構造などガッツリ変更されているようなので、今回は難しいかな…。
フォーラムなどでは、2.12.1辺りの安定板が出る頃には移行プラグインが出るんじゃないかという話がありましたので、ひとまずアップグレードは保留。
それまでにプラグインの勉強したいところ。
勉強することが多いですね。ちょっとずつでも、地道に頑張るしかないかな…

EC-CUBE 2.4系→2.11系へ【インポート編】

すみません。業務も忙しく、かなり遅くなりました。
作業時に残したメモを紛失したこと、確認作業が時間的にすぐは厳しいところですが、
コメントもいくつかいただき、覚えている部分だけでも投稿しようと思います。
コメントいただいた方々有難うございました!

それではインポート編です。

まずエクスポートモジュールで書き出されたzipファイルの内容がちゃんと書き出されているか確認して下さい。
自分の場合は、dtb_products_class.csvを上手く書き出してくれず、少々モジュールを修正しました。
それは「EC-CUBE 2.4系→2.11系へ【エクスポート編】」でご確認下さい。

データを確認できたら、次の作業へ移ります。
この作業は自分の環境で必要だったのか、不必要だったのかうる覚えですが念の為…
以下のようにエラーを回避出来るようです。
↓↓
phpMyAdminなどのツールを使用して以下の2点を変更
・dtb_shippingのdeliv_idのヌル(null)を【はい】にする
・dtb_order_derailのproduct_class_idのヌル(null)を【はい】にする

※変更したnullの許可は作業後に戻すそうです。

参照:http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=7885&forum=15&post_id=43838

次にインポートモジュールを修正します。
インポートモジュールをダウロードして、「LC_Page_Mdl_Upload_Cyber.php」を開きます。

1005行目あたり

変更前
[php highlight_lines=”3″ font_size=”110%”]
if(strlen($sqlval[‘deliv_id’]) > 0){
$sqlval[‘deliv_id’] = ‘1’;
}
[/php]

上記を修正します。

変更後
[php highlight_lines=”3″ font_size=”110%”]
if(strlen($sqlval[‘deliv_id’]) > 0){
$sqlval[‘deliv_id’] = ‘1’;
}else{
$sqlval[‘deliv_id’] = ‘0’;
}
[/php]

1040行目あたり

変更前
[php highlight_lines=”3″ font_size=”110%”]
function lfGetProductClassId($arrList){
$objQuery =& SC_Query_Ex::getSingletonInstance();
//規格ある場合
if($arrList[‘parent_class_name’] != “” && $arrList[‘parent_classcategory_name’] != “”){
$parent_class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘parent_class_name’]));
$classcategory_id1 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($parent_class_id,$arrList[‘parent_classcategory_name’]));

$class_combination_id = $objQuery->select(“class_combination_id”, “dtb_class_combination”, “classcategory_id = ?”, array($classcategory_id1));
// where文作成
$where = “”;
$arrval = array();
foreach($class_combination_id as $val){
if($where == “”){
$where = “( parent_class_combination_id = ?”;
}else{
$where .= ” OR parent_class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;
if($arrList[‘class_name’] != “” && $arrList[‘classcategory_name’] != “”){
$class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘class_name’]));
$classcategory_id2 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($class_id,$arrList[‘classcategory_name’]));
$where .= ” AND classcategory_id = ?”;
$arrval[] = $classcategory_id2;

$class_combination_id = $objQuery->getOne(“SELECT class_combination_id FROM dtb_class_combination WHERE “.$where, $arrval);
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id = ?”, array($arrList[‘product_id’], $class_combination_id));
}else{
$where .= ” AND product_id = ?”;
$arrval[] = $arrList[‘product_id’];
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE “.$where, $arrval);
}

//規格無い場合
}else{
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id IS NULL”, array($arrList[‘product_id’]));
}

return $product_class_id;
}
[/php]

上記を修正します。

変更後
[php highlight_lines=”3″ font_size=”110%”]
function lfGetProductClassId($arrList){
$objQuery =& SC_Query_Ex::getSingletonInstance();
//規格ある場合
if($arrList[‘parent_class_name’] != “” && $arrList[‘parent_classcategory_name’] != “”){
$parent_class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘parent_class_name’]));
$classcategory_id1 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($parent_class_id,$arrList[‘parent_classcategory_name’]));

$class_combination_id = $objQuery->select(“class_combination_id”, “dtb_class_combination”, “classcategory_id = ?”, array($classcategory_id1));
// where文作成
$where = “”;
$arrval = array();

if($arrList[‘class_name’] != “” && $arrList[‘classcategory_name’] != “”){

foreach($class_combination_id as $val){
if($where == “”){
$where = “( parent_class_combination_id = ?”;
}else{
$where .= ” OR parent_class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;

$class_id = $objQuery->getOne(“SELECT class_id FROM dtb_class WHERE name = ?”, array($arrList[‘class_name’]));
$classcategory_id2 = $objQuery->getOne(“SELECT classcategory_id FROM dtb_classcategory WHERE class_id =? AND name = ?”, array($class_id,$arrList[‘classcategory_name’]));
$where .= ” AND classcategory_id = ?”;
$arrval[] = $classcategory_id2;

$class_combination_id = $objQuery->getOne(“SELECT class_combination_id FROM dtb_class_combination WHERE “.$where, $arrval);
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id = ?”, array($arrList[‘product_id’], $class_combination_id));
}else{

foreach($class_combination_id as $val){
if($where == “”){
$where = “( class_combination_id = ?”;
}else{
$where .= ” OR class_combination_id = ?”;
}
$arrval[] = $val[‘class_combination_id’];
}
$where .= ” )”;

$where .= ” AND product_id = ?”;
$arrval[] = $arrList[‘product_id’];
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE “.$where, $arrval);
}

//規格無い場合
}else{
$product_class_id = $objQuery->getOne(“SELECT product_class_id FROM dtb_products_class WHERE product_id = ? AND class_combination_id IS NULL”, array($arrList[‘product_id’]));
}

return $product_class_id;
}
[/php]

兼行したらアップロードして再度移行を実行します。
ここで注意点ですが、移行が途中で終わった場合、すでに一度実行した場合などは、ディレクトリにキャッシュが残っていた記憶があります。
その場合はディレクトリにあるキャッシュデータを削除しないと修正ファイルが上手く反映されなかったような気がします。

以上でデータのインポートはエラーが出ることなく終了できました。
ただインポート終了後のレイアウトが崩れていたり、どうも全てが上手く動いたとは言いがたいです。

そう思っていた矢先、サイトへアクセスするとカテゴリー部分がどうもおかしい!?
どうもカテゴリーのトータル商品数などが上手く移行できていない様子です。
SQLをたたいてなど記事を確認しましたが、商品をテスト登録するか、もしくは登録してある商品を編集、保存でも正しい数が表示されるようになりました。

また以下のブログにも似たような作業で移行が完了している方がいましたので、こちらもご参考になってみて下さい。
http://ryunac.blog135.fc2.com/blog-entry-38.html

作業はバックアップをとって、自己責任でお願いします。

今回はうる覚えの部分も多いです。
間違っている部分や簡単に出来る方法などありましたらぜひコメント下さい。
お願いいたします m(_ _)m