[Tep-j-general] Re: 商品ごとに配送方法を限定するには? (長文)

Back to archive index

Seiji Sogabe sogab****@alles*****
2005年 4月 17日 (日) 21:12:55 JST


こんにちは、曽我部です。

Margy Mutoh wrote:
> 悩んでいるのは、
> 
> 1)どこで(class/shopping_cart.phpなのかcatalog/shopping_cart.php
> なのか order_details.phpなのか)温度判別をさせて、

classes/shopping_cart.phpのget_products()で、カートに表示する商品の
情報を取得しているので、function get_products()の

$products_price = $products['products_price'];
の後くらいに、

$model = $products['products_model'];

// 商品の配送温度と画像を取得
if (preg_match('/.+-C$/', $model)) {
  $delivery_temperature = '冷蔵';
  $delivery_temperature_image = 'temp_chl.gif';
} elseif (preg_match('/.+-F$/', $model)) {
  $delivery_temperature = '冷凍';
  $delivery_temperature_image = 'temp_frz.gif';
} else {
  $delivery_temperature = '常温';
  $delivery_temperature_image = 'temp_nrm.gif';
}

として、

$products_array[] = array('id' => $products_id,

のあとに、
                          'delivery_temperature' => $delivery_temperature,
                          'delivery_temperature_image' => $delivery_temperature_image,

を追加します。

すると、catalog/shopping_cart.phpの61行目の

 $products = $cart->get_products();

で、配送温度とその画像を含む商品の情報を取得できます。

実際には、カートの商品情報はorder_details.phpで表示していますので、

modules/order_details.phpの25行目くらいに、カートのヘッダを表示するコードを追加します。

  echo '    <td align="center" class="tableHeading">' . TABLE_HEADING_QUANTITY . '</td>' . "\n";
  // 以下を追加
  if (strstr($PHP_SELF, FILENAME_SHOPPING_CART)) {
    $colspan++;
    echo '    <td class="tableHeading">配送温度</td>' . "\n";
  }

60行目位(// Modelの前)に、配送温度の画像を表示するコードを追加します。

    if (strstr($PHP_SELF, FILENAME_SHOPPING_CART)) {
      echo '    <td valign="top" class="main">' .
           tep_image(DIR_WS_IMAGES . $products[$i]['delivery_temperature_image'],
                     $products[$i]['delivery_temperature'],
                     画像の幅,
                     画像の高さ) . '</td>';
    }

画像をcatalog/imagesにおけば、うまくいくと思います。検証はしていないのですが、同じような事例を
さきほど試しましたので、大丈夫だと思います。

追加したget_delivery_temperature()と重複しているのが無駄ですが、とりあえずということで。

> (コードを一見して「ふむふむ、ここでこういう処理をして、こっちで
> こうさせてるのね」と、わかるほどにはスキルがありません…f(-_-;))

最近は、PHPの世界でもロジックとビュー(HTMLイメージ)をわけて実装する手法(MVC)が
はやっていますが、osCommerceは昔からの手法をとっていますので、
かなりわかりにくい構造になっています。
私も断片的なことしかわからないので、画面遷移を確認しながらソースを追っています。

> catalogのルートにあるファイルと、class/にあるファイルと、modules/
> にあるファイルと…それぞれ役割分担があると思うのですが、いま一つ
> 把握しきれていないので、コードの意味が読めないのだと思います。

大雑把にいうと、

catalog/*.php ... ユーザがアクセスするコード(URLに表示される)
catalog/includes/modules/*.php ... 上記のPHPの共通部分とかいろいろ
catalog/includes/classes/*.php ... オブジェクト(ロジック)

といったかんじですが、何となく整理されていないような気もします。


では。
-- 
sogab****@alles*****




Tep-j-general メーリングリストの案内
Back to archive index