Как исключить $node->body из $content в node.tpl.php?

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

Аватар пользователя naked_child naked_child 25 октября 2009 в 1:16

Имею тип данных с ССК-полями. Задача -- убрать из отображения ноды отображение $node->body. Ищу корректное решение уже несколько дней.

Из некорректных решений нашёл/придумал одно: в node.tpl.php написать типа


 <?php $content preg_replace('`^<p>.+?</p>`','',$content1);?>
 <?php print $content ?>

Понятно, что подобное решение работоспособно лишь в тепличных условиях.

Также посмотрел в сторону модуля Contemplate. Этот модуль, к сожалению, вынуждает почти всю логику темизации писать в шаблоне самому. Я же ищу возможность прописать в каком-либо хуке до начала формирования переменной $content строчки вида

<?php
  $node
->body_backup=$node->body;
  unset(
$node->body);
?>

и позволить друпалу дальше нормально формировать $content. Такое вообще возможно?

Комментарии

Аватар пользователя naked_child naked_child 25 октября 2009 в 1:30

а) Я не знаю, как в типе материала вообще убрать body в том числе из редактора. Вернее, знаю, как это сделать, если тип данных создавать своим модулем. Если это можно сделать через интерфейс или дополнительным модулем -- буду рад подсказке.

б) $node->body сам по себе используется при темизации некоторых полей -- иногда к ним подклеивается (задача так поставлена была, извините). То есть не нужно именно вхождение в отображение самого по себе $node->body.

в) Если решить пункт а), то мне будет не влом пробежаться по созданным материалам и перенести body в некое CCK-поле, после чего отключить body -- мешается только.

Аватар пользователя naked_child naked_child 25 октября 2009 в 1:43

Я писал про него в исходном сообщении. Он всем хорош, кроме того, что сложную темизацию (с использованием вкладок, например) вынуждает делать полностью руками. Например, для темизации с модулем CCK Fieldset Tabs это сильно нетривиально.

Аватар пользователя Ромка Ромка 25 октября 2009 в 1:52

"naked_child" wrote:
а) Я не знаю, как в типе материала вообще убрать body в том числе из редактора. Вернее, знаю, как это сделать, если тип данных создавать своим модулем. Если это можно сделать через интерфейс или дополнительным модулем -- буду рад подсказке.

В свойствах типа контента нужно оставить пустую строку в поле с названием поля "body", тогда оно не будет отображаться в форме редактирования материала.

"naked_child" wrote:
Задача -- убрать из отображения ноды отображение $node->body. Ищу корректное решение уже несколько дней.

Смотрите в сторону функции template_preprocess_node.

Аватар пользователя naked_child naked_child 25 октября 2009 в 2:00

В template_preprocess_node в $node->body лежит уже сформированный текст ноды, вместе с участием в нём исходного $node->view (простите за тавтологию). Тут, скорее, помогло бы перекрытие функции node_view, стоящей в начале формирования $content -- но как?

За совет с отключением поля body в админке спасибо!

Аватар пользователя vasiliy0s vasiliy0s 27 сентября 2011 в 17:30

А у меня после удаления значения из Body field label не сохраняются никакие изменения в материале! Подскажите, в чем может быть дело?
drupal 6.22