2011-07-21 22 views
1

私は今、私のCMSを改造しています。現在、私はフロントエンドのコードを最小限に抑えて、テーマを簡単にするよう努めています。最新の投稿を表示するには、これは私が使用しているコードです:PHPコードの簡略化

<?php 
    $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error()); 
    while($row = mysql_fetch_array($query)) : 
?> 
    <h3><a href="?id=<?php echo $row['id'] ?>"><?php echo $row['title'] ?></a></h3> 
<?php endwhile; ?> 

フロントエンドユーザーにとってこれを簡単にするにはどうすればよいですか?私はfunctions.phpファイルを使用することを考えていますが、その方法を正確にはわかりません。私は関数の最初の2つの行を関数にすることができますし、ユーザーは関数を呼び出す必要がある方法はありますか?ここで

答えて

1

は、あなたが使用できる機能です。

function getPosts() { 
    $query = mysql_query("SELECT * FROM posts order by id desc") or die(mysql_error()); 
    $result = array(); 
    while($row = mysql_fetch_object($query)) { 
     $result[] = $row; 
    } 
    return $result; 
} 

とテンプレートで:

<?php foreach(getPosts() as $post) : ?> 
<h3><a href="?id=<?php echo $post->id ?>"><?php echo $row->title ?></a></h3> 
<?php endforeach; ?> 
+0

私はそのコードに幸運を祈ることはありません...私は何かのためにだと思うが... hmm – codedude

+0

正確に何が動作していないのですか? –

+0

あなたのコードを正確にコピーしました。何も表示されません。あなたのforeachループに – codedude

2

通常は次の2つのレイヤーを使用しています。

  • データベースアクセス層:クエリ機能は、任意のクエリを受け入れ、戻り値を検証し、エラーが発生した場合にログに記録し、必要に応じて終了します。 1つのステップ(query_one_row()、query_dataset_as_array()、...)でデータを検索+検索するための個別の関数を作成することができます。

  • データモデルレイヤー:それぞれが下位レイヤーを呼び出す主要なクエリごとに機能を分離します。例:get_recent_posts()、

これらの2つの層を使用するための@ Saschaの答えを書き直してみてください。

1

注:私はあなたの質問に答えていないと知っていますが、あなたに頭を上げたいと思っていました。

コードのさまざまな問題を分割したい場合があります。一方では、データのレンダリングが行われ、他方では、ビジネスロジックおよび持続層がレンダリングされる。 1つのファイルですべてをコーディングしているように見えますが、これは将来複雑な問題になる可能性があります。 yii、zend framework、symfony2のようなmvcを使ってみてください。

また、「またはdie」はかなり悪い習慣です。どのように正しくエラーを記録して、ユーザーにエラーを直接出力するのかを気にしてください。エラーのページを見て、エラーに関するフィードバックをお寄せください。

編集:永続性層のために、あなたはこれを行うことができ、上記のサシャの答えに少し改善するため

0

をdoctrine2試みることができる...

<?php 

foreach(getPosts() as $post) 
{ 
    printf('<h3><a href="?id=%d">%s</a></h3>', $post->id, $row->title); 
} 

?> 

まったく同じ作品が、少し読めるようになりました。

+0

はそれと運がない編集しました。多分私はここに何かを見逃しているのだろうか – codedude

+0

もちろん、明らかにSaschaのgetPosts()関数が必要です。他にどんな問題がありますか? – KOGI

+0

問題が修正されました。助けてくれてありがとう – codedude