Пример MVC в php. Четвертая статья. Проектируем блог

Содержание цикла статей:

Введение

В трех предыдущих статьях мы написали минимальный каркас MVC проекта. Хочу обратить внимание, что наша основа еще «сырая», она не испытывалась в «полевых условиях», но это мы скоро исправим. Возможно в процессе создания блога, мы что-то будем подправлять, и дописывать в ядро. Начиная с этой статьи, мы приступим к уже практическому применению всего того, что изучали в первых трех статьях. В этой статье мы спроектируем блог и начнем его реализацию.

Проектируем базу данных

Прежде чем приступить к разработке блога, нужно спроектировать базу данных, но еще раньше нужно определиться, что у нас вообще должно получиться. Давайте для начала создадим не большой, в плане функционала, блог, который будет иметь категории статей, статьи и будет возможность писать комментарии к статьям. Возможно, потом расширим возможности, но пока для того, чтобы лучше понять MVC нам и этого хватит.
Итак, приступим к созданию бд, нам потребуется три таблицы – для категорий, для статей и для комментариев. На картинке можете посмотреть структуру таблиц:
Пример MVC в php. Четвертая статья. Проектируем блог
А также создать бд можете, воспользовавшись 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.

Рассказать друзьям: