Содержание цикла статей:
- 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.
очень полезная информация, спасибо