私はphpにかなり慣れていないので、このコードをどのように改善するのか考えていました。私はそれが完璧ではないことを知っていますが、PHPで自分自身を改善しようとしているので、建設的な批判が奨励されています。私がお願いするのは、あなたがそれを改善する方法で答えるなら、あなたは答えを少し拡張し、なぜそれが良いのかを私に知らせて、私が改善の全体像をつかむことができるようにすることです。
public function displayArticle(){
//Check to see if we are getting the home page
if($_GET['page'] == 'home'){
//Display the results formatted
$content = "<article class=\"igpPost\">";
$content .= "<div class=\"igpPost-Divider\"></div>";
$content .= "<header>";
$content .= "<h3><a href=\"#\">Ready Up – StarCraft 2, LoL, and Dota 2 pros head to DreamHack Summer</a></h3>";
$content .= "<div class=\"igpPost-AuthTime\"><span>Posted By: </span><a href=\"#\">Cameron Lockhart</a> <span>at 07:44PM on June 15, 2012</span></div>";
$content .= "<div class=\"igpPost-AuthTime\"><span>Tags: </span><a href=\"#\">TAG HERE</a> ,<a href=\"#\">TAG HERE</a> ,<a href=\"#\">TAG HERE</a> ,<a href=\"#\">TAG HERE</a> ,<a href=\"#\">TAG HERE</a> ,<a href=\"#\">TAG HERE</a></div>";
$content .= "<div class=\"igpPost-Img\"><img src=\"images/news/DreamHack-Summer-2012-logo.jpg\"/></div>";
$content .= "</header>";
$content .= "<p>Did last week’s MLG Spring Championship leave you thirsting for more eSports? Then DreamHack Summer 2012 has you covered. With well-attended tournaments for StarCraft 2, League of Legends, and Dota 2, DreamHack should keep you busy throughout the weekend and into the work-week. It starts tomorrow at 11 AM Eastern, and continues through Monday, with the StarCraft 2 Grand Final scheduled for 5:15 PM Eastern.</p>";
$content .= "<footer class=\"igpPost-Footer\">";
$content .= "<div class=\"igpPost-ReadMore\">";
$content .= "<h1><a href=\"#\">Read More..</a></h1>";
$content .= " </div>";
$content .= "</footer>";
$content .= "</article>";
}
//If it is not the home page and it is a single article
if($_GET['article']){
//Display the article formatted
}
}
また、これは明らかに完成したスクリプトではありませんが、それを見ると、PHPにとって非常によく似ています。私はいくつかのチュートリアルを読みましたが、それらは正しく、優れたPHPを使用しているという間違った方向に私を送ってくれたと思います。
更新:より説明的な概要が得られるように、コードの一部を修正してみました。
$sql = "SELECT * FROM articles LIMIT $number";
$stmt = $pdo->query($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while($row = $stmt->fetch()){
//Display the results formatted
$content = "<article class=\"igpPost\">";
$content .= "<div class=\"igpPost-Divider\"></div>";
$content .= "<header>";
$content .= "<h3><a href=\"index.php?article=" . $row['id'] ."\">" . $row['title'] . "</h3>";
$content .= "<div class=\"igpPost-AuthTime\"><span>Posted By: </span><a href=\"#\">" . $row['author'] . "</a> <span>at " . formatDateTime($row['datetime']) . "</span></div>";
$content .= "<div class=\"igpPost-AuthTime\"><span>Tags: </span>";
$content .= "<div class=\"igpPost-Img\"><img src=\"" . $row['imglocation'] ."\"/></div>";
$content .= "</header>";
$content .= "<p>" . $row['content'] . "</p>";
$content .= "<footer class=\"igpPost-Footer\">";
$content .= "<div class=\"igpPost-ReadMore\">";
$content .= "<h1><a href=\"index.php?article=" . $row['id'] ."\">Read More..</a></h1>";
$content .= " </div>";
$content .= "</footer>";
$content .= "</article>";
echo $content;
}
これが私が目指していることです。基本的にはHTMLをPHPから分離しようとしていますが、動的コンテンツを必要な場所に挿入します。これはすべてクラス内にあります。