Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

 

__END__

Вложенные шаблоны

Что еще может пригодиться в работе с шаблонами? Любой сайт содержит повторяющиеся элементы дизайна – шапка, заголовки, меню и так далее.

Хороший движок шаблонов должен иметь возможность подключать более мелкие шаблоны (назовите их заготовками или библиотечными элементами) внутрь более крупных, желательно – поддерживать многоуровневое, вложенное подключение.

Чуть выше мы написали два шаблона для вывода таблицы. Логично не копировать этот код везде, где нам понадобится отобразить такую таблицу, а иметь возможность сохранить этот шаблон отдельно и подключать его по мере необходимости в другие шаблоны.

Обе наши библиотеки такую возможность предоставляют. В XTemplate существует конструкция:

{FILE "имя_вложенного_файла_шаблона"}

В HTML::Template аналогичные функции выполняет конструкция:

 <TMPL_INCLUDE NAME="имя_вложенного_файла_шаблона">

А вот здесь остановимся. Если вы посмотрите внимательно, то заметите, что мы вынуждены писать имя файла непосредственно в шаблоне. Это значит, что мы стали жестко привязаны к расположению файлов. Даже если мы укажем относительный путь к файлу шаблона, мы вынуждены будем в любом другом проекте в точности повторять структуру директорий для размещения шаблонов!

Это плохо. Более того, это как-то противоречит самой идее о легкости подключения (читай – переноса) и замыслу о повторном использовании более мелких (библиотечных) шаблонов.

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

В случае HTML::Template эта возможность предусмотрена изначально. Обратите внимание, мы сразу использовали инициализацию каталога шаблонов в нашем примере:

my $template = HTML::Template->new(

     filename => "ex2.html",

     path => $ENV{DOCUMENT_ROOT}."/../data/htmltemp/"

);

В библиотеке XTemplate это не предусмотрено (во всяком случае в версии 0.2.4-3).

Сформировать имя файла шаблона динамически, написав нечто вроде:

{FILE "{TEMP_FILE}"}

и присвоить (проассоциировать) нужное значение подстановкой в {TEMP_FILE} тоже не выйдет. Конструктор класса производит рекурсивную inline-подстановку всех вложенных шаблонов, и только потом производит разбор и обработку полного шаблона со всеми подстановками.

Что делать? Отказаться от идеи повторного использования вложенных элементов? Ну не все так печально, как кажется. Библиотека XTemplate распространяется по лицензии GNU General Public License. Эта лицензия подразумевает возможность внесения изменений в исходный продукт при соблюдении определенных правил[1]. Нужные нам изменения ограничатся тремя строчками с добавлением комментариев.

Суть изменения сводится к добавлению еще одного члена класса и опциональной инициализации его в конструкторе. Этот новый член класса – path – будет определять путь к директории шаблонов. Остальные модификации в коде исходного класса ограничиваются конструктором и методом getfile(...).

class XTemplate {

...

/* Новый член класса */

var $path = "";

/***[ constructor ]*** /

function XTemplate ($file,$mainblock="main", $path="") {

  /* Инициализируем значение path, если соответствующий параметр не пуст */

  if ($path) $this->path= str_replace("\", "/", $path)."/";


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160]
[161]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100