Данный материал относится к 6 версии CMS Drupal 6, хотя данные советы применимы и к другим версиям Drupal. В материале представлены советы по структурированию темы Вашего сайта.
Согласно логики Drupal в темах имеется четкое разделение между разметкой шаблона сайта и функциями. Файлы типа .tpl.php должны использоваться специально для разметки шаблона, включая переменные и функции только по мере необходимости. Ниже представлено ряд советов по улучшению темы сайта на CMS Drupal на примере темы garland.
Совет №1.
До: page.tpl.php
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ?>
<![endif]-->
После: page.tpl.php
<!--[if lt IE 7]>
<?php print $ie_styles ?>
<![endif]-->
template.php
<?php
function garland_preprocess_page(&$vars) {
$vars['ie_styles'] = garland_get_ie_styles();
}
?>
Разница заключается в том, что все функции были удалены из page.tpl.php. Вместо этого мы устанавливаем переменную в template.php, затем просто указывая эту переменную в page.tpl.php.
Совет №2. Устанавливаем специальные классы для тега body в page.tpl.php
До: page.tpl.php
<body<?php print phptemplate_body_class($left, $right); ?>>
HTML:
<body class="sidebar-left">
template.php
<?php
function phptemplate_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}
if (isset($class)) {
print ' class="'. $class .'"';
}
}
?>
После: page.tpl.php
<body class="<?php print $body_classes ?>">
HTML:
<body class="front logged-in page-node one-sidebar sidebar-left">
Как результат нет надобности использовать дополнительный код в template.php
Совет №3. Перемещение переменных из page.tpl.php в template.php
До: page.tpl.php
<?php
// Prepare header
$site_fields = array();
if ($site_name) {
$site_fields[] = check_plain($site_name);
}
if ($site_slogan) {
$site_fields[] = check_plain($site_slogan);
}
$site_title = implode(' ', $site_fields);
if ($site_fields) {
$site_fields[0] = '<span>'. $site_fields[0] .'</span>';
}
$site_html = implode(' ', $site_fields);
if ($logo || $site_title) {
print '<h1><a href="'. check_url($front_page) .'" title="'. $site_title .'">';
if ($logo) {
print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" />';
}
print $site_html .'</a></h1>';
}
?>
После: page.tpl.php
<?php if ($logo || $site_title): ?>
<h1><a href=" <?php print $front_page ?>" title="<?php print $site_title ?>">
<?php if ($logo): ?>
<img src="<?php print $logo ?>" alt="<?php print $site_title ?>" id="logo" />
<?php endif; ?>
<?php print $site_html ?>
</a></h1>
<?php endif; ?>
template.php
<?php
function garland_preprocess_page(&$vars) {
// Prepare header
$site_fields = array();
if (!empty($vars['site_name'])) {
$site_fields[] = check_plain($vars['site_name']);
}
if (!empty($vars['site_slogan'])) {
$site_fields[] = check_plain($vars['site_slogan']);
}
$vars['site_title'] = implode(' ', $site_fields);
if (!empty($site_fields)) {
$site_fields[0] = '<span>'. $site_fields[0] .'</span>';
}
$vars['site_html'] = implode(' ', $site_fields);
}
?>
Совет №4. Использование собственных префиксов
Garland и ряд других тем всегда использовали "phptemplate_" в качестве префикса для всех его функций. Почему? Префикс "phptemplate_" указывает на функциb принадлежащих PHPtemplate. Эта тема является темой по умолчанию. Конечно, это работает, но темы должны использовать свои собственные префиксы.
До: template.php
<?php
function phptemplate_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return '<div class="breadcrumb">' . implode(' › ', $breadcrumb) . '</div>';
}
}
?>
После: template.php
<?php
function garland_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return '<div class="breadcrumb">' . implode(' › ', $breadcrumb) . '</div>';
}
}
?>