Drupal 4.7.x:
<?php
print '<ul>';
foreach ($primary_links as $link) {
print '<li>'. $link .'</li>';
}
print '</ul>';
?>
Drupal 5.x:
<?php
print theme('links', $primary_links);
?>
Функция theme_links()
вернёт список ссылок. Дополнительно, в ключах ссылок теперь используются названия ModuleName-LinkName (например menu-1-3-4, node-read-more или comment-add-new). Дополнительную информацию можно найти на странице Converting 4.7.x modules to 5.x docs.
Drupal 4.7.x:
theme('stylesheet_import', base_path() . path_to_theme() . '/extra_stylesheet.css')
или
theme_add_style($themes[$theme]->filename)
Drupal 5.x:
drupal_add_css($path = NULL, $type = 'module', $media = 'all')
Это изменение позволяет добавлять легче и однообразно добавлять CSS, а также лучше использовать каскадность стилей (сначала загружаются стили ядра, затем стили модулей и в последнюю очередь стили темы).
В PHPTemplate (page.tpl.php) в связи с этим изменением стала также доступна переменная $css
, которая содержит массив всех CSS-файлов текущей страницы. Переменная $styles
по-прежнему актуальна и занимается загрузкой CSS-файлов, но если вы захотите на уровне темы отменить загрузку определённых CSS-файлов (например drupal.css), сделать это стало намного легче.
<?php
// print $styles;
// we don't need to print out $styles since we want to take out drupal.css
unset($css['core']['misc/drupal.css']);
print drupal_get_css($css);
?>
Отметьте: переменная $css
получает своё значение до запуска page.tpl.php. Таким образом вызов drupal_add_css()
из page.tpl.php не изменит значение переменной $css
. Используйте вызов drupal_add_css()
в template.php или модуле. Если вы всё таки хотите добавить CSS-файл из page.tpl.php, то вам нужно сбросить значение переменной $css
или не использовать его вообще.
// page.tpl.php code:
<?php
drupal_add_css(path_to_theme().'/override-defaults.css', 'core', 'all'); // consider 'theme' instead of 'core'
print drupal_get_css(); // don't add $css to the params
// equivalent, but longer code here:
$css = drupal_add_css(); // reset the value of $css (will now contain "override-defaults.css")
print drupal_get_css($css); // add $css to the params
?>
Ссылки: Simplify adding CSS in Drupal (issue), How to properly add CSS files (Lullabot) (previous, 4.7.x and lower versions of Drupal).
В связи с вышеупомянутым изменением, введена новая функция drupal_get_css()
, которая вызывает drupal_add_css()
. Это позволяет загружать CSS-файлы в определённом порядке — сначала стили ядра, затем стили модулей и в последнюю очередь стили темы. Это гарантирует правильное использование каскадности стилей и их лёгкого перекрытия модулями и темами.
В шаблоне page.tpl.php теперь доступна переменная $feed_icons
, которая выводит значок RSS. Дополнительную информацию можно найти на странице Converting 4.7.x modules to 5.x (New drupal_add_feed() and drupal_get_feeds replaces theme_add_link()).
Ранее, класс использовавшийся для очистки элементов страницы выглядел как:
<br class="clear" />
Однако, использование этого класса добавляет на страницу совершенно не нужные переводы строк, только из-за того, что нужно сделать очистку выравнивания элементов. Этот класс был отменён в пользу решения Clearing a float container without source markup. Новый очищающий класс полностью основан на CSS и не вносит в страницу дополнительную разметку.
Чтобы правильно использовать новый класс, его нужно применять сразу к контейнерному элементу.
Drupal 4.7.x:
<div>
Some text here.
<br class="clear" />
</div>
Drupal 5.x:
<div class="clear-block">
Some text here.
</div>
theme_links()
теперь возвращает корректный список ссылок. Кроме того, к пунктам теперь добавляются удобные классы first и last.
Код
<?php
print theme('links', $primary_links);
?>
вернёт подобный список пунктов основных ссылок
<ul class="links">
<li class="first menu-1-1-52"><a href="/drupalCVS/?q=test" title="" class="menu-1-1-52">test</a></li>
<li class="menu-1-2-52"><a href="/drupalCVS/?q=test2" title="" class="menu-1-2-52">test2</a></li>
<li class="last menu-1-3-52"><a href="/drupalCVS/?q=test3" title="" class="menu-1-3-52">test3</a></li>
</ul>
Дополнительно, можно использовать параметры в theme_links()
для добавления в классы идентификатора:
<?php
print theme('links', $primary_links, array('class' =>'links', 'id' => 'navlist'));
?>
такой код вернёт подобный список пунктов основных ссылок
<ul class="links" id="navlist">
<li class="first menu-1-1-52"><a href="/drupalCVS/?q=test" title="" class="menu-1-1-52">test</a></li>
<li class="menu-1-2-52"><a href="/drupalCVS/?q=test2" title="" class="menu-1-2-52">test2</a></li>
<li class="last menu-1-3-52"><a href="/drupalCVS/?q=test3" title="" class="menu-1-3-52">test3</a></li>
</ul>
В Drupal 4.7.x, файлы JavaScript добавлялись в заголовок страницы вызовом drupal_set_html_head()
.
В Drupal 5.x, файл JavaScript и параметры добавляются вызовом drupal_add_js($data = NULL, $type = 'module', $scope = 'header', $defer = FALSE, $cache = TRUE). Эту функцию можно использовать в теме сразу после drupal_get_css()
.
Также, в шаблоне page.tpl.php появилась новая переменная — $scripts
, которая позволяет загружать файлы скриптов. Переменная позволяет использовать параметры и если вы хотите отменить загрузку определённых скриптов на уровне темы (например autocomplete.js), то можно использовать подобный код:
<?php
// we don't need to print out $scripts since we want to take out autocomplete.js
// print $scripts;
// this returns the array of JavaScript files for the header
$js = drupal_add_js(NULL, NULL, 'header');
unset($js['module']['misc/autocomplete.js']);
print drupal_get_js('header', $js);
?>
Ссылка: Streamline JavaScript addition and add settings storage (issue).
Drupal 4.7.x:
<?php
function _phptemplate_callback($hook, $variables = array(), $file = NULL) {
?>
Drupal 5.0:
<?php
/**
* Execute a template engine call.
*
* Each call to the template engine has two parts. Namely preparing
* the variables, and then doing something with them.
*
* The first step is done by all template engines / themes, the second
* step is dependent on the engine used.
*
* @param $hook
* The name of the theme function being executed.
* @param $variables
* A sequential array of variables passed to the theme function.
* @param $suggestions
* An array of suggested template files to use. If none of the files are found, the
* default $hook.tpl.php will be used.
* @return
* The HTML generated by the template system.
*/
function _phptemplate_callback($hook, $variables = array(), $suggestions = array()) {
?>
Идентификатор pager
теперь стал классом, т.к. он может использоваться на странице несколько раз и использование для него идентификатора нелогично. Таким образом, запись #pager
нужно поменять на .pager
.
Ссылка: theme_pager : id="pager" to class="pager" (issue).
Drupal 4.7.x:
<?php
theme_form_element($title, $value, $description = NULL, $id = NULL, $required = FALSE, $error = FALSE)
?>
Drupal 5.x:
<?php
theme_form_element($element, $value)
?>
Ссылка: http://api.drupal.org/api/function/theme_form_element/5.
В Drupal 4.7.x существовала функция module_exist(), которая позволяла проверить существование модуля. В Drupal 5.x она переименована в module_exists(), чтобы более соответствовать PHP функции function_exists
.
Например в форме поиска, ID изменён с id="search_form"
на id="search-form"
.