Вернёмся к нашим полезностям, а именно сегодня поговорим о хуке 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'); }