<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

Просмотрев курс и выполнив упражнения, Вы сможете без проблем создавать функциональные движки для самых различных сайтов.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Компонентный (блочный) подход

Компонентный (блочный) подход

В предыдущей статье мы с Вами обсуждали отличный подход MVC. Отличный не с точки зрения практики применения, сколько с точки зрения самой концепции. И более развитым решением, которое уже очень часто применяется на практике, является компонентный (блочный) подход.

В компонентом подходе остаются всё те же 3 элемента: Model, View и Controller. Но очень важное отличие: в чистом MVC пользователь обращался к Controller, однако, гораздо логичнее обращаться к View. И как раз в компонентом подходе идёт обращение именно к указанному элементу.

Второй важнейшее отличие состоит в том, что Controller разбивается на несколько частей, компонентов, каждый из которых отвечает за свою часть. Например, блок с новостями, панель пользователя, блок с комментариями и так далее. Разумеется, вся обработка идёт в соответствующем блоке. Например, если нужно обработать добавление нового комментария, то эта обработка помещается в компонент, отвечающий за комментарии. А не всё в одну кучу, как это было в MVC (когда вся обработка отправлялась в 1 файл, controller.php).

Давайте с Вами разберём компонентный подход на примере из прошлой статьи. Начнём с файла index.php, принадлежащий Шаблону.

<h2>Комментарии</h2>
require_once "comments.php"; // Подключение компонента, отвечающего за комментарии
<?php
  for ($i = 0; $i < count($comments); $i++) {
    echo "<li><b>".$comments[$i]["name"].":</b> ".$comments[$i]["text"]."</li>";
?>

Теперь рассмотрим файл comments.php, отвечающий за комментарии:

<?php
  require_once "model.php"; // Подключаем Модель
  /* Здесь может быть обработка различных форм, относящихся к комментариям */
  $comments = getComments(); // Некая функция в Модели, возврающая двумерный массив с комментариями
?>

Может показаться, что ничего не изменилось. Ведь остался тот же PHP-код в файлах Шаблона. Однако, нам удалось сделать так, чтобы дизайнер и только дизайнер решал, какие блоки и где выводить. Это очень значимый результат. Теперь дизайнер может в своём Шаблоне, взять весь этот код подключения комментариев и переставить в другое место или, например, вообще удалить. В то же время, если программист придумает какой-то более быстрый способ получения комментариев, он спокойно исправит Model, никак не изменяя View.

Данный способ идеален для небольших сайтов, например, сайтов-визиток. Однако, минусы у данного способа имеются:

  • По-прежнему, остался PHP-код в Шаблоне.
  • Для больших сайтов данный способ не подойдёт. Ведь у сайта есть множество повторяющихся элементов, например, шапка сайта (не просто одна картинка, а некоторая структура HTML-кода). И если потребуется изменить её, то потребуется менять все страницы вручную. А если их будет 1000?

В связи с этими минусами, были придуманы Шаблонизаторы, которые лишены этих двух минусов. Их существует большое количество, например, Smarty, но я Вам рекомендую создать свой. В любом случае, у каждого Шаблонизатора будут свои минусы. Например, наличие служебных конструкций в Шаблоне (именно служебных конструкций, а не PHP-кода), которые являются тем же кодом, просто в виде HTML-комментариев, который в Шаблонизаторе преобразуется в PHP-код. Либо если вынести всю обработку в Шаблонизатор, оставив идеально чистый Шаблон с только HTML-кодом без всяких служебных конструкций, то тогда придётся смириться с некоторой зависимостью программной части и внешнего вида. Это означает, если принципиально изменить вывод чего-либо (например, был выпадающий список, а теперь нужно вывести всё в теге <p>), то придётся изменять программную часть.

Но в любом случае, именно Шаблонизатор Вы и должны использовать для создания крупных проектов. Можете использовать уже готовый, прочитать документацию и использовать, а можете написать свой собственный, как это сделал я. Безусловно, он также не лишён недостатков. Но, кто знает, быть может именно Вы создадите идеальный Шаблонизатор, тем самым, мгновенно прославившись в кругу программистов.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (14):

malina95 malina95 24.12.2012 20:35:22

Михаил, а почему если писать в статическом стиле то конструктор не работает и выдаёт ошибку?

Ответить

Admin Admin 24.12.2012 21:01:58

Что за ошибка и что за конструктор?

Ответить

malina95 malina95 26.12.2012 14:36:31

И опять мне не пришло письмо об ответе на комментарий... Вообщем если я пишу в конструкторе строчку self::$db = new mysqli("localhost", "Admin", "udiram04", "hosting"); то выдаёт ошибку что метод self::$db->query не найден

Ответить

Admin Admin 26.12.2012 19:29:40

А на конструктор не ругается?

Ответить

malina95 malina95 26.12.2012 19:44:14

Нет, может мне бросить пока статические методы и попробовать всё таки $this?

Ответить

Admin Admin 26.12.2012 19:46:26

А какая именно ошибка на query() возникает? Прямо текст скопируйте.

Ответить

malina95 malina95 27.12.2012 19:07:08

Fatal error: Zip:__construct($db), none object error:__construct($db); Странная ошибка которую я никогда не видел, возможно и вы тоже её никогда не видели

Ответить

Admin Admin 27.12.2012 19:47:09

Впервые вижу такую ошибку, Вы, видимо, какой-то чужой класс используете, и вот из него уже и идут эти ошибки. По крайней мере, self::$db - это правильно, и self::$db->query() тоже прекрасно должен работать.

Ответить

malina95 malina95 27.12.2012 20:01:11

Я использую ваш класс из курса, мне друг скопировал его на флешку, я просил у него дать полностью курс но он отказался, сказал сам покупай... Я бы с удовольствием купил но денег даже на новый год нету... вообщем попроюуй сам разобраться с этим классом. И всё таки советую выложить класс для бд для всех, и использование каждого метода, будет очень удобно для всех, вы согласны со мной?

Ответить

vit-lja vit-lja 07.03.2013 11:41:00

Добрый день! У меня возникла вот какая проблема при использовании данного метода слетает CSS (допустим не могу прижать заголовки к верхней границе поля таблицы, или при вставке картинок(кнопок) тоже получается разрыв), а если использовать без блоков то все работает корректно

Ответить

Admin Admin 07.03.2013 21:22:56

Используйте кодировку UTF-8 без BOM.

Ответить

vit-lja vit-lja 07.03.2013 21:49:06

Спасибо, помогло.

Ответить

Alexey0112358 Alexey0112358 07.10.2013 14:51:17

Михаил, скажите, пожалуйста, где формировать tpl файлы? В index.php или comments.php в этом примере? Выводь, как я понимаю, в index.php.

Ответить

Admin Admin 07.10.2013 21:52:04

Зависит от движка. По-разному можно.

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.