- ベストアンサー
URLに引数を渡す方法
- 効率的な方法でURLに引数を渡す方法を知りたいです。
- 現在のコードではURLの引数の指定が見づらくなってしまっています。
- 他の方法やベストプラクティスを教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
これは、HTMLのタグの中にPHPのタグを埋め込もうとするから見栄えが厳しくなるということであれば、 はなから、aタグを生成する関数を作れば良いのではないですか? <?php function a_href($title, $url, $id, $page=0, $options=array(), $attributes=array()){ $tag = '<a href="%s"%s>%s</a>'; if(!preg_match('/^[0-9]+$/', $page)){ $page = 0; } $page++; $page_and_id = array(); if($id) $page_and_id['id'] = $id; $page_and_id['page'] = $page; $options = array_merge($page_and_id, $options); $get_query = http_build_query($options, '', '&'); if(strpos($url, '?') !== false){ $get_query = '&' . $get_query; }else{ $get_query = '?' . $get_query; } $str_attr = ''; foreach($attributes as $attr=>$val){ $str_attr .= ' '.$attr.'="'.$val.'"'; } return sprintf($tag, $url.$get_query, $str_attr, $title); } ?> <?php echo a_href('最新順', '/?1=1', 1, 0, array('sort'=>'created'))?> <?php echo a_href('人気順', '/?1=1', 1, 0, array('sort'=>'popular'))?> <?php echo a_href('コメント順', '/?1=1', 1, 0, array('sort'=>'comment'))?> と、適当にでっちあげてみましたが、いかがでしょう。
その他の回答 (3)
- yambejp
- ベストアンサー率51% (3827/7415)
とりあえず関数にまとめちゃうとか・・・ <?PHP function setArgs($args = NULL){ $id=$_REQUEST["id"]; $pattern="/^[0-9a-z]+$/i"; if(preg_match($pattern,$id)) $args["id"]=$id; $page=$_REQUEST["page"]; if(!is_numeric($page)) $page=0; $args["page"]=$page +1; $str=""; foreach($args as $key=>$val){ if($str!="") $str.="&"; $str.=$key."=".$val; } if($str!="") $str="?".$str; return $str; } print "<a href=\"".setArgs(array("sort"=>"created"))."\">最新順</a><br>\n"; print "<a href=\"".setArgs(array("sort"=>"popular"))."\">人気順</a><br>\n"; print "<a href=\"".setArgs(array("sort"=>"comment"))."\">コメント順</a><br>\n"; ?> この仕様ってページが毎回インクリメントされちゃいますがほんとにいいのでしょうか?
- bm_hiro
- ベストアンサー率51% (200/388)
あ~、なるほどね。最後の括弧が余計なのね。と気がついた所で俺なら とりあえず、こう書きます。 <? $id02 = ($id) ? '&id=' . $id : ''; $page02 = ($page > 0) ? '&page=' . ($page + 1) : ''; $mix = $id02 . $page02; print<<<EOL <a href="/?sort=created{$mix}">最新順</a> <a href="/?sort=popular{$mix}">人気順</a> <a href="/?sort=comment{$mix}">コメント順</a> EOL; ?>
補足
文のミス指摘ありがとうございます。 私もbm_hiroさんがご教示いただいた方法が一番良いのではないかと思っておりますが、膨大なリンクがある場合、コントローラー(プログラム部分)がかなり見づらくなってしまいます。 例としてあげたものはソートリンクだけですが、ソートした要素へのリンクやトップへの戻るリンクにidやセッションIDをつけたい場合、もっといい方法はないものだろうかと思案しております。 $id02 = ($id) ? '&id=' . $id : ''; $page02 = ($page > 0) ? '&page=' . ($page + 1) : ''; $mix = $id02 . $page02; $pmix = $id02; <a href="/params/1<?=$pmix?>">ほげほげ</a> <a href="/<?=$pmix?>">TOPへ</a>
- bm_hiro
- ベストアンサー率51% (200/388)
んー。。。??? 俺が無知なだけだと思うのですが、これって、PHPのソースとして 成立してるんでしょうか?? 三項演算子を使ってるのだとは思いますが、試しに、<?($id)?'&id='.$id:'')?> だけ実行したら パースエラー出ました。
補足
ありがとうございます。 こちらの方法もいい方法ではないかと考えました。 ただ要素が多くなるとかなり見づらいきがします。 あと↓みたいな関数があるので自作しないでも行けます。 <?=http_build_query(array("sort"=>"created"))?>