• hooks
  • pantey

hook_preprocess_html();

29.01.2013

Вернёмся к нашим полезностям, а именно сегодня поговорим о хуке hook_preprocess_html(). Данный хук позволяет нам переопределять страницу из собственного модуля, мы будем его использовать для подключения стилей и скриптов к страницам сайта. Как всегда реализацию будем изучать на примере. В моём распоряжении Drupal 7 и шаблон bartik. Приступим, давайте создадим модуль, который реализует следующий функционал, а именно по клику по заголовку блока у нас будет скрываться содержимое блока, в качестве подопытного блока у нас будет выступать блок – «Последние материалы», не забудьте его только вынести в регион, если хотите повторять урок за мной.

Приступим к реализации. Создадим первоначальные файлы модуля, как их создавать и что внутри должно находиться, кто не знает читаем вот здесь.Мой модуль будет называть «hide_block». Создаем файл

hide_block.info

Его содержимое будем таким

name = hide_block
description = hide_block
version = 1.0
package = other
core = 7.x

далее создаём файл

hide_block.module

Его содержимое будем таким

<?php
function hide_block_preprocess_html(&$variables){
	drupal_add_css(drupal_get_path('module', 'hide_block').'/hide_block.css');
	drupal_add_js(drupal_get_path('module', 'hide_block').'/hide_block.js');
}

Теперь чуть подробнее. Как вы видите «hook» мы заменили на название нашего модуля, в результате чего наша фyнкция стала называться

function hide_block_preprocess_html();

в качестве аргумента функция принимает $variables, далее подключаем стиль CSS

drupal_add_css();

и js

drupal_add_js();

в качестве аргументов они получаю относительные пути до файлов (CSS и JS соответственно). Теперь нам необходимо создать эти файлы. Создаем в корне нашего модуля файл с названием

hide_block.css

это как вы понимаете стили, его содержимое будем таким

#block-node-recent .content{
display:none;
}

И так же в корне создаём файл

hide_block.js

Его содержимое будет таким

var $dr = jQuery.noConflict();
$dr(document).ready(function(){
	$dr('#block-node-recent h2').toggle(
		function(){
			$dr('#block-node-recent .content').slideDown(300);
		},
		function(){
			$dr('#block-node-recent .content').slideUp(300);
		}
	);
});

Теперь нам осталось лишь активировать данный модуль и посмотрим, что получилось у нас на сайте

Как мы видим, всё работает. Думаю с данным хуком у вас вопросов не должно возникнуть. Пример работы данного модуля можно скачать отсюда.

Так же хочу заметить, что через данный хук возможно подключить и встроенную библиотеку Jquery или Jquery UI, например подключение элемента из библиотеки Jquery UI будет выглядеть вот так:

<?php
function название вашего модуля_preprocess_html(&$variables) {
  drupal_add_library('system', 'ui.autocomplete');
}
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.