« 2009年5月 | トップページ | 2009年7月 »

2009年6月

EC-CUBE 携帯からの注文確認メールにヘッダを付ける

携帯サイトから商品注文された際に、ユーザに自動で送られるメールの中にヘッダ・フッタが付かない、という現象が発生しました。

注文の際に自動で送られるメールのテンプレートIDは、携帯の場合は2です。(PCは1)

これは、マスター管理で自由に変更ができるのですが、実はやっちゃいけないことがわかりました。

というのは、商品注文のプログラム中で、テンプレートIDを固定で指定してしまっているからです。 びっくりですねぇ、怖いですねぇ。

で、さらに モバイル用のテンプレート中には ヘッダとフッタが記述されていませんので、

<!--{$tpl_header}-->

<!--{$tpl_footer}-->

を追加してみました。

ところが、テンプレート設定画面で設定した、モバイル用のヘッダ・フッタではなく、 PC用の受注確認メールに設定したヘッダ・フッタが付加されるんです (@_@;

で、原因を調べましたら・・・

/data/class/helper/SC_Helper_Mail.php

このファイル中の88行目付近に、ヘッダ・フッタを取得してくる関数があります。

$arrRet = $objQuery->select("subject, header, footer", "dtb_mailtemplate", $where, array('1'));

これって・・・ Where区がID1固定ですから PC用のヘッダ・フッタを取得してくるのは当たり前ですよね。。。

ということで、この行を以下のように変更しました。

$arrRet = $objQuery->select("subject, header, footer", "dtb_mailtemplate", $where, array($template_id));

これで、テンプレートIDに応じたヘッダ・フッタを取得してきてくれるようになりました。

HAPPY♪ です。

| | コメント (0) | トラックバック (0)

au端末でデータをPOSTできない!!

XHTMLで携帯サイトを記述してるけど、まだやっぱりキャリアごとに色々とあります。

PC,docomo,Softbankいずれもきちんと動作しているプログラムが、
auに限って動作いない。

受取るプログラムはPHPで記述してたんだけど、そのプログラムに到達していないようで、送信ボタンを押したとたんにブラウザ終了~ってなる。

HTMLのソースは↓

<?xml version="1.0" encoding="utf-8"?>
<-- 途中省略 -->

<form name="form1" method="post" action="*********.php">
<input type="hidden" name="xxx" value="$hoge" />
<div align="center">
<input type="submit" value="送 信" />
</div>
</form>
<--以下省略-->

ヘッダ情報とか、DOCTYPEとかいろいろ見てたけど、ハッと思ったのが
『Formタグのactionすら見えてない状態でSubmitされてるんじゃない?』

ということで、divタグを移動してみました。↓

<div align="center">
<form name="form1" method="post" action="*********.php">
<input type="hidden" name="xxx" value="$hoge" />
<input type="submit" value="送 信" />
</form>
</div>

う、動きました(^^)

実は前も formの中を hrタグで区切ったら、auだけ変な動きしてたことがあったのです。
formの中身はdivやらhrやら、意味合いとして区切りを持たせるタグを入れない方が無難かな。。。。

| | コメント (0) | トラックバック (0)

EC-CUBE 「この商品を買った人は、こんな商品も購入しています」

よく、アマゾンなんかでもあるパターン。
「この商品を買った人は、こんな商品も購入しています」

これをEC-CUBEでもやろうかな、と思ってソースを見ていると、なんだか用意されているような感じ!!!

でも、実際にテンプレート側に、 arrRelateProducts というのに格納されている名前やら価格やらを設定して表示してみると、あれあれ、自分と同じ商品が出てくるではないですかΣ(@ロ@

ということで、今回はクラスファイルに手を入れるのではなくて、
きちんとお作法どおり、拡張クラスの方で修正してみました。

今回はDBが MySQLでしたので、viewテーブルが作成されていないため、
allclsをベタで書いたので すごい長いSQL文になっちまってますが・・・

    function lfGetRelateProducts($tmp_id) {
        $objQuery = new SC_Query;
        //自動抽出
        $objQuery->setorder("random()");
        //表示件数の制限
        $objQuery->setlimit(RELATED_PRODUCTS_MAX);
  $temp_limit = RELATED_PRODUCTS_MAX;
        //検索条件
/*    ・・・・・・LC_Page_Products_Detail.phpと同じ記述はコメントアウト 
        $col = "name, main_list_image, price01_min, price02_min, price01_max, price02_max, point_rate";
        $from = "vw_products_allclass AS allcls ";
        $where = "del_flg = 0 AND status = 1 AND (stock_max <> 0 OR stock_max IS NULL) AND product_id = ? ";
        $arrval[] = $tmp_id;
*/
  $sql = "SELECT
  A.product_id,B.name,B.main_list_image,B.price01_min, B.price02_min, B.price01_max, B.price02_max, B.point_rate,
  B.stock_max, B.stock_unlimited_max,B.stock_min,B.stock_unlimited_min FROM `dtb_order_detail` as A
  inner join

   (SELECT T1.product_id,
           product_code_min,
           product_code_max,
           price01_min,
           price01_max,
           price02_min,
           price02_max,
           stock_min,
           stock_max,
           stock_unlimited_min,
           stock_unlimited_max,
           del_flg,
           status,
           name,
           comment1,
           comment2,
           comment3,
           main_list_comment,
           main_image,
           main_list_image,
           product_flag,
           deliv_date_id,
           sale_limit,
           point_rate,
           sale_unlimited,
           create_date,
           deliv_fee,
           rank
           ,(SELECT rank AS category_rank
               FROM dtb_category AS T4
              WHERE T1.category_id = T4.category_id) as category_rank
           ,(SELECT category_id AS sub_category_id
               FROM dtb_category T4
              WHERE T1.category_id = T4.category_id) as category_id
      FROM (SELECT T0.product_id,
                   T0.del_flg,
                   T0.status,
                   T0.name,
                   T0.comment1,
                   T0.comment2,
                   T0.comment3,
                   T0.main_list_comment,
                   T0.main_image,
                   T0.main_list_image,
                   T0.product_flag,
                   T0.deliv_date_id,
                   T0.sale_limit,
                   T0.point_rate,
                   T0.sale_unlimited,
                   T0.create_date,
                   T0.deliv_fee,
                   T00.category_id,
                   T00.rank
              FROM dtb_products AS T0
         LEFT JOIN dtb_product_categories AS T00
             USING (product_id)) AS T1
RIGHT JOIN (SELECT product_id as product_id_sub,
                   MIN(product_code) AS product_code_min,
                   MAX(product_code) AS product_code_max,
                   MIN(price01) AS price01_min,
                   MAX(price01) AS price01_max,
                   MIN(price02) AS price02_min,
                   MAX(price02) AS price02_max,
                   MIN(stock) AS stock_min,
                   MAX(stock) AS stock_max,
                   MIN(stock_unlimited) AS stock_unlimited_min,
                   MAX(stock_unlimited) AS stock_unlimited_max
              FROM dtb_products_class GROUP BY product_id) AS T2
                ON T1.product_id = T2.product_id_sub
            )
   as B on A.product_id = B.product_id and B.del_flg = '0' AND B.status = '1'
  AND (stock_max <> 0 OR stock_max IS NULL)
  WHERE order_id in
  (
  SELECT AA.order_id  From dtb_order_detail as AA WHERE
   AA.product_id = $tmp_id group by AA.order_id
  )
   AND A.product_id <> $tmp_id
  group by A.product_id ORDER BY rand() limit $temp_limit;";

        //結果の取得
//       $arrProducts = $objQuery->select($col, $from, $where, $arrval);
        $arrProducts = $objQuery->getall($sql);

        return $arrProducts;
    }

これを data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
のデストラクタの後にゴソッと追加。

ちょっと実行速度が気になりますが、それはまた後で。。。

| | コメント (0) | トラックバック (0)

JavaScriptのマウスストーカー XHTML編

JavaScript でマウスを追いかけるヤツを設置する依頼があった。

昔からあるよくあるヤツだし、NN6とIE対応になっていたし、ということでタカをくくってた。

普通にテスト用の簡単なページに貼り付けてた時は、確かにどのブラウザでも動いていたのに、
いざ本番用のページに設置したら、FF,Safari,IE6ともに動いていない。動くのはIE7のみ!!

ぐぐってみたら、
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'

HTMLの先頭にこの記述があると、うまく動かないという情報が見つかったのだけど、
この一文を外してしまうと IE6のデザインが崩れまくる。

そもそも、この一文がある意味を考えてみると、やはりJavaScriptの記述に
間違いがあるのでは、という気持ちが強くなって いろいろ試しました。

直した箇所は沢山あるのだけど、Firefoxの場合、位置の指定の時に
単位を付けないとダメ、というのが一番「そうだったのか~」と思えたので覚え書きです。

document.getElementById("xxxx").style.left = NX_POS +"px";
document.getElementById("xxxx").style.top = NY_POS +"px";

こんな感じ。

今は無事、動いております。

| | コメント (0) | トラックバック (0)

« 2009年5月 | トップページ | 2009年7月 »