Первое, что я хотел бы сделать, это отделить весь код от основного цикла. Например, я бы взял весь этот код:
elseif(isset($_GET['view_post'])) {
$_ps = sqlite_qrs('SELECT * FROM post WHERE id = \''.$_GET['view_post'].'\'');
$_cm = sqlite_qr('SELECT * FROM comment WHERE pid = '.$_ps['id']);
$_ct = sqlite_qrs('SELECT name FROM category WHERE id = '.$_ps['pid']);
$meta = htmlspecialchars($_ps['title']);
$body.= '...';
foreach($_cm as $cm) {
$body.= '...';
}
}
elseif(isset($_GET['view_category'])) {
$_ct = sqlite_qrs('SELECT * FROM category WHERE id = \''.$_GET['view_category'].'\'');
$_ps = sqlite_qr('SELECT id, title FROM post WHERE pid = '.$_ct['id']);
$meta = htmlspecialchars($_ct['name']);
$body.= '...';
foreach($_ps as $ps) {
$body.= '...';
}
}
И рефакторинг это так:
class View {
public static function Post($post_id) {
$_ps = sqlite_qrs('SELECT * FROM post WHERE id = \''.$post_id.'\'');
$_cm = sqlite_qr('SELECT * FROM comment WHERE pid = '.$_ps['id']);
$_ct = sqlite_qrs('SELECT name FROM category WHERE id = '.$_ps['pid']);
$meta = htmlspecialchars($_ps['title']);
$body.= '...';
foreach($_cm as $cm) {
$body.= '...';
}
return array($body, $meta);
}
public static function Category($category_id) {
$_ct = sqlite_qrs('SELECT * FROM category WHERE id = \''.$category_id.'\'');
$_ps = sqlite_qr('SELECT id, title FROM post WHERE pid = '.$_ct['id']);
$meta = htmlspecialchars($_ct['name']);
$body.= '...';
foreach($_ps as $ps) {
$body.= '...';
}
return array($body, $meta);
}
}
[..]
elseif(isset($_GET['view_post'])) {
list($body, $meta) = View::Post($_GET['view_post']);
}
elseif(isset($_GET['view_category'])) {
list($body, $meta) = View::Category($_GET['view_post']);
}
После того, как я разделил части как статические методы, я начал думать о разделении HTML на шаблоны и код, связанный с базой данных, на модели.