• урок
  • pantey

Файл html.tpl.php в Drupal 7

10.04.2013

Сегодня я продолжаю написание уроков по drupal, как вы наверное заметили, статей не было почти 1.5 месяца, за это прошу вас строго не судить, ибо работа прежде всего, а в последнее время она была изрядно напряжённая. Итак, как вы поняли из названия - речь пойдёт о, возможно, для кого-то новом файле как html.tpl.php. Данный файл так же используется в шаблонах темизации, как и все файлы с расширением .tpl.php.

Для чего же нужен данный файл? Данный файл нужен нам для внесения изменений в <head> страницы. Если вы уже пробовали создавать свои шаблоны для Drupal 7, то наверняка замечали такую особенность, что если даже в файле

page.tpl.php

Не будет ни какого кода, <head> все равно подгрузится. Данный файл является новым и появился лишь в 7й версии drupal, для 6ки <head> мы прописывали в файл

page.tpl.php

К сожалению, встроенный шаблоны в Drupal, не имеют примера данного файла, но я покажу вам, как выглядит данный файл на нашем сайте

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//RU" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<?php print $styles;?>
<?php print $scripts;?>
<title><?php print $head_title;?></title>
</head>
<body>
	<?php print $page_top;?>
	<?php print $page;?>
	<?php print $page_bottom;?>
</body>

А теперь список доступных переменных файла

  1. $css - данная переменная содержит массив стилевых таблиц для страницы
  2. $language – объект, содержащий язык страницы
  3. $language->language - содержит код языка (ru, en)
  4. $language->dir – задаёт направление('ltr' - слева на право,'rtl' - справа на лево – для арабских стран)
  5. $rdf_namespaces - содержит все RDF префиксы документа
  6. $grddl_profile- GRDDL профиль, позволяющий извлеч RDF данные
  7. $head_title - заголовок страницы, который используется в теге title
  8. $head_title_array - ассоциативный массив, содержаший части заголовка страницы
  9. $head- содержимое тега head (в основном различные мета-теги)
  10. $styles – подключает все необходимые стилевые таблицы для страницы
  11. $scripts – подключает все необходимые скрипты для страницы
  12. $page_top - открывает разметку модулей, изменяющих содержимое страницы. Обязательно должна выводится перед контентом
  13. $page - содержание страницы (данные подгружаются из файла page.tpl.php)
  14. $page_bottom- закрывает разметку модулей, изменяющие содержание страницы. Обязательно должна выводится после всего контента
  15. $classes - строка с CSS классами, которые могут быть использованы для изменения вывода содержания, через CSS

Хочу заметить, что данный файл актуален лишь в тех случаях, когда вам необходимо изменить, что-то кардинально на странице, например если вы решили написать сайт на HTML 5, то данный файл вам просто необходим.

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

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

Profile picture for user 1541
gabdrahimov.ru
24.10.2013

а без этих команд
print $styles;
print $scripts;

можно ли как нибудь прописать стили CSS к шаблону?
link rel="stylesheet" href="style.css"

Profile picture for user 1541
gabdrahimov.ru
24.10.2013

всё нашел :)
link rel="stylesheet" href="/sites/all/themes/имя_темы/style.css" />

Profile picture for user pantey
pantey
24.10.2013

если вы переопределите свой head, и откажитесь от вывода стилей и скриптов

<?php print $styles;?>
<?php print $scripts;?>

то адекватное подключение стилей и скриптов устанавливаемых вами модулей никто не гарантирует.

Profile picture for user ftomivec
ftomivec
05.12.2013

спасибо за подсказку

Profile picture for user 1541
wdtime.ru
24.03.2015

drupal way - добавить в info файл темы строку:

stylesheets[all][] = css/style.css

Profile picture for user 1541
Edgars
04.12.2013

Если я создал html.tpl.php, то в page.tpl.php нужно вводить или

Profile picture for user 1541
Edgars
04.12.2013
<html> или  <head>
Profile picture for user 1541
Edgars
04.12.2013

Боже мой! Извините :) теги хеад или хтмл... вот ,что я имел в виду.

Profile picture for user pantey
pantey
04.12.2013

нет не нужно!

Profile picture for user 1541
Гость
08.06.2014

Не понимать. Создал файл. Всё записал. Кеш очистил. Нет результата.

Profile picture for user pantey
pantey
15.06.2014

а какой результат вы хотите получить?

Profile picture for user 1541
alfaq
23.07.2014

При такой замене, в теге head и body не выводятся атрибуты. Это очень не удобно особенно если за атрибут class в body цепляетесь через css. Поэтому тут вот правильнее https://gist.github.com/pascalduez/1417914

Profile picture for user pantey
pantey
24.07.2014

при какой замене? здесь лишь пример как может выглядеть данный файл. А так список переменных прилагается - творите, что хотите.

Profile picture for user 1541
Александр
07.08.2014

Здравствуйте, всегда нахожу что-нибудь полезное на вашем сайте для изучения drupal. Вот столкнулся с проблемой и никак не могу разобраться. Нужно убрать из html все пробелы и переносы строк, сделать всё в одну строку. Пробовал ставить модуль minify, но он проблему не решает. Посмотрел ещё несколько модулей но решение так и не нашёл. Частично проблема решается так.
Заменить в шаблоне html.tpl.php
?php
print $page;
?>

На
$output = str_replace(array("\r\n", "\r"), "\n", $page);
$lines = explode("\n", $output);
$new_lines = array();

foreach ($lines as $i => $line) {
if(!empty($line))
$new_lines[] = trim($line);
}
?>
print implode($new_lines);
?>

Всё работает, но только для массива $page. Как бы сделать чтобы пробелы и переносы вырезались из всех строк и массивов шаблона. Может сможете помочь.

Profile picture for user pantey
pantey
07.08.2014

не очень понимаю для чего вы это делаете, но лучше использовать preg_replace, вместо str_replace.

Profile picture for user 1541
Александр
08.08.2014

Спасибо за ответ.
Так попросил заказчик. Считает что код должен быть в одну строку. В предыдущем проекте на wordpress у него были явные плюсы от яндекса полсе после использования этого приёма. Между апами был сделать только minify html и позиции поползли. Там это делается модулем W3 Total Cache, а в drupal никак не сделать вот и меня теперь мучает.
Пробовал в template.php применить функцию(theme_process_html) к массиву $vars не помогло.
Может можно в шаблоне html.tpl.php использовать какую-нибудь функцию чтобы все строки и массивы загнать в один массив, а потом из него убрать все пробелы и переносы?

Profile picture for user 1541
Blanzh
26.09.2014

> Данный файл нужен нам для внесения изменений в страницы
И не только, я бы даже сказал, это одна из возможностей.

> К сожалению, встроенный шаблоны в Drupal, не имеют примера данного файла
Берд! Drupal имеет папку modules/system, там все примеры можно найти. Более того - это не примеры, а рабочие фалы. Если тема не имеет файла (html.tpl.php, maintenance-page.tpl.php, page.tpl.php и т.д.), то для вывода используются как раз файлы, находящиеся в modules/system.

Profile picture for user pantey
pantey
26.09.2014

Если вы внимательно читали, то здесь упоминается именно шаблоны drupal, которые идут из коробки, а не то где по дефолту забираются данные файлы для формирования страницы.

Profile picture for user 1541
Александр
10.02.2015

Скажите, а как можно отредактировать, что выводит переменная $head?

Profile picture for user pantey
pantey
10.02.2015

hook_preprocess_html()

Profile picture for user 1541
Александр
10.02.2015

А как с помощью hook_preprocess_html() мне удалить (или изменить) вывод favicon?

Profile picture for user pantey
pantey
10.02.2015

favicon меняется в настройках темы.

Profile picture for user 1541
wdtime
22.07.2015

Скажите, можно ли отказаться от rdf и grddl_profile? Т.е. просто вырезать эти переменные из шаблона и doctype указать html. Так ли нужна эта разметка и какие последствия могут быть в связи с указанными действиями? Хочется максимально упростить шаблоны.. не уверен, что мне нужны все эти навороты.

Profile picture for user pantey
pantey
27.07.2015

Можно. Если вы не собираетесь использовать rdf разметку, то последствий нет.

Profile picture for user 1541
wdtime
27.07.2015

RDF разметка дает какое-то принципиальное преимущество? Встречал информацию, что, якобы, в html5 уже не применяется/поддерживается RDF. Так ли это? Или это вообще не связанные вещи?

Profile picture for user 1541
wdtime.ru
14.10.2015

Вас ломанули что ли? С noreply@drupalfly.ru приходят сообщения с ссылкой на виагру в тексте.

Profile picture for user pantey
pantey
14.10.2015

перешлите, письмо если не сложно

Profile picture for user 1541
wdtime.ru
18.10.2015

Выяснилось, у вас проблема или у меня?