2011-07-21 93 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文件,但我不知道如何做到這一點。有沒有辦法讓前兩行的php變成函數,然後用戶只需要調用函數?

回答

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

我沒有任何運氣與該代碼...我懷疑這是因爲我做了什麼,雖然...嗯 – codedude

+0

什麼是不工作? –

+0

我完全複製了你的代碼,現在我所得到的只是一個空白頁面。沒有顯示。 – codedude

2

通常使用兩層。

  • 數據庫訪問層:查詢函數接受任意查詢,驗證返回值,錯誤地記錄到文件,如果需要則會死掉。您可以創建單獨的函數來查詢+檢索數據(query_one_row(),query_dataset_as_array(),...)。

  • 數據模型層:爲每個主要查詢分開函數,每個查詢都調用較低層。例如:get_recent_posts(),

嘗試重寫@ Sascha的答案以使用這兩個圖層。

1

注意:我知道我沒有回答你的問題,但只是想給你一個提醒。

您可能想要分解代碼的不同擔憂。一方面是數據的呈現,另一方面是業務邏輯和持久層。看起來你在一個文件中編碼所有內容,這可能會使事情在未來變得複雜。嘗試使用像yii,zend框架或symfony2這樣的mvc。

此外,「或死」是一個很糟糕的做法。注意你是如何失去正確記錄錯誤並直接向用戶輸出錯誤的機會,而不是給他們一個很好的錯誤頁面看,也許會給你一些關於錯誤的反饋。

編輯:爲持久性層,你可以嘗試doctrine2

0

爲了提高一點就薩沙的回答上面,你可以這樣做......

<?php 

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

?> 

作品完全一樣,但有點更容易閱讀,imo。

+0

沒有任何運氣。也許我在這裏錯過了一些東西? – codedude

+0

很好,顯然,你仍然需要Sascha的getPosts()函數才能工作。你還有什麼其他問題?修復了 – KOGI

+0

問題。謝謝您的幫助 – codedude