суббота, 11 декабря 2010 г.

Советы по темизации. Чистим темы от ненужного мусора

Данный материал относится к 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>';
}
}
?>