Друпализмы. Реализуем «мультитеминг» в Друпале
02.04.06Наверняка, при создании сайтов вы сталкивались с тем, что один единственный шаблон для всех страниц сайта вас не устраивает. Например, на сайте нашей студии используется целых пять шаблонов (главная страница + отдельные шаблоны для каждого раздела). Среди штатных возможностей Друпала реализация «мультитеминга» (назначение выборочных шаблонов разным разделам сайта) отсутствует. Существует модуль, который называется sections, однако он работает только для версии 4.5. Тем не менее, выход есть.
В темах phptemplate основной шаблон сайта хранится в файле page.tpl.php. Так как шаблонов будет несколько, подходящим вариантом будет размещение каждого шаблона в отдельном файле, а в page.tpl.php будет находиться код, задача которого — определять какой из шаблонов нужно использовать в данный момент. Например, на сайте нашей студии в папке с темой появились 5 новых файлов:
front.tpl.php — шаблон для главной страницы;
diary.tpl.php — шаблон для раздела «Дневник»;
portfolio.tpl.php — шаблон для раздела «Работы»;
contact.tpl.php — шаблон для раздела «Контакты»;
quotes.tpl.php — шаблон для странички «Цитаты».
Рассказать о том, как создавать эти файлы не есть задача данного материала. Предполагается, что создавать темы для Друпал вы уже умеете. А вот, как организовать правильное определение какой из шаблонов нужно использовать в данный момент, я сейчас покажу. Открываем файл page.tpl.php, стираем из него абсолютно все, и вставляем такой код:
include('front.tpl.php');
return;
}
$i=0;
$pathd="";
while (arg($i)!="") {
$pathd=$pathd.arg($i)."/";
$i++;
}
$mypath=explode("/", drupal_get_path_alias(substr($pathd,0,strlen($pathd)-1)));
$mypath = $mypath[0];
Здесь, первое условие проверяет переменную Друпала $is_front, которая хранит true, если в данный момент должна отображаться главная страница. В этом случае в наш файл вставляется шаблон front.tpl.php.
Кусочки пути текущей страницы Друпал хранит в массиве $arg. Например, для пути 'taxonomy/term/3', массив будет иметь 3 элемента: $arg(0)= 'taxonomy', $arg(1)= 'term', $arg(2)= '3'. На нашем сайте используются короткие ссылки, поэтому задача цикла в вышеприведенном куске кода — склеить отдельные элементы массива $arg в одну строку, и при помощи функции drupal_get_path_alias() определить алиас, соответствующий данному пути. Функция explode() разбивает алиас на отдельные составляющие. Например, после выполнения кода для алиаса 'portfolio/cards/3', в переменной $mypath будет лежать значение 'portfolio'. По этому значению мы и будем определять, какой шаблон необходимо подгружать в данный момент. Допишем ниже следующие команды:
{
include('diary.tpl.php');
}
elseif ($mypath=='contact')
{
include('contact.tpl.php');
}
elseif ($mypath=='portfolio')
{
include('portfolio.tpl.php');
}
elseif ($mypath=='quotes')
{
include('quotes.tpl.php');
}
else
{
include('admin.tpl.php');
}
Данный пример успешно работает на сайте нашей студии.