バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

その他 > その他 > LC_Page::sendRedirect()の$urlにGETパラメータを渡せない

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mmmmm
投稿日時: 2010/2/17 22:14
対応状況: −−−
新米
登録日: 2010/2/3
居住地:
投稿: 7
LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
何処に書けばいいのかわからなかったのでここら辺に。


LC_Page::sendRedirect('hoge.php?a=1')
としてもリダイレクト後のページにGETパラメータを引き継ぐことができません。
結果として、このメソッドをheader()関数として用いることができません。
仕様なのかもしれませんが、少々困ったので解決策を提示しておきます。

function sendRedirect($url, $isMobile = false ) {

 $netURL = new Net_URL($url);

 //GETパラメータを保存しておく
  $queryStringArray=$netURL->querystring;

  //今までの処理…略

  //保存したGETパラメータを追加
   if(is_array($queryStringArray)){
    foreach($queryStringArray as $key=>$val){
     $netURL->addQueryString($key, $val);
    }
   }
  
 //リダイレクト
   header("Location: " . $netURL->getURL());
   exit();
}

ちなみに原因はNet_URL::addRawQueryString()がそれまでのパラメータを全削除するせいです。
明らかにバグだと思うのですが中の人はバグじゃないとか言っています。
http://pear.php.net/bugs/bug.php?id=3942
seasoft
投稿日時: 2010/2/21 2:42
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
貴重な情報をありがとうございます。

今のところの EC-CUBE の標準実装では問題が発生していないようですが、カスタマイズの際に影響を受けるケースも想定されそうですね。

とりあえず、せっかくの情報が埋もれてしまうといけませんので、まずはチケットとして記録しておきました。

http://svn.ec-cube.net/open_trac/ticket/608


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2010/2/21 22:53
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
この場合は, $_SERVER['QUERY_STRING'] に含まれない GET パラメータを渡したいということですかね?
ramrun
投稿日時: 2010/2/22 9:54
対応状況: −−−
仙人
登録日: 2006/11/3
居住地:
投稿: 789
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
現状は例えば

foo.tplで
 <a href="foo.php?a=1">bar</a>

foo.phpで
 LC_Page::sendRedirect('bar.php')

とすれば
 bar.php?a=1

となるんじゃないでしょうか?

テンプレート側でパラメータを書くか、コード内にパラメータを書くかの違いだとは思いますが...

これって相対パスでもOKにするっていうことじゃないですよね?
PHPがCGIで動作している場合は挙動が少々違うみたいです。
seasoft
投稿日時: 2010/2/23 1:17
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
最新コミュニティ版で、
$this->sendRedirect($this->getLocation(URL_CART_TOP) . '?a=1');
を試しましたら、正常に動作しますね。

チケットは再現不能として、一旦クローズしました。
http://svn.ec-cube.net/open_trac/ticket/608#comment:1


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

mmmmm
投稿日時: 2010/2/23 8:26
対応状況: −−−
新米
登録日: 2010/2/3
居住地:
投稿: 7
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
>$_SERVER['QUERY_STRING'] に含まれない GET パラメータを渡したい

です。
私がこのメソッドに期待していた動作が
Symfonyの$this->redirect(array('module' => 'foo', 'action' => 'bar', 'hoge' => 'fuga'));や
CakePHPの$this->redirect('foo/bar/hoge/fuga');だったので、
任意の引数を渡せるものだと思っていました。
#転送前のリクエストパラメータが勝手に付加されるのも上記とは違いますがまあスルーで


>foo.tplで
> <a href="foo.php?a=1">bar</a>

今回、
if($foo){
 LC_Page::sendRedirect('bar.php?hoge=1');
}else{
 LC_Page::sendRedirect('bar.php?hoge=2');
}
みたいなことを行いたかったので実装時に困ったのです。


引数の数なんかを変更すると影響範囲が大きそうだったので今回は手っ取り早く修正しましたが、
一番いいのは
function sendRedirect($url, $isMobile = false, $variable=array() )
ではないかと思います。

>最新コミュニティ版で、
>$this->sendRedirect($this->getLocation(URL_CART_TOP) . '?a=1');
>を試しましたら、正常に動作しますね。

あれ?
ソース見る限り駄目っぽい気がするんだけどなあ…?

リダイレクトする前のリンクに一切クエリストリングが無いと
Net_URL::addRawQueryString()が走らないのでそのせい、とかではないでしょうか?
・<a href="a.php">    →発生しない
・<a href="a.php?a=1">  →発生する
nanasess
投稿日時: 2010/2/23 10:50
対応状況: −−−
登録日: 2006/9/9
居住地:
投稿: 2303
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
引用:

mmmmmさんは書きました:

>foo.tplで
> <a href="foo.php?a=1">bar</a>

今回、
if($foo){
LC_Page::sendRedirect('bar.php?hoge=1');
}else{
LC_Page::sendRedirect('bar.php?hoge=2');
}
みたいなことを行いたかったので実装時に困ったのです。


引数の数なんかを変更すると影響範囲が大きそうだったので今回は手っ取り早く修正しましたが、
一番いいのは
function sendRedirect($url, $isMobile = false, $variable=array() )
ではないかと思います。



渡したいパラメータを $_SERVER['QUERY_STRING'] に代入してしまうというのは無しですか?
seasoft
投稿日時: 2010/2/25 12:38
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
> リダイレクトする前のリンクに一切クエリストリングが無いと
> Net_URL::addRawQueryString()が走らないのでそのせい、とかではないでしょうか?
> ・<a href="a.php">    →発生しない
> ・<a href="a.php?a=1">  →発生する

仰っている意味が分かりました。

HTTP リクエスト時に、パラメータ(クエリーストリング)を渡しているかで、動作が変わるということですね。

確かに、その通りです。


個人的には、mmmmm 様が冒頭で書かれているソースでも、良いのかなという印象です。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

seasoft
投稿日時: 2010/2/25 12:43
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7365
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
とりあえず、チケットを差し戻しました。
http://svn.ec-cube.net/open_trac/ticket/608#comment:2


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

mmmmm
投稿日時: 2010/2/25 22:59
対応状況: −−−
新米
登録日: 2010/2/3
居住地:
投稿: 7
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
>渡したいパラメータを $_SERVER['QUERY_STRING'] に代入してしまうというのは無しですか?

まあ、今回の問題を解決するだけならそれで全然かまわないですが、
チュートリアルとかがどこかにあったとして、
「任意のGETパラメータつきでリダイレクトしたい場合、$_SERVER['QUERY_STRING']に代入してください」
とか書いてあったら私ならちょっと引きます。


>個人的には、mmmmm 様が冒頭で書かれているソースでも、良いのかなという印象です。

せっかくNet_URL使ってるのですから、
自力で'?a='.urlencode($a).'&b='.urlencode($b)とか
書かずに済ませられるのであればそれにこしたことはないんじゃないかと個人的には思います。
自分で書いておいてなんですが。

#&amp;が&になってしまう…
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
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.