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

04.12.2009

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

Добавить в блог:

Для вставки в блог анонса данной статьи, скопируйте нижеприведенный код.

Комментарии (3)

А как насчет вывода удаленных тем,ну или хотя бы их количества

Полезный материал,я сейчас как раз разбираюсь с шаблонами. Сейчас ищу пример хорошего user-profile.tpl.php но и это будет полезно.

Такой вопрос: по умолчанию все шаблоны страниц, нод, и т.п. складываются в корень папки с темой, а как сделать чтобы они определялись в любой другой папке, допустим внутри темы создадим папку template и сложим их туда? Где и как это прописывается?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA на основе изображений
Введите символы с картинки, не обращая внимание на пробелы и соблюдая регистр символов.