Содержание цикла статей:
- 1. Вводная статья
- 2. Маршрутизация, контролеры, экшены, шаблоны
- 3. Модели. Элементарные действия с базой данных
- 4. Проектируем блог
- 5. Исправление неточностей структуры
Введение
В трех предыдущих статьях мы написали минимальный каркас MVC проекта. Хочу обратить внимание, что наша основа еще «сырая», она не испытывалась в «полевых условиях», но это мы скоро исправим. Возможно в процессе создания блога, мы что-то будем подправлять, и дописывать в ядро. Начиная с этой статьи, мы приступим к уже практическому применению всего того, что изучали в первых трех статьях. В этой статье мы спроектируем блог и начнем его реализацию.
Проектируем базу данных
Прежде чем приступить к разработке блога, нужно спроектировать базу данных, но еще раньше нужно определиться, что у нас вообще должно получиться. Давайте для начала создадим не большой, в плане функционала, блог, который будет иметь категории статей, статьи и будет возможность писать комментарии к статьям. Возможно, потом расширим возможности, но пока для того, чтобы лучше понять MVC нам и этого хватит.
Итак, приступим к созданию бд, нам потребуется три таблицы – для категорий, для статей и для комментариев. На картинке можете посмотреть структуру таблиц:

А также создать бд можете, воспользовавшись sql-патчем:
CREATE TABLE `category` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50), `is_active` TINYINT(1), PRIMARY KEY (`id`) ); CREATE TABLE `article` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `id_category` INT(10), `title` VARCHAR(255), `small_text` TEXT, `text` TEXT, `date_create` DATE, `is_active` TINYINT(1), PRIMARY KEY (`id`) ); CREATE TABLE `comments` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `user_name` VARCHAR(50), `text` TEXT, `date_create` DATETIME, `is_active` TINYINT(1), PRIMARY KEY (`id`) ); ALTER TABLE `article` ADD CONSTRAINT `article_fk1` FOREIGN KEY (`id_category`) REFERENCES category(`id`);
Проектируем структуру блога
- Создадим модели для таблиц
- Создадим контроллеры и экшены
- Создадим шаблон и вьюхи(отображения)
Разработка функционала
Теперь приступим к самой интересной части – разработке функционала, начнем с главной страницы – контроллер index, экшен index, тут мы ни чего делать не будем, а просто выведем текст, то есть просто будем подключать нужную вьюху:
$this->template->view('index');
Давайте создадим контроллер, который будет отвечать за вывод всех статей для определенный категории — Controller_Category. Мы будем передавать в него ID категории и делать по нему запрос:
// экшен
function index() {
$idCategory = (isset($_GET['id'])) ? (int)$_GET['id'] : false;
if($idCategory){
$select = array(
'where' => "is_active = 1 AND id_category = $idCategory", // условие
'order' => 'date_create DESC' // сортируем
);
$model = new Model_Article($select); // создаем объект модели
$articles = $model->getAllRows(); // получаем все строки
}else{
$articles = false;
}
$this->template->vars('articles', $articles);
$this->template->view('index');
}
Во вьюхе для этого контроллера и экшена сделаем вывод заголовков, короткого описания и ссылки на полный текст статьи.
И наконец, в последнем контроллере(Controller_Article) реализуем получение конкретной статьи по ее ID:
function index() {
$idArticle = (isset($_GET['id'])) ? (int)$_GET['id'] : false;
if($idArticle){
$select = array(
'where' => "id = $idArticle" // условие
);
$model = new Model_Article($select); // создаем объект модели
$article = $model->getOneRow(); // получаем статью
}else{
$article = false;
}
$this->template->vars('article', $article);
$this->template->view('index');
}
Во вьюхе, которая подключается в этом контроллере выведем заголовок статьи и полное описание.
На этом статья закончена, исходники и дамп базы данных можно скачать тут.
В следующей статьи мы реализуем комментарии и попробуем расширить возможности блога.
Помимо написания сайта полностью с нуля, есть возможность создать сайт совместных покупок используя отлаженную и проверенную CMS.

очень полезная информация, спасибо