вывод ответа в виде xml [Решено]

Главные вкладки

Аватар пользователя serega111 serega111 5 января 2013 в 11:47

Создаю модуль, который будет работать с внешним сервисом. этот сервис делает переодические запросы к отпределенным URL на сайте и ожидает ответ в виде XML. в hook_menu я определил эти URL. Но насколько я понимаю, по умолчанию друпал обернет вывод callback'а в html через систему темизации. Подскажите как полностью отключить темизацию для данной страницы и вывисти чистый xml.

Комментарии

Аватар пользователя serega111 serega111 28 января 2013 в 15:31

часть проблемы решил через темизацию. в theme_preprocess_html добавил код
if ($_GET['q'] == 'special/url')
$vars['is_xml'] = true;
else
$vars['is_xml'] = false
и в html.tpl.php
<?php if ($is_xml): ?>
<?php print $page; ?>
<?php else: ?>
//обычный html.tpl.php
<?php endif; ?>
Также сделал файл page--special--url.tpl.php
со строчкой <?php print $xml; ?>
и в theme_preprocess_page добаыил
if ($_GET['q'] == 'special/url')
$vars['xml'] = $vars['page']['content']['system_main']['main']['#markup']; //тут находится контент возвращенный из page callback
Так же добавляем drupal_add_http_header('Content-type', 'text/xml; utf-8'); в page callback или theme_preprocess_page. Первое, я думаю, правильнее.

Но осталась проблема - выводятся блоки и регионы, хотя я их не выводил и в $vars['xml'] их нет.
подскажите, можно ли программно отключить все блоки для страницы?
Я понимаю, что можно пойти в настройки блоков и отключить их для данной страницы, но блоков много, и в будущем они могут быть добавлены еще. руками как то не очень удобно это делать

Аватар пользователя serega111 serega111 6 января 2013 в 13:05

Ошибся в одном месте, поэтому выводились все блоки.
Того что описано, достаточно чтобы вывести только контет из page callback в том виде, который необходим. в моем случае это xml