Step 7 (S-44791)

From Stepik Wiki
Revision as of 13:53, 6 August 2017 by Admin (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/14828/step/7

Step 7 (S-44791) 1.png

[00:00 - 00:17] следующая особенность про которую следует поговорить а эта особенность есть не у всех шаблонизаторов но она есть это так называемая наследование шаблонов а зачем это нужно чтобы понять зачем то нужно мы рассмотрим макет сайта


Step 7 (S-44791) 2.png

[00:17 - 00:35] здесь представлен макет который мы предлагали студентам для реализации проекта но в принципе это типичный сайт похожий на stack overflow вопрос ответ давайте посмотрим структуру страниц то есть как как условного линзы страница


[00:35 - 00:53] во 1 странице есть а шапка очевидно что эта шапка одинаково на всех страниц но в большинстве случаев это так и есть шапка спадает со всех страниц у нее может отличаться от это правая часть


[00:53 - 01:09] авторизованном не авторизован но в целом шаг совпадают а далее страница разделена на 2 части центральную колонку


[01:09 - 01:26] и правую колонку очевидно также что правая колонка также совпадают на большинстве страниц от это правой колонке она спадает на большинстве страниц а содержимое центральной колонке


[01:26 - 01:41] а содержать центральной колонки отличается каким образом сделать так чтоб нам не приходилось дублировать а верстку правой колонке и шапке


[01:41 - 01:57] есть варианты 2 мы можем вынести эту верстку в отдельные шаблоны исключать их с помощью директиву include либо 2 вариант мы можем использовать наследование шаблонов наследование шаблонов это очень похоже на


[01:57 - 02:14] наследование языке программирования а при наследовании выделяется некоторый базовый шаблон бориса что мы такие шаблоны еще иногда называют layout лэйаут потому что они задают общее расположение блоков на странице


Step 7 (S-44791) 3.png

[02:14 - 02:31] что мы видим а мы видим что в шаблоне указана общая структура то есть доктор а все страницы заголовок а ты здесь не указано но в общем то частности


[02:31 - 02:46] а внутри внутри верстки встречаются специальные теги блок и ян блок а в некоторых случаях этих тегов есть некоторое содержимое


[02:46 - 03:05] а если проводить аналогию с языком программирования а шаблон быстро что мы это базовый класс а блоки это виртуальные методы а некоторые нет а в некоторых методов есть реализация по умолчанию


[03:05 - 03:20] например в некоторых нет сдается вообще верстка страниц как выглядят верстка одержимая


[03:20 - 03:38] шаблоны конкретной страницы например мы рассмотрим шаблон главной страницы которые отрисовываются по урлу слэш а в 1 строчке важно команда команда extend команды к стенс показывает


Step 7 (S-44791) 4.png

[03:38 - 03:57] что данный шаблон он не самостоятельный что наследуется от другого шаблона и как мы видим содержимое оно себя оно разделено на отдельные блоки вот блок блок то есть а что мы находится внутри блока а


[03:57 - 04:14] шаблон конкретной страницы соответствует а если мы говорим про opeth классу которые наследуются от базового соответственно блоке перекрывают все блоки которые указаны в базовом классе


[04:14 - 04:29] у каждого блока есть имя например а вот блог имя content этот блок перекрывает соответствующее ему блок в базовом классе а что происходит когда а


Step 7 (S-44791) 5.png

Step 7 (S-44791) 6.png

[04:29 - 04:47] вы пытаетесь помощью шаблонизатора рисовать вот этот шаблон то есть шаблон конкретной страницы пока называется индекса что married шаблонизатор видит что это не самостоятельный шаблона что он наследуется


[04:47 - 05:02] директива экстаз поэтому он начинает выполнение отрисовку с родительского шаблона в какой то момент времени а в родительском шаблоне шаблонизатор а встречает директиву блок


Step 7 (S-44791) 7.png

[05:02 - 05:18] шаблонизатор помнишь на самом деле он отрисовывает не боится что мы до некоторой конкретной шаблон поэтому смотрят определенный блок в конкретном шаблоне в этом шаблоне блок определен поэтому выводятся именно он


Step 7 (S-44791) 8.png

[05:18 - 05:35] а внутри блоков есть возможность вызывать блок супер это вызов родительского то есть когда отрисовывается title блок title конкретного шаблона сначала отрисовывается родительский ему то есть вот это значение


Step 7 (S-44791) 9.png

[05:35 - 05:52] а потом соответственно вот вот эта строчка не очень популярны функционал а далее а далее идет блок экстра класс шаблонизатор проверяет если блок экстра хет а


Step 7 (S-44791) 10.png

Step 7 (S-44791) 11.png

[05:52 - 06:09] в конкретном шаблоне индекса что мы такого блока здесь нет поэтому выводится то что есть что то здесь в блок пустой ничего не вводится а далее выводится заголовок и мы доходим до блока content


Step 7 (S-44791) 12.png

Step 7 (S-44791) 13.png

[06:09 - 06:24] опять шаблонизатор смотрит если блок content в конкретном о шаблоне шаблоне главной странице да этот блог есть поэтому выводится именно


Step 7 (S-44791) 14.png

[06:24 - 06:40] а блок content из главных страниц а таким образом у нас а структура шаблонов которые наследуются друг от друга нам логично структуре а структуре класс


[06:40 - 06:57] ну а если мы не все знаете про паттерны проектирования такой паттерн называется template метод


[06:57 - 07:13] а что мы добиваемся таким подходом что мы вообще добиваемся а наследование шаблонов существует несколько вещей во 1 ну 1 самое важное это исключение


[07:13 - 07:28] дублирование верстке то есть мы видим что в каждом шаблоне встречается только та верстка которая специфично для данной страницы твердая которые есть на всех страницах она указывается 1 раз а в шаблоне лэйаут


Step 7 (S-44791) 15.png

[07:28 - 07:45] а в принципе того чтобы там можно было бы добиться с помощью директиву include то есть с помощью подключения шаблон но в чем + а подхода в том что она сохраняется парных тегов а вот посмотрите на


[07:45 - 08:01] вы увидите что все теги открывающийся закрывающийся открывающийся закрывающийся все теги находятся в 1 шаблоне это очень удобно это гарантирует что у нас а структура что моя страничка останется правильно


[08:01 - 08:20] если мы используем include директиву то у нас а шапка сайта ну то есть вот эта часть и футер сайта как правило находятся в разных шаблонов поэтому нам нужно следить чтобы все таки которые открываются в 1 файле они закрывались другом


[08:20 - 08:37] это тяжело и часто приводит к ошибкам при наследовании шаблонов такой проблемы не возникает в принципе раз этого не может использоваться более сложная структура


Step 7 (S-44791) 16.png

[08:37 - 08:52] например если у вас есть какой то профиль и все страницы профиля обладает похожей структурой вы можете создать а базовый шаблон от него отнаследовать ну с да славится базовый шаблон


[08:52 - 09:11] от него наследуются какой то шаблон профиле от него наследуются например главная страница профиля


[09:11 - 09:23] то есть наследование может быть также не только 1 уровня а произвольная произвольное количество уровней наследования может быть это нормально поддерживается шаблонизатором