- 締切済み
phpで大量のhtmlを任意の順番で表示させたいの
今phpを勉強を始めて2ヶ月くらいです。 表示させたいhtmlが500個以上あります。 その500個を任意の順番で並び替えて全て表示させたいと考えています。 (任意とはラジオボタンなどで条件を選びフォームで送って・・ということです。一つ一つのhtmlがdivなどで区切られていると考えてください) メモ帳にhtmlを記載して、それぞれ番号を割り振って、その番号を元にphpで並び替えさせ、foreachで回して全部表示させる・・ここまでは完成させました。ただhtmlをどう保存するのかがよく分かりません。(一つ一つが結構長いhtmlプログラムですし・・) 今はメモ帳にhtmlを記載し、phpで表示させる際にこのメモ帳を 指定しているのですが、メモ帳を何百個も作るのは無理ですし、普通htmlの保存はどのように するのでしょうか? どういった方法があるかアドバイスもらえるとうれしいです。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
ブログシステムのようなものを作りたいということでしょうか。 方法としては、その1~500まであるPHPファイル(内容はテーブルタグの1つの記事、ってことですよね) とは別に、ファイルの番号に連動する形のタグを列挙したCSVファイルでも作ってみてはいかがでしょう。 ■tags.csv (番号),(季節),(日時),(場所)だとして 1,春,20130909,北海道 2,夏,20130801,東京 3,冬,20121010,長野 ・・・・ みたいに。 で、絞込フォームで、該当の記事を絞り込むとして、表示は10件表示ってことなんでしょうか。 <?php $data = file('tags.csv'); //file関数で1行毎に配列にする形で開く。 $result = array(); //結果取得用の配列 foreach($data as $datum){ $datum = rtrim($datum); //改行くっついてくるので改行を削除 list($no, $season, $date, $place) = explode(',', $datum); //「,」で文字列をバラバラにしてlist内にある変数にいれる。 //POSTされた絞り込み種別によって振り分けをしながら、 //適合する記事の内容のみ$resultへ代入していく if($_POST['sh_season'] == $season){ $result[] = array($no, $season, $date, $place); } } //で最終的に、絞り込みの並べ替えを昇順/降順でどのキーでそうするのかをチェックの上、 //usort関数あたりで任意の並び順で並べ替える。 if($_POST['st_date'] == 'desc'){ //例えば何か日付を降順に、とかだったとして、 usort($result, 'date_sort'); } //並べ替えたら上から10件とか適当に表示 foreach($result as $item){ echo file_get_contents($item[0] . ".php"); //配列の先頭の番号が記事のファイル名に連動。 } //$resultの日付を降順に並べ替える関数 function date_sort($a, $b){ if($a[2] == $b[2]){ return 0; } if($a[2] > $b[2]){ return -1; } return 1; } かなりざっくり書くとこんなかんじでしょうか。 ただ、全部台無しにする話ですが、データベースを勉強されたほうが、建設的です。 データベース使えば、これらの実装がかなりスッキリ書けます。
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
> htmlを表示させるだけならphp直接記入すればいいと思いますが、 > それぞれのhtmlに番号を振ってその番号を元に並び替えプログラムを作りましたので・・。 複数のhtmlファイルを同時に出力するのも、phpで直接かけますよ。 その都度htmlファイルをfile_get_contents()で読み込む なりして、出力すればいいだけなので。 サーバ側に、500個以上のhtmlファイルが事前に用意されているわけではないのですか? なんだか、今あなたが実装した方法について、あまりイメージが湧かないです・・・。
- agunuz
- ベストアンサー率65% (288/438)
>今はメモ帳にhtmlを記載し、phpで表示させる際にこのメモ帳を >指定しているのですが 一般的には「メモ帳」というのは(Windows標準の)アプリケーションソフトの名前です。テキストを保存したのであれば、それは「テキストファイル」です。 >foreachで回して全部表示させる・・ここまでは完成させました。ただhtmlを >どう保存するのかがよく分かりません。 普通は「保存しません」。何度アクセスがあってもforeachで回して表示させます。foreachで回して表示すべきケースなのでそう書くのです。保存する必要があるのなら、ローカルでテキストファイルを結合させてアップロードすべきです。 まぁphpスクリプトで(foreachで回して)表示させた内容をブラウザ側で保存して使ってもいいですけどね(別途アップロードするのは一緒)。 #出力制御でファイルへの書き出しも出来なくはないですが、 #どうも「それ以前」の問題のように思います(汗
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
なんかよくわかりませんが、htmlを表示させたいのに、 なんで保存する必要があるのでしょうか? すでに500個以上のhtmlファイルが存在するので、 PHPで複数のhtmlファイルを読み込み、それを連続して 出力させる、というように解釈しましたが、間違ってますか?
補足
PHPで複数のhtmlファイルを読み込み、それを連続して 出力させる その通りです。もう少し正確に言うと任意の順番で連続して表示したいと考えています。 htmlを表示させるだけならphp直接記入すればいいと思いますが、それぞれのhtmlに番号を振ってその番号を元に並び替えプログラムを作りましたので・・。 (日付順、季節順などで表示順を任意に並び替えます)
補足
>>複数のhtmlファイルを同時に出力するのも、phpで直接かけますよ。 その都度htmlファイルをfile_get_contents()で読み込む なりして、出力すればいいだけなので。 とりあえずは希望通りの結果は出たのですが、素人目に見ても、このような表示方法はおかしいだろう・・というのが感想です。 行いたい事は、 例えばウェブサイトでテーブルで囲まれた文字があったとします。それが500個以上あると 考えてください。テーブルの内容は全て異なります。 ラジオボタンなどを使い、フォームで値を飛ばして、phpで並び変えてこの500個のテーブル ごと並び変えて表示させたい・・というのが希望です。(テーブルの内容は自分でとった写真とコメントです。それが季節順、日付順、場所などで絞り込めるようなサイトを作りたいのです) 自分で考えてやってみたのはまず、テーブルの中にコメントと画像を入れたhtmlファイルを10個作り、それぞれ1~10番まで名前を付けます。(拡張子はテキストでもphpでもhtmlでもなんでもいいですがとりあえず今回はphpとします) それで次に下記みたなのを10個作って、フォームでもらった値に従い、 foreachで回しながら削除や並び変えをして該当したものを全部表示します。 $abc["1"]["bb0"]="natu"; $abc["1"]["bb1"]="20130909"; $abc["1"]["bb2"]=file_get_contents(ファイル名/1.php) $abc["2"]["bb0"]="haru"; $abc["2"]["bb1"]="20110401"; $abc["2"]["bb2"]=file_get_contents(ファイル名/2.php) とりあえずこれで自分のやりたい事はできているのですが、まだ私はphpを初めて数十時間 でして、結果的に上記のやり方くらいしか思いつきませんでした。 テーブルが今後どんどん増えそうなのですが普通上記のやり方以外にどのような やり方があるのでしょうか?