Сегодня 23 мая, четверг ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7273
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Сайт Ильи Азарова.
Сайт Ильи Азарова.
Голосов: 2
Адрес блога: http://brainstorm.name
Добавлен: 2008-03-13 01:05:02
 

Drupal. Вывод страницы минуя стандартные шаблоны темы оформления.

2011-10-06 01:53:48 (читать в оригинале)

Drupal
Drupal 6
Темизация

Задача: в Drupal 6 есть модуль, для которого надо написать обработчик меню, выводящий контент таким образом, что загружены все системные CSS и JS, но при этом от между тэгами <body> и </body> находится только контент хандлера меню.

Данная задача нужна, например когда необходимо вывести определенный контент без  оформления в iframe или в отдельном окне, но при этом сохранить полную работоспобность Javascript.

Решение оказалось на поверхности.(далее код для drupal 6)

Пусть модуль называется mymod. 

Возьмем стандартный page.tpl.php из phpengine от Drupal. Положим в папку модуля под именем empty.page.tpl.php. И приведем к следующему виду:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php print $language->language ?>" xml:lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">

<head>
<title><?php print $head_title ?></title>
<?php print $head ?>
<?php print $styles ?>
<?php print $scripts ?>
<script type="text/javascript"><?php /* Needed to avoid Flash of Unstyle Content in IE */ ?> </script>
</head>

<body>
<?php print $content; ?>
<?php print $closure ?>
</body>
</html>

Фактически мы оставили в теле документа только вывод переменных $content и $closure.

А дальше, если взглянуть, как Drupal выводит страницу, минуя шаблонизатор, можно понять, что он делает это через template_preprocess(),   template_preprocess_page() и theme_render_template() - основной минимум для вывода страницы. Нам остается задействовав функцию theme_render_template() сделать все то же, что делает Drupal и завершить выполнение скрипта.

Вот примерный код такого хандлера меню:

function mymodule_menuhandler() {
  drupal_set_title('Заголовок');
  $out = 'Какой-то контент, который выводится модулем';
  // тут начинается наше колдунство :)
  init_theme();
  $vars = array('content' => $out);
  template_preprocess($vars, 'page');
  template_preprocess_page($vars);
  $out = theme_render_template(drupal_get_path('module', 'mymodule') . '/empty.page.tpl.php', $vars);
  print $out;
  // завершаем скрипт
  exit();
}

Проблема решена. Плюс такого решения - не надо перекрывать такого рода ситуации в основной теме оформления. Для некоторых административных элементов сайта это может быть просто необходимо(не менять же тему оформления ради 10 страниц модуля, для которых задача требует быть такими в обязательном порядке? :) ).




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по количеству голосов (152) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.