忍者ブログ
[PR]
×

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



2024/11/22 14:22 |
EC-CUBE 複数商品の一括登録その1
ブラウザバック対策だと思われますが、デフォルトの商品購入ボタンは<form>を使用しているにもかかわらずボタン自体は<a>で表示し、ボタンを押したらJavaScriptで検知して<form>に値を突っ込んでPOSTするという意味のわからない仕様になっています。
ソースを追うのが面倒なのですが、最終的にやってることはproduct_idに商品IDを突っ込んで送信です。

送信先での動きは2種類の経路があります。

まず商品詳細ページから。フォームの宛先は自分自身。
/html/productes/detail.php
/data/class_extends/page_extends/products/LC_Page_Products_Detail_Ex.php
/data/class/pages/products/LC_Page_Products_Detail.php
/data/class/pages/products/LC_Page.php


具体的な登録ロジックはLC_Page_Products_Detail::process()のSC_CartSessionを触っている部分です。

商品一覧、検索ページからでも購入することができますが、こちらもフォームの宛先は自分自身です。
/html/productes/list.php
/data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php
/data/class/pages/products/LC_Page_Products_List.php
/data/class/pages/products/LC_Page.php


購入ロジックはLC_Page_Products_List::process()のやはりSC_CartSessionの部分です。

どちらも、商品表示を行うロジック中で、引数product_idを見つけたら買い物籠に突っ込んでショッピングカートに飛ばす、ということを行っています。
普通籠に投入する専用のクラスとか作るだろ。
また、この両者、行うことは同じなのに書き方が全然違います。
なんでこんなことになってるんだよ。


見通しのいいように、ていうか既存のロジック触りたくないので、購入処理専用のロジックを作成することにします。

まず、購入ブロックを呼び出すロジックを作成します。
内容的に/html/productsディレクトリに作成するのが無難だろうので/html/products/buy.phpを作成。
中身はブロックの呼び出しと同じ作りです。

/html/products/buy.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
    /*
     * 商品を買い物籠に入れる専用のロジック
     * 買い物籠に入れた後はカートに移動します。
     */    
     
    //必要ファイルのインクルード、セッション呼び出しなど
        require_once('../require.php');
    
    //ロジックを実行
        require_once(CLASS_EX_PATH . 
          "page_extends/products/LC_Page_Products_Buy_Ex.php");
        $objPage = new LC_Page_Products_Buy_Ex();
        register_shutdown_function(array($objPage, "destroy"));
        $objPage->init();
        $objPage->process();

/data/class_extends/page_extends/products/LC_Page_Products_Buy_Ex.phpを作成。
1
2
3
4
5
6
7
<?php
    require_once(CLASS_PATH . 
        "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Buy.php");
    class LC_Page_Products_Buy_Ex extends LC_Page_Products_Buy {
        public function init()    { parent::init();   }
        public function process() { parent::process();}
        public function destroy() { parent::destroy();}
    }

/data/class/page/products/LC_Page_Products_Buy.phpを作成。
ここに実際のロジックを記入していきます。

なんと驚いたことに容量制限とやらで入りきらないので続く
PR


2010/03/08 21:45 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






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



<<EC-CUBE 複数商品の一括登録その2 | HOME | 買ったものリスト 2010/03/07>>
忍者ブログ[PR]