忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/26 02:10 |
EC-CUBE カテゴリ登録CSVでカテゴリを更新
デフォルトの状態から、
カテゴリID,カテゴリ名,親カテゴリID
1,親カテゴリ,
2,子カテゴリ1,1
3,子カテゴリ2,1

というCSVをアップすると、これまでの順序関係は壊れてしまうのですがとりあえずアップはできます。

一方、現在までのカテゴリを壊したくないので新しく追加しようと、
カテゴリID,カテゴリ名,親カテゴリID
1,親カテゴリ,
21,子カテゴリ1,1
22,子カテゴリ2,1

というCSVをアップしても何故か登録できません。
ログをよく見るとUPDATEとか書いてあります。

カテゴリはdtb_categoryに保存されますが、そこにcategory_id=21とかのものが存在しなくてもUPDATEになってしまいます。

中を見てみると、カテゴリIDのカラムに何か書いてあればUPDATE、何もなければINSERTになっていました。
/data/class/pages/admin/products/LC_Page_Admin_Products_UploadCSVCategory.php
LC_Page_Admin_Products_UploadCSVCategory::lfRegistProduct()で定義されています。

1
2
3
4
5
6
7
8
    if ($arrRet['category_id'] == 0) {
        $category_id = $objQuery->max("dtb_category", "category_id") + 1;
        $sqlval['category_id'] = $category_id;
        $update = false;
    } else {
        $sqlval['category_id'] = $arrRet['category_id'];
        $update = true;
    }

元々ここらへんはカテゴリ管理から手動登録→CSVをダウンロード→そのCSVを少々変更してアップロード、という流れを意図しているらしく、最初からカテゴリの一覧をCSVで作成してアップといった用途には向いていません。
どうしてもそこらへんを全部手動で管理したいんじゃ、任意のカテゴリIDを使用したいんじゃ、という場合はこのようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
    if($arrRet['category_id']){
         $sqlval['category_id'] = $arrRet['category_id'];
        //使用済だったらUPDATE、無ければINSERT
        if( $objQuery->count("dtb_category", "category_id = ?", 
            array($sqlval['category_id'])) > 0){
            $update = true;
        }else{
            $update = false;
        }
    }else{
        $sqlval['category_id'] = $objQuery->max("dtb_category", "category_id") + 1;
        $update = false;
    }

そのカテゴリIDが既に存在すればUPDATE、無ければINSERTとなります。
でも削除したくてCSVから消したしたはずのカテゴリがあったとしてもDBにはそのまま残り続けたりするので、最初にdtb_categoryをTRUNCATEしてから全部INSERTしたほうが手っ取り早いかもしれません。
まあ、dtb_category_countとかdtb_productsとかの関連を何も考えてないのでどこで不具合が出るかわかったものではありませんが。

ていうか、この、
$update = true;
とか作り的にもう少しどうにかならなかったのだろうか。


EC-CUBEの記事
PR


2010/03/29 22:32 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<==NOVEL PHILOSOMA== 08 | HOME | 買ったものリスト 2010/03/28>>
忍者ブログ[PR]