#!/usr/local/bin/php -q objQuery->begin(); // カテゴリ生成 $objData->createCategories(); // 規格生成 $objData->createClassData(); // 商品生成 $objData->createProducts(); // 商品と規格の関連づけ $objData->relateClass(); // 商品とカテゴリの関連づけ $objData->relateProductsCategories(); $objDb = new SC_Helper_DB_Ex(); $objDb->sfCountCategory(NULL, true); //$objData->objQuery->rollback(); //$objData->objQuery->commit(); $end = microtime_float(); print("データの生成が完了しました!\n"); printf("所要時間 %f 秒\n", $end - $start); // }}} // {{{ classes /** * EC-CUBE のデータを生成する */ class CreateEcCubeData { /** SC_Query インスタンス */ var $objQuery; /** 大カテゴリID の配列 */ var $arrCategory1 = array(); /** 中カテゴリID の配列 */ var $arrCategory2 = array(); /** 小カテゴリID の配列 */ var $arrCategory3 = array(); /** 規格1 */ var $arrClassCategory_id1 = array(); /** 規格2 */ var $arrClassCategory_id2 = array(); /** 削除するか */ var $delete = false; /** * コンストラクタ. */ function CreateEcCubeData() { $this->objQuery = new SC_Query(); } /** * カテゴリを生成する. * * 以下のように, ツリー状のカテゴリを生成する * * 大カテゴリ -- 中カテゴリ -- 小カテゴリ * | |- 小カテゴリ * | |- 小カテゴリ * | * |- 中カテゴリ -- 小カテゴリ * |- 小カテゴリ * |- 小カテゴリ * @return void */ function createCategories() { print("カテゴリを生成しています...\n"); if ($this->delete) { $this->objQuery->delete('dtb_category'); } $count = 0; // 全カテゴリ共通の値 $sqlval['creator_id'] = 2; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['del_flg'] = (string) '0'; // 大カテゴリを生成 for ($i = 0; $i < TOP_CATEGORIES_VOLUME; $i++) { $sqlval['category_name'] = sprintf("Category%d00", $i); $sqlval['parent_category_id'] = (string) '0'; $sqlval['level'] = 1; $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count; $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id'); $this->objQuery->insert('dtb_category', $sqlval); $this->arrCategory1[] = $sqlval['category_id']; $count++; print("."); // 中カテゴリを生成 for ($j = 0; $j < MIDDLE_CATEGORIES_VOLUME; $j++) { $sqlval['category_name'] = sprintf("Category%d%d0", $i, $j + MIDDLE_CATEGORIES_VOLUME); $sqlval['parent_category_id'] = (string) $sqlval['category_id']; $sqlval['level'] = 2; $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count; $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id'); $this->objQuery->insert('dtb_category', $sqlval); $this->arrCategory2[] = $sqlval['category_id']; $count++; print("."); // 小カテゴリを生成 for ($k = 0; $k < SMALL_CATEGORIES_VOLUME; $k++) { $sqlval['category_name'] = sprintf("Category%d%d%d", $i, $j, $k + SMALL_CATEGORIES_VOLUME); $sqlval['parent_category_id'] = (string) $sqlval['category_id']; $sqlval['level'] = 3; $sqlval['rank'] = $this->lfGetTotalCategoryrank() - $count; $sqlval['category_id'] = $this->objQuery->nextVal('dtb_category_category_id'); $this->objQuery->insert('dtb_category', $sqlval); $this->arrCategory3[] = $sqlval['category_id']; $count++; print("."); } } } print("\n"); } /** * 規格を生成する. * * @return void */ function createClassData() { // 規格データ生成 print("規格データを生成しています...\n"); if ($this->delete) { $this->objQuery->delete('dtb_class'); } $this->createClass('Size'); $this->createClass('Color'); print("\n"); // 規格分類データ生成 print("規格分類データを生成しています...\n"); if ($this->delete) { $this->objQuery->delete('dtb_classcategory'); } // 規格1 for ($i = 0; $i < CLASSCATEGORY1_VOLUME; $i++) { $this->createClassCategory($this->arrSize[$i], $this->arrclass_id[0], 'size'); } // 規格2 for ($i = 0; $i < CLASSCATEGORY2_VOLUME; $i++) { $this->createClassCategory($this->arrColor[$i], $this->arrclass_id[1], 'color'); } print("\n"); } /** * 商品と規格の関連づけを行う. * * @return void */ function relateClass() { print("商品と規格の関連づけを行います...\n"); if ($this->delete) { $this->objQuery->delete('dtb_products_class'); } foreach ($this->arrProduct_id as $product_id) { $this->createProductsClass($product_id); } print("\n"); } /** * 商品を生成する. * * @return void */ function createProducts() { print("商品を生成しています...\n"); if ($this->delete) { $this->objQuery->delete('dtb_products'); } for ($i = 0; $i < PRODUCTS_VOLUME; $i++) { $sqlval['product_id'] = $this->objQuery->nextval('dtb_products_product_id'); $sqlval['name'] = sprintf("商品%d", $i); $sqlval['status'] = 1; $sqlval['comment3'] = "コメント"; $sqlval['main_list_comment'] = "コメント"; $sqlval['main_list_image'] = "nabe130.jpg"; $sqlval['main_comment'] = "コメント"; $sqlval['main_image'] = "nabe260.jpg"; $sqlval['main_large_image'] = "nabe500.jpg"; $sqlval['sub_comment1'] = "コメント"; $sqlval['del_flg'] = (string) '0'; $sqlval['creator_id'] = 2; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['deliv_date_id'] = 2; $this->objQuery->insert('dtb_products', $sqlval); $this->arrProduct_id[] = $sqlval['product_id']; print("*"); } print("\n"); } /** * 規格を生成する. * * @param $class_name string 規格名 * @return void */ function createClass($class_name) { // class_idを取得 $sqlval['class_id'] = $this->objQuery->nextVal('dtb_class_class_id'); $sqlval['name'] = $class_name; $arrRaw['rank'] = "(SELECT x.rank FROM (SELECT CASE WHEN max(rank) + 1 IS NULL THEN 1 ELSE max(rank) + 1 END as rank FROM dtb_class WHERE del_flg = 0) as x)"; $sqlval['creator_id'] = 2; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['del_flg'] = (string) '0'; $this->objQuery->insert('dtb_class', $sqlval, $arrRaw); $this->arrclass_id[] = $sqlval['class_id']; print("+"); } /** * 規格分類を生成する. * * @param $classcategory_name string 規格名 * @return void */ function createClassCategory($classcategory_name, $class_id, $class_name) { $sqlval['classcategory_id'] = $this->objQuery->nextVal('dtb_classcategory_classcategory_id'); $sqlval['name'] = $classcategory_name; $sqlval['class_id'] = $class_id; $arrRaw['rank'] = sprintf("(SELECT x.rank FROM (SELECT CASE WHEN max(rank) + 1 IS NULL THEN 1 ELSE max(rank) + 1 END as rank FROM dtb_classcategory WHERE del_flg = 0 AND class_id = %d) as x)", $class_id); $sqlval['creator_id'] = 2; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['del_flg'] = (string) '0'; $this->objQuery->insert('dtb_classcategory', $sqlval, $arrRaw); switch ($class_name) { case 'size': $this->arrClassCategory_id1[] = $sqlval['classcategory_id']; break; case 'color': $this->arrClassCategory_id2[] = $sqlval['classcategory_id']; break; default: } print("+"); } /** * 商品規格を生成する. * * @param integer $product_id 商品ID * @return void */ function createProductsClass($product_id) { printf("商品ID %d の商品規格を生成しています...\n", $product_id); $sqlval['product_id'] = $product_id; $sqlval['product_type_id'] = 1; $sqlval['stock_unlimited'] = 1; $sqlval['price01'] = 1000; $sqlval['price02'] = 2000; $sqlval['point_rate'] = 10; $sqlval['creator_id'] = 2; $sqlval['create_date'] = 'CURRENT_TIMESTAMP'; $sqlval['update_date'] = 'CURRENT_TIMESTAMP'; $sqlval['del_flg'] = 0; foreach ($this->arrClassCategory_id1 as $classcategory_id1) { foreach ($this->arrClassCategory_id2 as $classcategory_id2) { $sqlval['product_class_id'] = $this->objQuery->nextVal('dtb_products_class_product_class_id'); $sqlval['classcategory_id1'] = $classcategory_id1; $sqlval['classcategory_id2'] = $classcategory_id2; $sqlval['product_code'] = 'CODE_' . $product_id . '_' . $classcategory_id1 . '_' . $classcategory_id2; $this->objQuery->insert('dtb_products_class', $sqlval); print("#"); } } // 規格無し用 $sqlval['product_class_id'] = $this->objQuery->nextVal('dtb_products_class_product_class_id'); $sqlval['classcategory_id1'] = 0; $sqlval['classcategory_id2'] = 0; $sqlval['product_code'] = 'CODE_' . $product_id; $sqlval['del_flg'] = 1; $this->objQuery->insert('dtb_products_class', $sqlval); print("\n"); } /** * 商品とカテゴリの関連づけを行う. * * @return void */ function relateProductsCategories() { print("商品とカテゴリの関連づけを行います...\n"); if ($this->delete) { $this->objQuery->delete('dtb_product_categories'); } $this->createProductsCategories($this->arrCategory1, "大カテゴリ"); $this->createProductsCategories($this->arrCategory2, "中カテゴリ"); $this->createProductsCategories($this->arrCategory3, "小カテゴリ"); } /** * 商品カテゴリを生成する. * * @param array $arrCategory_id カテゴリID の配列 * @return void */ function createProductsCategories($arrCategory_id, $category_name) { $count = 0; printf("%s の商品カテゴリを生成しています...\n", $category_name); foreach ($arrCategory_id as $category_id) { $sqlval['category_id'] = $category_id; foreach($this->arrProduct_id as $product_id) { $sqlval['product_id'] = $product_id; $sqlval['rank'] = $count; $this->objQuery->insert('dtb_product_categories', $sqlval); $count++; print("$"); } } print("\n"); } /** 規格1 */ var $arrSize = array("m11(29cm)" ,"m10 1/2(28.5cm)" ,"m10(28cm)" ,"m9 1/2(27.5cm)" ,"m9(27cm)" ,"m8 1/2(26.5cm)" ,"m8(26cm)" ,'43' ,'42' ,'41' ,"43(27.0cm~27.5cm)" ,"42(26.5cm~27.0cm)" ,"37(ladies 23.5~24cm)" ,"42(約27.5cm)" ,"41(約26.5cm)" ,'W36' ,'W34' ,'W32' ,'43' ,'42' ,'41' ,'m11' ,'m10' ,"m9.5" ,'m9' ,'m8' ,'FREE' ,'XS' ,'S' ,'M' ,'L' ,'XL' ,"25-27" ,"27-29" ,'W28' ,'W29' ,'W30' ,'W31' ,'W32' ,'W33' ,'W34' ,'W35' ,'W36' ,'4' ,'6' ,'8' ,'10' ,'12' ,'10cm' ,'12cm' ,'14cm' ,'16cm' ,'18cm' ,'20cm' ,'22cm' ,'24cm' ,'26cm' ,'28cm' ,'30cm' ,'32cm' ,'34cm' ,'36cm' ,'38cm' ,'40cm' ,'10g' ,'20g' ,'30g' ,'40g' ,'50g' ,'60g' ,'70g' ,'80g' ,'90g' ,'100g' ,'110g' ,'120g' ,'130g' ,'140g' ,'150g' ,'160g' ,'170g' ,'180g' ,'190g' ,'200g' ,'8inch' ,'10inch' ,'12inch' ,'14inch' ,'16inch' ,'18inch' ,'20inch' ,'22inch' ,'24inch' ,'26inch' ,'28inch' ,'30inch' ,'32inch' ,'34inch' ,'36inch' ,'38inch' ); /** 規格2 */ var $arrColor = array('white' ,'whitesmoke' ,'snow' ,'ghostwhite' ,'mintcream' ,'azure' ,'ivory' ,'floralwhite' ,'aliceblue' ,'lavenderblush' ,'seashell' ,'honeydew' ,'lightyellow' ,'oldlace' ,'cornsilk' ,'linen' ,'lemonchiffon' ,'lavender' ,'beige' ,'lightgoldenrodyellow' ,'mistyrose' ,'papayawhip' ,'antiquewhite' ,'lightcyan' ,'cyan' ,'aqua' ,'darkcyan' ,'teal' ,'darkslategray' ,'turquoise' ,'paleturquoise' ,'mediumturquoise' ,'aquamarine' ,'gainsboro' ,'lightgray' ,'silver' ,'darkgray' ,'gray' ,'dimgray' ,'black' ,'powderblue' ,'lightblue' ,'lightskyblue' ,'skyblue' ,'darkturquoise' ,'deepskyblue' ,'dodgerblue' ,'royalblue' ,'cornflowerblue' ,'cadetblue' ,'lightsteelblue' ,'steelblue' ,'lightslategray' ,'slategray' ,'blue' ,'mediumblue' ,'darkblue' ,'navy' ,'midnightblue' ,'lightsalmon' ,'darksalmon' ,'salmon' ,'tomato' ,'lightcoral' ,'coral' ,'crimson' ,'red' ,'mediumorchid' ,'mediumpurple' ,'mediumslateblue' ,'slateblue' ,'blueviolet' ,'darkviolet' ,'darkorchid' ,'darkslateblue' ,'darkorchid' ,'thistle' ,'plum' ,'violet' ,'magenta' ,'fuchsia' ,'darkmagenta' ,'purple' ,'palegreen' ,'lightgreen' ,'lime' ,'limegreen' ,'forestgreen' ,'green' ,'darkgreen' ,'greenyellow' ,'chartreuse' ,'lawngreen' ,'yellowgreen' ,'olivedrab' ,'darkolivegreen' ,'mediumaquamarine' ,'mediumspringgreen' ,'springgreen' ,'darkseagreen' ); /** * 総カテゴリ数を計算し、dtb_categoryに代入するrankに使う */ function lfGetTotalCategoryrank(){ $TotalCategoryrank = (TOP_CATEGORIES_VOLUME * MIDDLE_CATEGORIES_VOLUME * SMALL_CATEGORIES_VOLUME) + (MIDDLE_CATEGORIES_VOLUME * TOP_CATEGORIES_VOLUME) + TOP_CATEGORIES_VOLUME; return $TotalCategoryrank; } } /** PHP4対応のための microtime 関数 */ function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } ?>