Solution Technologies
Управление сайтом без ограничений

Блог разработчиков XS2

Ненавижу копипасту

30.09 '2008 13:16extremus

smarty, extremus

Я хочу нажраться стереть весь файл, когда замечаю в нем повторяющийся код. Я десятки раз видел, как двухминутная правка отнимает два часа. Это классическй закон подлости + бездумное копирование. Никогда не верьте словам «это никогда не будет изменяться» про какой-нибудь блок на сайте. Все врут.

Откроем главу про повторное использование методов из «Руководства разработчика». В последнем листинге мы получаем страницу новости с блоком ссылок «еще свежие новости». Этот блок вставлен с помощью функции xs2Fetch.

Бывает, что нужно вклеить одинаковую часть несколько раз. Например, если дизайнер продублировал блок меню в шапке и в подвале страницы. Фетчим дважды? Не обязательно! Вспоминаем про параметр var и пишем вверху [div class="top-menu"]{xs2Fetch var="menu" met="menu"}{$menu}[/div], а затем [div class="bot-menu"]{$menu}[/div] внизу. Функция не выводит результат, а запоминает его в переменной, когда видит этот парметр. Но наверху страницы нам все-таки надо показать меню, поэтому сразу после фетча выводим эту переменную. Она никуда не исчезает до конца шаблона, поэтому выводим ее второй раз. Причем, с помощью классов, которые мы указали, можно задать для этих частей разное оформление.

Однако все сказанное не помогает против раскладки сайта. Именно с ней обычно связаны повторяющиеся куски. Типичный случай: в центре текст, сверху меню, сбоку анонсы других текстов, реклама и т.д. Дивами или таблицами эти части позиционируются на экране. Такая разметка образует шелуху, которую так и тянет просто скопировать. Она же не поменяется. Ага, а через неделю заказчик и говорит: «все хорошо, только ма-а-аленькая просьба — надо поменять вот это с этим, а то — убрать».

И тут тебя осеняет простейшая идея — сделать один шаблон, который будет называться «раскладка». Как его сделать? Сейчас расскажу. Но сначала  небольшое отступление: я видел движки, где эта самая раскладка была единственным способом отобразить страницу. То есть вывести статью можно только привязав ее к раскладке, которая одна для всего сайта. И если на одной странице три колонки, а на другой — только две, то в шаблоне надо ставить if и не один. Потом сайт растет, шаблон набухает такими условиями, и разобраться в нем становится невозможно. Вывод: какие страницы сливать в один шаблон, а какие не стоит — надо решать мозгом.

Итак, загоняем шелуху в отдельный метод. Для этого нам понадобится конструкция capture — стандартная штука шаблонизатора Smarty. Напишем примитивный шаблон и назовем его layout:

[html][body][head][title]{$title}[/title][head]
[body][table][tbody][tr]
[td]{$left}[/td][td]{$right}[/td]
[/tr][/tbody][/table][/body][/html]

Это раскладка, которая ожидает три блока в переменных title, left и right. Осталось их сформировать и передать. Пишем в методе, который надо показать в такой раскладке:

{xs2GetNode var="n" mod="news" NodId=$_THE.PARAMS[0]}
{capture name="r"}
     [h1]{$n.NName}[/h1]
     [p]{$n.Text}[/p]
{/capture}
{* Справа покажем текст новости. *}
{assign var="right" value=$smarty.capture.r}
{* Назначаем заголовок окна. *}
{assign var="title" value="Новость `$n.NName`"}
{* Слева покажем меню. *}
{xs2Fetch var="left" met="menu"}

И продолжаем в том же методе, чтобы передать блоки в шаблон-раскладку:

{xs2Fetch met="layout"}

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

 
хостинг / 28.03 '2010 23:13.11
хостинг неограниченный настройка домена windows хостинг сайтов hosting.miheeff.ru платный хостинг http://hosting.miheeff.ru хостинг неограниченный настройка домена windows

Коментарий

Имя
Текст
Защита от неграмотных
 

Новости

25.12 '2008
19.11 '2008
25.06 '2008

Пресс-релизы

12.11 '2007
27.06 '2007

Наши клиенты

Благодаря созданию сайта «под ключ» студией «designLab» (авторизованный партнер компании «Солютекс»), в нашей компании произошел существенный рост продаж, а посещаемость сайта возросла в десятки раз.      

Константин Колодко, Коммерческий директор ООО «Корпорация Связи»www.corporacia.ru
Copyright ©1998-2009 Солютекс. Все права защищены.
Этот сайт сделан в designLab | Работает на технологии XS2
Условия использования | О защите конфиденциальности