バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

その他

新規スレッドを追加する

スレッド表示 | 古いものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hatarakuwe
投稿日時: 2010/3/11 11:16
対応状況: −−−
半人前
登録日: 2008/11/4
居住地: 沖縄県
投稿: 26
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
こんにちは。hatarakuwebと申します。

ちょうど、CMS機能強化としてコンテンツページの動的生成機能を実装していて、
同様の問題に悩んでおりましたが、
このスレッドのmmmmmさんの改善策にてとりあえず対応できました。

大変参考になりました。ありがとうございました。
seasoft
投稿日時: 2010/2/26 22:56
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
> せっかくNet_URL使ってるのですから、
> 自力で'?a='.urlencode($a).'&b='.urlencode($b)とか
> 書かずに済ませられるのであればそれにこしたことはないんじゃないかと個人的には思います。

排他的なものでは無いと思うので、mmmmm 様が冒頭で書かれているソースで生成する内容を追加パラメータ($variable)の内容で追加すれば良いと思いますよ。

少なくとも、既存の HTTP リクエストのパラメータ有無によって動作が変わってしまう仕様は良くないですね。


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

nanasess
投稿日時: 2010/2/26 22:20
対応状況: −−−
登録日: 2006/9/9
居住地: 大阪
投稿: 2202
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
そうですね...

基本的な振舞いは, Java の HttpServletResponse#sendRedirect(String) に, できるだけ準拠したいと思いますので, ちょっと実装方法を考えてみます.
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)とか
書かずに済ませられるのであればそれにこしたことはないんじゃないかと個人的には思います。
自分で書いておいてなんですが。

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


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

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

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

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

確かに、その通りです。


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


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

nanasess
投稿日時: 2010/2/23 10:50
対応状況: −−−
登録日: 2006/9/9
居住地: 大阪
投稿: 2202
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'] に代入してしまうというのは無しですか?
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">  →発生する
seasoft
投稿日時: 2010/2/23 1:17
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
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
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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で動作している場合は挙動が少々違うみたいです。
(1) 2 »
スレッド表示 | 古いものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は75,051名です
総投稿数は104,353件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2085
6
yuh
1664
7
red
1535
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437
Copyright© EC-CUBE CO.,LTD. All Rights Reserved.