
お世話になっております。
URLに動的に引数を渡したいのですが、効率のよい方法が思いつきません。
<a href="/?1=1<?($id)?'&id='.$id:'')?><?($page>0)?'&page='.$page+1:'')?>&sort=created">最新順</a>
<a href="/?1=1<?($id)?'&id='.$id:'')?><?($page>0)?'&page='.$page+1:'')?>&sort=popular">人気順</a>
<a href="/?1=1<?($id)?'&id='.$id:'')?><?($page>0)?'&page='.$page+1:'')?>&sort=comment">コメント順</a>
このように見づらいコードになってしまいます。
みなさんはどのような方法で解決されているでしょうか?
No.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'))?>
と、適当にでっちあげてみましたが、いかがでしょう。
No.3
- 回答日時:
とりあえず関数にまとめちゃうとか・・・
<?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";
?>
この仕様ってページが毎回インクリメントされちゃいますがほんとにいいのでしょうか?
この回答への補足
ありがとうございます。
こちらの方法もいい方法ではないかと考えました。
ただ要素が多くなるとかなり見づらいきがします。
あと↓みたいな関数があるので自作しないでも行けます。
<?=http_build_query(array("sort"=>"created"))?>
No.2
- 回答日時:
あ~、なるほどね。
最後の括弧が余計なのね。と気がついた所で俺なら とりあえず、こう書きます。<?
$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>
No.1
- 回答日時:
んー。
。。???俺が無知なだけだと思うのですが、これって、PHPのソースとして 成立してるんでしょうか??
三項演算子を使ってるのだとは思いますが、試しに、<?($id)?'&id='.$id:'')?> だけ実行したら パースエラー出ました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHP ページング データベース 1 2022/06/16 10:30
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
折りたたみタグ 他を閉じる(...
-
プルダウンメニュ 展開時にずら...
-
テキストボックスに入力された...
-
ホームページ(デフォルトペー...
-
ランダムにメッセージを表示さ...
-
折たたみメニューの表示・非表示
-
特定のものにだけスクリプトを...
-
javascriptのアラートを画面の...
-
VBAのことについて教えてくださ...
-
php select SQL文
-
プリペアードステートメント
-
IEでkamome slideshow
-
IEだけで動くツリー表示
-
文字列より<・・・>を削除す...
-
this の渡し方
-
URLに引数を渡す良い方法
-
mysqlのINSERT文の重複回避の条...
-
「ポタン」で表示・非表示
-
よろしくお願い致します。
-
Java Scriptのカウントダウン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
-
IFRAMEの表示/非表示を切り替え...
-
removeEventListenerについて
-
背景色を透明化
-
createElementで作成した要素を...
-
javascriptでpostした値が取得...
-
読み込んだQRコードをフォーム...
-
iframe内のリンクが飛ばないの...
-
jQueryでクリックされた要素のi...
-
ダブルクォーテーションが消え...
-
<div ~ </div> で囲まれたテキ...
-
【HP作成】クリックすると下...
-
<Div>の中の要素の数を調べる
-
jQueryで特定id以外の下にある...
-
VBScript+IEのチェックボック...
-
removeAttribute()メソッドで削...
-
折りたたみ部分にアンカーでリ...
-
onclickを利用した伸縮メニュー...
-
背景色を一定時間ごとにランダ...
おすすめ情報