<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

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

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

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

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

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

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

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

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

Использование tpl-файлов

Использование tpl-файлов

Сразу скажу, что я уже писал об этой теме здесь: использование tpl-файлов. Однако, не все поняли данный материал, и я решил к нему вернуться и написать всё немного по-другому. Не секрет, что любой серьёзный движок никогда не будет смешивать в своём коде HTML и PHP. Однако, HTML и PHP коды очень тесно взаимосвязаны, поэтому для того, чтобы не нарушать правила "хорошего тона", были придуманы tpl-файлы. Данные файлы служат для хранения HTML-кода с элементами шаблонов, которые подставляются в PHP-коде. Давайте подробнее разберём использование tpl-файлов с примером.

Возьмём с Вами самый элементарный пример - это панель пользователя, где есть его аватарка и приветствие по имени. Первым делом, создадим tpl-файл, и пусть он называется userpanel.tpl. Напоминаю, что это всего лишь кусок HTML-кода с элементами шаблона:

<p>Здравствуйте, %name%!</p>
<p>
  <img src="%avatar%" alt="Аватарка" />
</p>

Ничего сложного, это просто обычный HTML-код. Только вместо определённых значений стоят %элементы_шаблона%.

Теперь разберёмся с PHP-обработкой. Здесь всё будет более, чем абстрактно, но, к сожалению, по-другому никак. Главное - это понять принцип работы. И так PHP-код для обработки созданного tpl-файла:

<?php
/* Данная функция, хоть и использует буферы, но суть элементарна: вернуть содержимое файла */
  function getTemplate($name) {
    ob_start(); // Начинаем сохрание выходных данных в буфер
    include ($name.".tpl"); // Отправляем в буфер содержимое файла
    $text = ob_get_clean(); // Очищаем буфер и возвращаем содержимое
    return $text; // Возвращение текста из файла
  }
  $name = "Николай"; // Извлекается из базы
  $avatar = "avatars/user_15.jpg"; // Извлекается из базы
/* Начинается замена элементов шаблона на реальные данные */
  $userpanel = str_replace(
    array(
      "%name%",
      "%avatar%"
    ),
    array (
      $name,
      $avatar
    ),
    getTemplate("userpanel")
  );
  echo $userpanel; // Выводим окончательный результат
?>

Это простейший вариант. Всё прокомментировано, поэтому вопросов по этому примеру возникнуть не должно. И по сути любая страница состоит из таких вот блоков. Ваша задача взять нужные блоки (функция getTemplate()), заменить нужными данными (функция str_replace() и данные полученные, например, из базы), а потом просто соединить все блоки, как обычные строки, и вывести всё на страницу.

Безусловно, без ООП здесь очень проблемно будет. Вы такое количество условий наплодите (страниц же много), что быстро запутаетесь. Но принцип использования tpl-файлов, надеюсь, Вы осознали. Дальше уже самостоятельно подумайте, как всё это обернуть в ООП, чтобы всё было максимально простым с точки зрения понимания кода и его сопровождения в будущем.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

ankalitkin ankalitkin 03.02.2012 23:04:09

А здесь можно было использовать file_get_contents($name.".tpl") вместо getTemplate($name)?

Ответить

Admin Admin 03.02.2012 23:16:52

Да, если Вам так удобнее. Просто я привык к буферам, в своё время с ними много работал, но file_get_contents() вполне подходит. Но я настоятельно рекомендую использовать getTemplate(), просто внутри используйте file_get_contents(). Очень часто бывают всякие повторяющиеся элементы (по типу адреса сайта), которые постоянно заменяются и их можно автоматически всегда при вызове getTemplate() сразу заменять. Это резко сокращает количество кода.

Ответить

ankalitkin ankalitkin 05.02.2012 09:19:38

Я сделал себе обработку через getTemplate, но тогда не получается сделать включение любого модуля (например опроса, формы авторизации, отдельных файлов)без PHP. Как делать include в TPL?

Ответить

Admin Admin 05.02.2012 13:37:23

Это и не нужно делать, всё должно включаться через PHP.

Ответить

dalfaine dalfaine 06.03.2012 20:34:52

а к чему именно tpl? я лично использую формат файла php - разницы не вижу

Ответить

Admin Admin 06.03.2012 21:22:32

Принято так. Можете использовать хоть txt, хоть вообще без расширения, результат будет тот же.

Ответить

p1us p1us 18.07.2012 07:53:12

не понятно зачем делать через буфер? у Вас есть похожая статья http://myrusakov.ru/php-use-tpl.html но все без буфера, не могли бы Вы пояснить почему здесь буфер?

Ответить

Admin Admin 18.07.2012 15:07:42

Чтобы не выводить содержимое файла до замены элементов шаблона. Но, как я уже писал выше, это Ваше дело - можете использовать метод из статьи, которую привели.

Ответить

malina95 malina95 24.11.2012 02:18:29

Миша, подскажи как мне потсупить? У меня есть файлы в которых выводится из базы только текст, в нём я могу делать так и проблем не будет : $template = str_replace( array( "%text%" ), array ( $index['text'].$view ), getTemplate("open") ); И у меня есть файлы в которых мне приходиться именно в основном контенте делать большие скрипты с циклами и т.д. Как мне быть с такими файлами? Делать отдельные файлы tpl? или как? А можно ли работу всего скрипта занести в одну переменную? Просто тогда мне бы не надо было создавать идентичные друг другу файлы...Подскажи плиззз

Ответить

Admin Admin 24.11.2012 09:02:11

Единственный выход - это создавать новые tpl-файлы, очень похожие на остальные. Это недостаток, но ничего не поделаешь.

Ответить

malina95 malina95 24.11.2012 14:50:11

Понятно, а почему если в файле с шаблоном стоит цикл после %text% то выдаёт ошибку?

Ответить

Admin Admin 24.11.2012 14:57:33

В файле с шаблоном не должно быть циклов.

Ответить

malina95 malina95 24.11.2012 15:21:10

А как мне тогда выводить те же самые комментарии? Надо делать их блоками?

Ответить

Admin Admin 24.11.2012 17:34:04

Надо блок выделить в отдельный tpl-файл, в PHP сделать цикл, который собирает много этих блоков воедино, а затем всю эту кучу вставляет в основной tpl-файл.

Ответить

malina95 malina95 24.11.2012 18:05:49

Пожалуйста напишите статью как всё это организовать по правильному и удобному... Очень прошу, я могу сделать но даю гарантию что код будет ужасный, напишите пожалуйста

Ответить

Admin Admin 24.11.2012 19:16:59

Вот курс, там как раз всё это делается: http://srs.myrusakov.ru/php

Ответить

ghhgghhggh ghhgghhggh 17.04.2013 21:02:29

Это гениальная конструкция.Хотелось бы увидеть ещё статьи по этой конструкции. Разные варианты этой конструкции

Ответить

lion337 lion337 11.01.2014 15:38:10

Михаил, здравствуйте не могу понять вставляю php код в .tpl файл выводит пустое место, помогите разобраться почему так получается. Спасибо

Ответить

alexandrdante alexandrdante 11.01.2014 15:43:26

tpl файлы не содержат php кода Можно,конечно,в зависимости от шаблонизатора Но если шаблонизатор,как у Михаила,то .tpl файлы не содержат кода PHP весь код в обработчиках шаблонизатора

Ответить

win64 win64 13.02.2014 16:08:06

Не понимаю зачем нужны шаблоны? Я работаю с html кодом на прямую через print. Всегда делал так, а тут отказывается, что это не правильно нужны шаблоны.

Ответить

tikkiwiki tikkiwiki 18.02.2014 17:20:52

Шаблоны нужны для удобства. Когда проект большой будет - поймете.

Ответить

maks0703 maks0703 02.06.2014 13:45:33

Если не сложно, создайте статью про Smarty (шаблонизатор)

Ответить

Makcym Makcym 11.01.2015 21:25:48

По скорости работы чтение файлов не лучший вариант для php. Лучше хранить в mysql

Ответить

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