バージョン選択

フォーラム

メニュー

オンライン状況

73 人のユーザが現在オンラインです。 (62 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 73
もっと...

サイト内検索

質問 > フロント機能 > 外部サイトよりpostして、カートセッションに情報を渡したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ndamon
投稿日時: 2015/3/4 15:13
対応状況: −−−
半人前
登録日: 2013/11/29
居住地:
投稿: 21
外部サイトよりpostして、カートセッションに情報を渡したい
-------------------------------------------------------------
[EC-CUBE] 2.13.3
[レンタルサーバ] さくらVPS
[PHP] 5.3.3
[データベース] MySQL 5.1.73
[WEBサーバ] Apache
-------------------------------------------------------------
お世話になります。
外部サイトより、商品一覧ページに情報をpostして、カート、
注文確認画面、DBへ登録までを行いたいと思っております。

商品一覧ページにpostされていることは確認できましたが、PHP初心者のため
商品詳細ページにさらにpostした内容を渡す方法が分かりません。

お手数お掛けいたしますが、ご助力くださいますよう、よろしくお願いいたします。


※商品一覧ページの「数量選択」、「カゴにいれる」機能は使用しません。
(コメントアウトで消す予定です)

※postされる内容は外部サイトで公開されているものですので
セキュリティー的な問題は考慮しません。

※カート内から商品を削除するとpostした内容が保持されないのは
諦めております。(保持出来たままに出来るならいいですが・・・)

外部サイトpost部
<script type="text/javascript">
function postForm(){
$('<form/>', {action: 'http://www.hoge-test.com/products/list.php?category_id=10', method: 'post'})
.append($('<input/>', {type: 'hidden', name: 'name', value: '山田太郎'}))
.append($('<input/>', {type: 'hidden', name: 'day', value: '20150226'}))
.append($('<input/>', {type: 'hidden', name: 'maker_name', value: '山下商店'}))
.appendTo(document.body)
.submit();
}
</script>
<a  onclick="postForm();"></a>


確認時コード
<!--{$smarty.post.name}-->
<!--{$smarty.post.day}-->
<!--{$smarty.post.maker_name}-->
yuh
投稿日時: 2015/3/4 15:57
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
LC_Page_Products_List_Ex

    function action(){
        parent::action();
        $this->OutPostSet();
    }
    function OutPostSet(){
        if($_POST['name']){
            $_SESSION['outpost']['name'] = htmlentities($_POST['name'], ENT_QUOTES, mb_internal_encoding());
        }
        if($_POST['day'] AND preg_match('/^[0-9]+$/',$_POST['day'])){
            $_SESSION['outpost']['day'] = $_POST['day'];
        }
        if($_POST['name']){
            $_SESSION['outpost']['maker_name'] = htmlentities($_POST['maker_name'], ENT_QUOTES, mb_internal_encoding());
        }
    }

こんな感じでデータを入れて、必要な所で_SESSION['outpost']から取り出せばいいと思います。
ndamon
投稿日時: 2015/3/5 12:41
対応状況: −−−
半人前
登録日: 2013/11/29
居住地:
投稿: 21
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
yuh様ご返信くださりありがとうございます。

LC_Page_Products_List_Exへの追加を行いました。
商品詳細ページのtplにテキストエリアを作成して

<!--{php}-->echo $_SESSION['outpost']['name'];<!--{/php}-->

を行いましたが、表示されなかったので、
$_SESSION['outpost']に格納されているか確認をするため
LC_Page_Products_List.phpのpublic function actionの最終行あたりに

echo '<pre>';
var_dump($_SESSION['outpost']);
echo '</pre>';

で確認しましたがnullの状態でした。
なにぶんPHPが初心者のため、基本的なことがあまりよく分かっておりません・・・

1.EC-CUBEではどこかでsession_start();の記述は必要ないのでしょうか?
記述する必要がある場合はどのファイルのどの部分になりますでしょうか?

2.[EC-CUBE 2.12.1] カート情報に任意のテキストを加えたい
カート情報に任意のテキストを加えたい / 受注データにカスタムデータを追加する方法

上記サイトを参考に、外部サイトからpostして商品一覧ページへ情報を渡す。
商品詳細ページへ外部データを渡し、カートセッションに渡し、DBのdtb_orderまで登録を行いたい。
(外部からpostした情報は購入確認画面にのみ表示出来ればよい。)

商品詳細ページにテキストエリアを設置してあり、$_SESSION['outpost']の内容を表示するのに
必要なコードはどのような記述になりますでしょうか?

3.上記参考サイトでは商品詳細ページのテキストエリアの内容をDBへ保存するのを目的としておりますが、
$_SESSION['outpost']に格納されてしまえば、shopping/confirm.phpで
いきなり取り出して表示も可能でしょうか?
(商品詳細ページのテキストエリアへの簡略が可能?)

お手数お掛けいたしますが、よろしくお願いいたします。
yuh
投稿日時: 2015/3/5 14:02
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
試しに組んでみたら動かなかったので修正しました。

LC_Page_Products_List_Ex

    function action(){
        parent::action();
        $this->OutPostSet();
    }
    function OutPostSet(){
        if($_POST['name']){
            $_SESSION['outpost']['name'] = htmlentities($_POST['name'], ENT_QUOTES, mb_internal_encoding());
        }
        if($_POST['day'] AND preg_match('/^[0-9]+$/',$_POST['day'])){
            $_SESSION['outpost']['day'] = $_POST['day'];
        }
        if($_POST['name']){
            $_SESSION['outpost']['maker_name'] = htmlentities($_POST['maker_name'], ENT_QUOTES, mb_internal_encoding());
        }
        if($_POST['name']){
            SC_Response_Ex::sendRedirect( HTTP_URL . "products/list.php?category_id=".$_GET['category_id'] );
            SC_Response_Ex::actionExit();
        }
    }

SC_Helper_Session_Ex

    public function isValidToken($is_unset = false)
    {
        // token の妥当性チェック
        $ret = $_REQUEST[TRANSACTION_ID_NAME] === $_SESSION[TRANSACTION_ID_NAME];

        if ($is_unset || $ret === false) {
            SC_Helper_Session_Ex::destroyToken();
        }
	//↓ここでリファラでチェック
        if($_SERVER['HTTP_REFERER'] == 'http://localhost/test.html'){
            SC_Helper_Session_Ex::destroyToken();
             SC_Helper_Session_Ex::createToken();
             return true;
        }
        return $ret;
    }


smarty上では
<!--{$smarty.session.outpost.name}-->
とかで取り出せると思います。

shopping/confirm.phpで取り出してDBに保存した後はそのSESSIONを削除する必要があると思います。



ndamon
投稿日時: 2015/3/5 18:32
対応状況: −−−
半人前
登録日: 2013/11/29
居住地:
投稿: 21
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
yuh様

ご返信くださりありがとうございます。

LC_Page_Products_List_Exへ修正された内容で書き込みました。

SC_Helper_Session_Exへも書き込みを行いましたが、エラーが出ていましたので
直接SC_Helper_Session.phpを編集しました。
下記内容で不正なページ移動のメッセージは表示されなくなりました。

		function isValidToken($is_unset = false) {
		// token の妥当性チェック
		//不正な移動になる場合の回避
		if ($_SERVER[HTTP_REFERER] == "http://www.hoge.com/test.html") {
		SC_Helper_Session_Ex::destroyToken();
		SC_Helper_Session_Ex::createToken();
		return true;
		}
		 
		$ret = $_REQUEST[TRANSACTION_ID_NAME] === $_SESSION[TRANSACTION_ID_NAME];
		 
		 
		if ($is_unset || $ret === false) {
		SC_Helper_Session_Ex::destroyToken();
		}
		return $ret;
		} 


上記を踏まえて、detail.tplに

<textarea>
<!--{$smarty.session.outpost.name}-->
</textarea>

を記載してみましたが表示が行われませんでした。

confirm.tplでも同様に下記を記載してみましたが、表示は行われませんでした。

<tr>
<th scope="row">hoge.comでの表示名</th>
<td><!--{$smarty.session.outpost.name}--></td>
</tr>


dumpの結果$_SESSION['name']の中身は空でした。

echo '<pre>';
var_dump($_SESSION['name']);
echo '</pre>';


他にも記載する箇所等ございますでしょうか?
ndamon
投稿日時: 2015/3/12 11:51
対応状況: −−−
半人前
登録日: 2013/11/29
居住地:
投稿: 21
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
お世話になります。
無事解決に至りましたので、ご報告いたします。
yuh様ありがとうございました。

次に悩まれる方のためにコードを記述しておきます。

LC_Page_Products_List_Ex.php

    function OutPostSet(){ 
        if($_POST['name']){
            $_SESSION['outpost']['namae'] = htmlentities($_POST['namae'], ENT_QUOTES, mb_internal_encoding());
        }
        if($_POST['day'] AND preg_match('/^[0-9]+$/',$_POST['day'])){
            $_SESSION['outpost']['day'] = $_POST['day'];
        }
        if($_POST['maker_name']){
            $_SESSION['outpost']['maker_name'] = htmlentities($_POST['maker_name'], ENT_QUOTES, mb_internal_encoding());
        }


SC_Helper_Session.php

		function isValidToken($is_unset = false) {
		// token の妥当性チェック
		//不正な移動になる場合の回避
		if ($_SERVER[HTTP_REFERER] == "http://hoge.com/test.html") {
		SC_Helper_Session_Ex::destroyToken();
		SC_Helper_Session_Ex::createToken();
		return true;
		}


SC_CartSession.php

    // カートへの商品追加
    public function addProduct($product_class_id, $quantity,$out1,$out2,$out3)
    {
        $objProduct = new SC_Product_Ex();
        $arrProduct = $objProduct->getProductsClass($product_class_id);
        $productTypeId = $arrProduct['product_type_id'];
        $find = false;
        $max = $this->getMax($productTypeId);
        for ($i = 0; $i <= $max; $i++) {
            if ($this->cartSession[$productTypeId][$i]['id'] == $product_class_id) {
                $val = $this->cartSession[$productTypeId][$i]['quantity'] + $quantity;
                if (strlen($val) <= INT_LEN) {
                    $this->cartSession[$productTypeId][$i]['quantity'] += $quantity;
                }
                $find = true;
            }
        }
        if (!$find) {
            $this->cartSession[$productTypeId][$max+1]['id'] = $product_class_id;
            $this->cartSession[$productTypeId][$max+1]['quantity'] = $quantity;
            $this->cartSession[$productTypeId][$max+1]['cart_no'] = $this->getNextCartID($productTypeId);
//追加
$this->cartSession[$productTypeId][$max+1]['namae'] = $out1;
$this->cartSession[$productTypeId][$max+1]['day'] = $out2;
$this->cartSession[$productTypeId][$max+1]['maker_name'] = $out3;
        }
    }

    public function adjustSessionProductsClass(&$arrProductsClass)
    {
        $arrNecessaryItems = array(
            'product_id'          => true,
            'product_class_id'    => true,
            'name'                => true,
            'price02'             => true,
            'point_rate'          => true,
            'main_list_image'     => true,
            'main_image'          => true,
            'product_code'        => true,
            'stock'               => true,
            'stock_unlimited'     => true,
            'sale_limit'          => true,
            'class_name1'         => true,
            'classcategory_name1' => true,
            'class_name2'         => true,
            'classcategory_name2' => true,
//追加
	'namae' => true,
	'day' => true,
	'maker_name' => true,
        );

    public function calculate($productTypeId, &$objCustomer, $use_point = 0,
        $deliv_pref = '', $charge = 0, $discount = 0, $deliv_id = 0,
        $order_pref = 0, $order_country_id = 0,$out1,$out2,$out3
    ) {

        $results = array();
$results['namae']=$out1;
$results['day']=$out2;
$results['maker_name']=$out3;


yuh
投稿日時: 2015/3/12 11:56
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1818
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
細かい仕様がわからないんですが、一応そのコードだと
name、day、maker_nameが違う同じ商品を入れた場合、後に入れたデータは無視されるってことで大丈夫ですか?
一応その部分に対してもなんとかする方法はありますが。
ndamon
投稿日時: 2015/3/12 12:13
対応状況: −−−
半人前
登録日: 2013/11/29
居住地:
投稿: 21
Re: 外部サイトよりpostして、カートセッションに情報を渡したい
yuh様

この度はお世話になりました。

>>name、day、maker_nameが違う同じ商品を入れた場合、後に入れたデータは無視されるってことで大丈夫ですか?
一応その部分に対してもなんとかする方法はありますが。

今現在の仕様では、POSTするデータは一度限りで、後からまたPOSTすることは
想定しておりませんので大丈夫だと思われます。
問題が出てきた場合にはまた、こちらでご質問させていただくかもしれませんが(笑)

またその際にはよろしくお願いいたします。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,303名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.