バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
smony
投稿日時: 2011/5/12 12:24
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
任意のhtmlサイトにECCUBEのカート機能を加えたい場合、
データの受け渡しはできたのですが、カート画面で「前のページへ戻る」ボタンが表示されません。

そして、
data/Smarty/templates/default(テンプレート名)/cart/index.tpl
の134行目辺りに、

<!--{if $tpl_prev_url != ""}-->
<p>
<a href="java script:history.back()"><img src="<!--{$TPL_DIR}-->img/cart/b_pageback.gif" width="150" height="30" alt="前のページへ戻る" onmouseover="this.src='<!--{$TPL_DIR}-->img/cart/b_pageback_on.gif'" onmouseout="this.src='<!--{$TPL_DIR}-->img/cart/b_pageback.gif'"></a>&nbsp;&nbsp;
<!--{/if}-->

という記述があるのですが、
htmlサイトからカート画面に飛ぶ際に、「$tpl_prev_url」にデータを受け渡すにはどうすれば良いのでしょうか。
宜しくお願い致します。


----------------

patapata
投稿日時: 2011/5/12 13:40
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
以前にも同様の話題がありますので、まずはそちらをご確認ください。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=7003&forum=10&viewmode=flat&order=ASC&start=0
smony
投稿日時: 2011/5/12 15:44
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
patapata様
類似トピックを教えて頂き有り難うございます。

以前に同様なトピックがあったのですね。
確認不足でした。すみませんでした。

ただそのスレのfukapさんの記述を参考にして、LC_Page_Product_Detail.php の185行目あたりに以下を記述したのですが、
_________________________________________________________________

$refererUrl = $_SERVER['HTTP_REFERER'];

//前回ページが以下を含む場合は追加しない
$arrNoSave = array(
"hogehoge.html",
"hogehoge1.html",
"hogehoge2.html"
);

$isNoSave = false;
foreach($arrNoSave as $val) {
if(ereg($val, $refererUrl )) {
$isNoSave = true;
break;
}
}

if(!$isNoSave){
$objCartSess->setPrevURL($_SERVER['REQUEST_URI']);
}
else{
$objCartSess->setPrevURL($refererUrl);
}

_________________________________________________________________


カートに飛ばすと以下のエラーが出てしまいます。
原因が分かる方いらっしゃいましたらご教授頂けないでしょうか。
宜しくお願い致します。

_________________________________________________________________

Warning: require_once(/virtual/ID/public_html/URL/cart/data//data/app_initial.php) [function.require-once]: failed to open stream: No such file or directory in /virtual/ID/public_html/URL/cart/data/require_safe.php on line 38

Fatal error: require_once() [function.require]: Failed opening required '/virtual/ID/public_html/URL/cart/data//data/app_initial.php' (include_path='.:/usr/local/lib/php') in /virtual/ID/public_html/URL/cart/data/require_safe.php on line 38
_________________________________________________________________


----------------

patapata
投稿日時: 2011/5/12 16:52
対応状況: −−−
仙人
登録日: 2010/7/7
居住地: 神奈川県
投稿: 502
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
エラーのことはひとまず、おいときまして・・・
参照先のfukap様と同様の処理にて、htmlページからカートに入れているのでしょうか?
そのコードはの元は、私が書いた拙い参考コードなので、汎用的ではありませんよ。

fukap様は
・htmlページ→商品詳細ページ→カート
という手順にてカートに投入していたので

商品詳細ページにて、
どこから飛んできたかを判別して、(ようするに・・・一つ前のURLを)Sessionにぶち込んでみれば一応できるよってだけのものです。


・htmlページ→カート
という手順なら、もう少し手前にある方法でいけるかもしれないですが・・・、駄目かもしれません。

-----
こんがらがってきたので、纏めると
[$tpl_prev_url]は、$_SESSION['ユニークID']['prev_url']の値ですよ。

history.back();
がいやなら、カートに入れる側の処理にあわせた、それ相応のカスタマイズが必要だということです。
smony
投稿日時: 2011/5/12 17:47
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
patapata様
ご返事頂き有り難うございます。

私の場合は「htmlページ→カート」という形で飛ばしていて、
以下のような形で飛ばしています。

<form name="form1" id="form1" method="post" action="URL/products/detail.php?product_id=1">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="1" />
<input type="text" name="quantity" value="1" size="3" maxlength="3" style="" />

難しいですね。。
どこをどういじって良いのやら・・・


----------------

smony
投稿日時: 2011/5/12 18:09
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
LC_Page_Product_Detail.php の185行目に挿入した記述の位置が以下のような感じになっているのですが、
もしかしたら記述を挿入している位置自体が間違っていますでしょうか。
fukap様とカートの入れ方は同じような気がするのですが。

ご教授頂けたら幸いです。
宜しくお願い致します。


if (!isset($_POST['mode'])) $_POST['mode'] = "";
$arrErr = array();

switch($_POST['mode']) {
case 'cart':

//挿入位置 始まり
$refererUrl = $_SERVER['HTTP_REFERER'];

//前回ページが以下を含む場合は追加しない
$arrNoSave = array(
"hogehoge.html",
"hogehoge1.html",
"hogehoge2.html"
);

$isNoSave = false;
foreach($arrNoSave as $val) {
if(ereg($val, $refererUrl )) {
$isNoSave = true;
break;
}
}

if(!$isNoSave){
$objCartSess->setPrevURL($_SERVER['REQUEST_URI']);
}
else{
$objCartSess->setPrevURL($refererUrl);
}
//挿入位置 終わり

// 入力値の変換
$this->objFormParam->convParam();
$arrErr = $this->lfCheckError();
if (count($arrErr) == 0) {
$objCartSess = new SC_CartSession();
$classcategory_id1 = $_POST['classcategory_id1'];
$classcategory_id2 = $_POST['classcategory_id2'];

if (!empty($_POST['gmo_oneclick'])) {
$objCartSess->delAllProducts();
}

// 規格1が設定されていない場合
if(!$this->tpl_classcat_find1) {
$classcategory_id1 = '0';
}

// 規格2が設定されていない場合
if(!$this->tpl_classcat_find2) {
$classcategory_id2 = '0';
}

$objCartSess->addProduct(array($_POST['product_id'], $classcategory_id1, $classcategory_id2), $this->objFormParam->getValue('quantity'));

if (!empty($_POST['gmo_oneclick'])) {
$objSiteSess = new SC_SiteSession;
$objSiteSess->setRegistFlag();
$objCartSess->saveCurrentCart($objSiteSess->getUniqId());

$this->sendRedirect($this->getLocation(
URL_DIR . 'user_data/gmopg_oneclick_confirm.php', array(), true));
exit;
}

$this->sendRedirect($this->getLocation(URL_CART_TOP));
exit;
}
break;

default:
break;
}


----------------

smony
投稿日時: 2011/5/12 22:06
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
どうやら以前、LC_Page_Product_Detail.phpに自分で何か記述を書き加えたみたく、オリジナルのLC_Page_Product_Detail.phpの185行目とずれていました。

オリジナルのLC_Page_Product_Detail.phpの185行目の位置に記述を書き加えたらエラーが出なくなったのですが、
「前のページに戻る」を押した場合にテンプレートで自動生成された商品詳細ページに戻ってしまいます。

どうも「HTTP_REFERER」が空になっているっぽいのですが、
どのようにしたら良いのでしょうか。

宜しくお願い致します。


----------------

smony
投稿日時: 2011/5/13 0:56
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
HTMLページに
<input type="hidden" name="current_url" value="<$MTEntryPermalink$>" />
を記述し、

LC_Page_Product_Detail.phpに
$objCartSess->setPrevURL($_POST['current_url']);
を記述したらHTMLページに戻れるようになりました。

ただし商品の数量が「0」であったり、サイズを選択せずに「カゴに入れる」ボタンをクリックすると、
テンプレートで自動生成された商品詳細ページに飛んでしまいます。

SC_CheckError.phpで値のエラー判定を行っているっぽいですが、
どこでエラーが出た場合に商品詳細ページに飛ばしているのか、ご存じの方いらっしゃいましたら教えて頂けないでしょうか。

宜しくお願い致します。


----------------

fukap
投稿日時: 2011/5/14 12:59
対応状況: −−−
仙人
登録日: 2009/7/7
居住地: 滋賀県
投稿: 907
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
私が以前困ったのと同じ問題で悩んでおられるようですね。
私の方はその後、案件の要求仕様変更により、任意のHTMLからカートに飛ばす処理が不要になってしまい、
その後もそういうケースに遭遇せず、今に至っています。
ですので、忘却の彼方・・という感じですが、以前取り組んだ問題でもあるのでコメントさせていただきます。

私も以下のようなコードを任意のHTMLに貼り付けて、カートに飛ばそうと考えました。
ここはsmony様も同じだと思います。

<form name="form1" id="form1" method="post" action="/products/detail.php?product_id=1">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="1" />
<input type="hidden" name="favorite_product_id" value="" />
<input type="text" size="5" name="quantity" class="box54" value="1" maxlength="16" style="" />
<input type="submit" value="カゴに入れる" />
</form>

当時の知識では、これでカートに直接処理を渡しているつもりでしたが、
よくよく見ると、<form action="/products/detail.php..."> になっているのですよね。
ですので、実は 任意のHTMLページ -> 商品詳細ページ -> カート という流れになっています。

data/class/pages/products/LC_Page_Products_Detail.php の処理を見ると、
162行目付近から $_POST['mode'] == 'cart' の場合の処理が書かれており、
入力値の変換等を行ったうえで、sendRedirect() でカート処理にリダイレクトを行っています。
ここで setPrevURL($_SERVER['REQUEST_URI']) によって、動的に生成された商品詳細ページのURLが記憶されてしまい、
任意のHTMLページに戻れない状態になっていました。

今ふと思うのは、苦労して任意のHTMLのURLをセッションに記憶させなくても、
$_SERVER['HTTP_REFERER'] を使えばなんとかならないかなと。

data/class/pages/products/LC_Page_Products_Detail.php の186行目付近 (EC-CUBE 2.4.4の場合)
$objCartSess->setPrevURL($_SERVER['REQUEST_URI']);
を、

$objCartSess->setPrevURL($_SERVER['HTTP_REFERER']);
に変更するというのはどうなのでしょうか。(420行目付近のモバイル処理でも同様に変更する必要があると思います。)

簡単にテストHTMLを作成しテストしてみましたが、
任意のHTML -> カート でも「前のページへ戻る」で、任意のHTMLに戻れましたし、
自動生成された商品一覧ページ -> 商品詳細ページ -> カート でも、商品詳細ページに戻れました。

変数を展開しても調べましたが、任意のHTML経由でカートに至った場合は、
任意のHTML -> 商品詳細ページ(ここでリファラがセット) -> カート という流れになりますので、
$tpl_prev_url には、任意のHTMLのURL がセットされます。

商品一覧ページ -> 商品詳細ページでカートに至った場合は、
実際には、商品一覧ページ -> 商品詳細ページ -> 商品詳細ページ(ここでリファラがセット) -> カート という流れになりますので、
$tpl_prev_url には、商品詳細ページのURL がセットされていました。

一抹の不安は、patapata様が参考スレッドで言われていた、
"$_SERVER['HTTP_REFERER']は、空っぽの場合もあるから"という言葉ですが、
モダンブラウザではほぼ対応されているという情報もあり、実用可能な範囲かなと思っています。

それと、今回は同ドメイン内での任意のHTMLとカートの連携を想定して考えましたので、
別ドメインの任意のHTMLから、EC-CUBEのカートに渡すのは、うまくいくかわかりません。

とりあえずこんな方法はどうでしょうか?
また問題等ありましたら、アドバイスいただければ幸いです。
smony
投稿日時: 2011/5/15 2:27
対応状況: −−−
常連
登録日: 2010/5/3
居住地:
投稿: 33
Re: 任意のHTMLサイトからカート画面に飛ばす場合の戻るボタンの表示
fukap様

丁寧に解説、また試運転して頂き有り難うございます。

LC_Page_Products_Detail.php の186行目のREQUEST_URIをHTTP_REFERERに変えて試してみたところ、
私の場合<a href="<!--{$tpl_prev_url}-->">の部分が<a href="">となって表示されてしまいました。
(同ドメインでの移動です)

Firefox3とIE8で使用したのですが、
私の場合$_SERVER['HTTP_REFERER']が空っぽなんですかね。。


----------------

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


 



ログイン


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

統計情報

総メンバー数は89,504名です
総投稿数は110,106件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1656
8
red
1570
9
mcontact
1307
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.