Все еще очень плохо знаком с веб-программированием, и у меня нет конкретного вопроса как такового, но мне было интересно, насколько близок этот дизайн к тому, как MVC будет реализован в этих условиях. Вот класс шаблонов, который я использую. db.php
просто подключается к базе данных.
Я бы хотел остаться в стороне от ответов типа «Используйте CodeIgniter, CakePHP, Zend Framework и так далее», потому что я, скорее всего, в конечном итоге собираюсь это сделать, но сейчас я хотел бы понять, как реализовать шаблон barebones MVC на типичном веб-сайте с использованием готовых PHP и HTML. Кроме того, я прочитал страницу википедии для Model-view-controller, и я все еще не уверен, как применить ее в этих обстоятельствах.
Мне не очень нравится решение, которое я использую сейчас, потому что оно все еще кажется неорганизованным. Я не уверен, что именно я имею в виду, но кажется, что он немного пахнет. С большим количеством переменных это все еще кажется довольно грязным и не элегантным. Кажется, что многие части сайта борются за доступ к другим частям, и что общий дизайн немного грязный. Я постоянно передаю большое количество переменных конструкторам, и все решение кажется очень негибким. Я не знаю; Я все еще несколько сбит с толку относительно того, что контроллер находится в этом контексте или есть ли у меня даже один. Надеюсь, кто-то может смягчить все это замешательство x_x
index.php
<?php
require('db.php');
require('header_model.php');
require('submissions_model.php');
require('template.php');
$headerModel = new HeaderModel();
$page = $headerModel->getPage();
$sort = $headerModel->getSort();
$search = $headerModel->getSearch();
$submissionsModel = new SubmissionsModel($sort, $page, $resultsPerPage, $search);
$submissions = $submissionsModel->getSubmissions();
$outcomeCount = $submissionsModel->getOutcomeCount();
$index_view = new Template('index_view.php', array(
'header' => new Template('header.php'),
'menu' => new Template('menu.php', array('sort' => $sort)),
'submissions' => new Template('submissions.php', array('submissions' => $submissions)),
'pagination' => new Template('pagination.php', array('page' => $page, 'resultsPerPage' => $resultsPerPage, 'outcomeCount' => $outcomeCount, 'sort' => $sort)),
'footer' => new Template('footer.php')
));
$index_view->render();
?>
фрагмент index_view.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My Website</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="styles.css" rel="stylesheet" type="text/css"/>
<link href="favicon.png" rel="shortcut icon" />
</head>
<body>
<?php
$this->header->render();
$this->menu->render();
$this->submissions->render();
$this->pagination->render();
$this->footer->render();
?>
</body>
</html>
фрагмент header_model.php
public function getSearch() {
if (isset($_GET['search']))
return $_GET['search'];
else
return '';
}
фрагмент submissions_model.php
class SubmissionsModel {
private $sort;
private $page;
private $resultsPerPage;
private $search;
public $submissions;
public $outcomeCount;
public function __construct($sort, $page, $resultsPerPage, $search) {
$this->sort = $sort;
$this->page = $page;
$this->resultsPerPage = $resultsPerPage;
$this->search = $search;
$this->initialize();
}
private function initialize() {
$submissionQuery = $this->getSubmissionQuery($this->search);
$this->outcomeCount = mysql_num_rows($submissionQuery);
$this->submissions = array();
while ($row = mysql_fetch_assoc($submissionQuery)) {
$voteblock = $this->getVoteblock($row);
$tags = $this->getTags($row);
$commentCount = mysql_num_rows(mysql_query("SELECT id FROM comments WHERE submissionID = $row[id]"));
$this->submissions[] = array('submission' => $row, 'upvote' => $voteblock['upvote'], 'votes' => $voteblock['votes'], 'downvote' => $voteblock['downvote'], 'tags' => $tags, 'commentCount' => $commentCount);
}
}
}