Seiji Sogabe
sogab****@alles*****
2005年 4月 13日 (水) 09:00:22 JST
こんにちは、曽我部です。 長文です。 反応がないようなので、とりあえず動くものを作ってみました。(2.1MS1j R6aベース) たたくなり、煮るなりしてください。 仕様として、 1. 商品のモデルにクールか常温か判別する文字列を入れる。 クール便: XXXXX-C 常温: -Cがつかない ^^ 2. 配送方法として計算表による料金(table.php)を使用 3. クールと常温が混在していたら、エラーメッセージを出して、 計算表による料金を使用不可にする 4. '計算表による料金'の下に、'クール便'か'常温便'か表示する。 4. クールと常温で、別の計算表をもつ。それ以外の設定は共有する。 といったようなものです。 常温便とクール便の送料を別々に計算することもできますが、 別々に表示する方法が思いつかなかったので、例Bに近いものにしました。 ・メッセージを埋め込んでいる ・冗長 といったところがありますので、そのへんは修正が必要です。 添付しようと思いましたが、添付はあまり使われていないようなので、 長いですが、以下に記述します。メールをエクスポートでもしてテキストで 見たほうがいいと思います。 catalog/includes/classes/shopping_cart.phpと catalog/includes/modules/shipping/table.phpをいじります。 shopping_cart.phpは以下のfunctionを適当な位置に追加します。 /* * ショッピングカートにある商品のモデルをチェックし、 * すべて常温の場合は、'normal'を * すべてクールの場合は、'cool'を * 常温とクールが混在する場合は、'mixed'を返します。 * 商品のモデルの最後に'-C'がつく場合はクール、それ以外は常温とします。 */ function get_delivery_temperature() { reset($this->contents); $isCool = FALSE; $isNormal = FALSE; while (list($products_id, ) = each($this->contents)) { $product_query = tep_db_query("select products_model from " . TABLE_PRODUCTS . " where products_id='" . tep_get_prid($products_id) . "'"); if ($product = tep_db_fetch_array($product_query)) { $model = $product['products_model']; // Cool or Normal ? if (preg_match('/.+-C$/', $model)) { $isCool = TRUE; } else { $isNormal = TRUE; } } } if ($isCool && $isNormal) { return 'mixed'; } elseif ($isCool) { return 'cool'; } else { return 'normal'; } table.phpは、3箇所いじります。 まずは、quoteを差し替えるか、コメントに書いてある修正内容に従います。 function quote($method = '') { global $order, $cart, $shipping_weight, $shipping_num_boxes; /* Add Start */ $delivery_temperature = $cart->get_delivery_temperature(); $text = ''; switch ($delivery_temperature) { case "normal": $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE_COST_NORMAL); $text = '常温便'; break; case "cool": $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE_COST_COOL); $text = 'クール便'; break; case "mixed": default: $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_TABLE_TEXT_TITLE); $this->quotes['error'] = '混在しています。'; return $this->quotes; } /* Add End */ if (MODULE_SHIPPING_TABLE_MODE == 'price') { $order_total = $cart->show_total(); } else { $order_total = $shipping_weight; } /* Delete Start $table_cost = split("[:,]" , MODULE_SHIPPING_TABLE_COST); Delete End */ $size = sizeof($table_cost); for ($i=0, $n=$size; $i<$n; $i+=2) { if ($order_total <= $table_cost[$i]) { $shipping = $table_cost[$i+1]; break; } } if (MODULE_SHIPPING_TABLE_MODE == 'weight') { $shipping = $shipping * $shipping_num_boxes; } $this->quotes = array('id' => $this->code, 'module' => MODULE_SHIPPING_TABLE_TEXT_TITLE, 'methods' => array(array('id' => $this->code, /* Delete Start 'title' => MODULE_SHIPPING_TABLE_TEXT_WAY, Delete End */ /* Add Start */ 'title' => $text, /* Add End */ 'cost' => $shipping + MODULE_SHIPPING_TABLE_HANDLING))); if ($this->tax_class > 0) { $this->quotes['tax'] = tep_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']); } if (tep_not_null($this->icon)) $this->quotes['icon'] = tep_image($this->icon, $this->title); return $this->quotes; } 2番目に、 install()に以下を追加します。 tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('配送料金の計算表(常温)', 'MODULE_SHIPPING_TABLE_COST_NORMAL', '2500:850,5000:550,10000:0', '購入金額に基づいた配送料金(常温)の設定. 例: 2500:850,5000:550, ... 2500 まで 850, 5000 まで 550, ...', '6', '0', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('配送料金の計算表(クール)', 'MODULE_SHIPPING_TABLE_COST_COOL', '2500:950,5000:650,10000:0', '購入金額に基づいた配送料金(クール)の設定. 例: 2500:950,5000:650, ... 2500 まで 950, 5000 まで 650, ...', '6', '0', now())"); もとの'MODULE_SHIPPING_TABLE_COST'はコメントアウトします。 3番目に、keys()を差し替えます。 function keys() { return array('MODULE_SHIPPING_TABLE_STATUS', 'MODULE_SHIPPING_TABLE_COST_NORMAL', 'MODULE_SHIPPING_TABLE_COST_COOL', 'MODULE_SHIPPING_TABLE_MODE', 'MODULE_SHIPPING_TABLE_HANDLING', 'MODULE_SHIPPING_TABLE_TAX_CLASS', 'MODULE_SHIPPING_TABLE_ZONE', 'MODULE_SHIPPING_TABLE_SORT_ORDER'); } 以上です。 Margy Mutoh wrote: > こんにちは。Margyです。いつもお世話様になります。 > > さて、うちのショップでは、常温品とクール(冷蔵)品、クール(冷凍)品、 > 3種類の配送方法の商品があり、原則、配送温度の違う商品は一つの > オーダーに混在させないようお願いしています。が、ユーザさんの側は > なかなかこちらの思うようにはオーダーしてくれず、ヘタをすると3種が > すべて一つのオーダーに入ってきます。 > すると、どれとどれを何便で、送料はいくら、という計算をし直さな > ければならず、面倒です。 > これからクールが増える時期になり、なんとかしたいと思っています。 > > 送料は、常温かクールかの2通り(クールであれば、冷凍でも冷蔵でも > 送料は同じ)です。 > できれば、常温とクールが混在した場合は、それぞれの送料が一度に > 計算されるように(例A)なれば理想なのですが、大工事になるようなら > (なりそうですね…(^_^;)、常温をベースに「○○は常温便では送れま > せん。常温品とは別にご注文ください」といったコメントを出す(例B) > だけでもありがたいのですが…。 > > (例A) > 商品a(常温)… 1000円 > 商品b(常温)… 1000円 > 商品c(クール)…1000円 > 送料(常温)… 500円 > 送料(クール)… 900円 > --------------------- > 合計 4400円 ←理想型 > > (例B) > 商品a(常温)… 1000円 > 商品b(常温)… 1000円 > 送料(常温)… 500円 > --------------------- > 合計 2500円 > > ※商品c常温便では…【以下略】 ←コメントを出す > > > どなたか同様のケースをうまく処理なさっていらっしゃる方、ありま > せんでしょうか。もしくは、何かいいアイデアがあればアドバイス > いただけたらありがたいです。 > > よろしくお願いいたします。m(_ _)m > > Margy Mutoh > > > > _______________________________________________ > Tep-j-general mailing list > Tep-j****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/tep-j-general > -- sogab****@alles*****