Какая функция отвечает за вывод?

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

Аватар пользователя lena_elena4 lena_elena4 7 июля 2009 в 9:59

Подскажите, пожалуйста, какая функция в Друпале отвечает за вывод уже в броузер?
Например, создала я модуль, в нем есть хук, который строит блок, в блоке прописываю теги, эти теги при выводе на страницу тупо удаляются. Вот я и хочу посмотреть, какая функция отвечает за вывод. Надо, наверное, в common.inc и ему подобных искать?

Комментарии

Аватар пользователя lena_elena4 lena_elena4 7 июля 2009 в 10:34

У меня фильтр ввода php-формат, потому как я выборку из базы делаю и все остальное и без php никак.
Интересно просто стало, где происходит вывод. Допустим, есть в блоке контент, и где в ядре происходит что-то типа print $content - я думаю, где-то там это вырезается, скорее всего, что-то типа strip_tags() происходит, хочу это место найти.
По идее блок выводится на страницу с помощью темы, которая подключается по умолчанию (theme_block()), смотрела я эту функцию и все с ней связанные - ничего такого там нет.

Аватар пользователя Worth Worth 7 июля 2009 в 11:05

В каждой теме есть файл block.tpl.php, в нем вывод по умолчанию содержимого каждого блока:

<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?> block-<?php print $block->module.'-'.$block->region ?>">
<?php if (!empty($block->subject)): ?>
  <h2><?php print $block->subject ?></h2>
<?php endif;?>
  <div class="content"><?php print $block->content ?></div>
</div>

Если вы сами блок создавали в модуле, то описывали его через хук _block, в который передавали массив, и в этом массиве $block['content'] = содержимое блока. Естественно содержимое в формате html, т.е. теги ест-нно понимаются браузером как теги. Попробуйте

&lt; вместо <
&gt; вместо >
&quot; вместо "  

т.е. если вы хотите вывести на экран строку "<br>", то $block['content']="&lt;br&gt;"

Аватар пользователя lena_elena4 lena_elena4 7 июля 2009 в 12:00

Есть запрос:

<?php
$sql = "SELECT CONCAT_WS('\r\n',td.name,n.title) book_name,
               n.nid nnid,
               td.tid tt,
               th.parent tp
        FROM {node} n
        JOIN {term_node} tn ON tn.nid=n.nid
        JOIN {term_data} td ON td.tid = tn.tid
        JOIN {term_hierarchy} th ON td.tid = th.tid
        WHERE td.vid=%d AND th.parent <>0 AND n.type='library'"
;
?>

Два поля выбираются в один столбец book_name. У меня вот какой момент не получается: в CONCAT_WS ставлю разделитель '\r\n' и строка не переводится(это все вырезается почему-то), т. е. мне нужно, чтобы было:
запись1
запись2
А у меня сейчас запись1запись2 - все на одной строке.
Только что попробовала поставить разделитель
- на страницу выводится
запись1
запись2
Вывод идет через block.tpl.php

Аватар пользователя lena_elena4 lena_elena4 7 июля 2009 в 14:42

Нет, проблема не решена.
Почему, когда я делаю CONCAT_WS('\r\n'

'\r\n' при выводе вырезается, а когда делаю CONCAT_WS('<br>', у меня этот <br> остается неизменным, на страницу выводится в таком виде:

запись1<br>запись2
запись3<br>запись4
Аватар пользователя Worth Worth 9 июля 2009 в 10:15

Осмелюсь предположить, что \r\nвырезается потому что воспринимаются именно как спецсимволы при присвоении значения переменной $sql, и теоретически $sql = @"..." должно помочь. Другое дело, что при выводе в html такие спецсимволы не помогут вам перевести строку.
Могу вам предложить немного модифицировать запрос $sql = "SELECT td.name, n.title, n.nid nnid ...
а потом при выводе результатов запроса в блок записывать уже <?phpprint $row->name."<br>".$row->title;?>