Всем привет!
Мне нужно кое-что поправить, добавить на все страницы определенного типа материалов.
Для чего я в template.php добавил:
<?php
function a3_atlantis_preprocess_page(&$vars, $hook) {
if ($vars['node']->type == "detali") {
$vars['template_files'][] = "page-node-" . $vars['node']->type;
}
}
?>
В папку с темой я добавил файл page-node-detali.tpl.php в который я скопировал содержимое файла page.tpl.php
Не знаю, правильно ли было скопировать оттуда, но так мне удалось получить тоже представление материала, что было до этого.
Для проверки я удалил строчку <?php print $right ?> в контейнере "sidebar-right", на страницах типа "detali" сайтбар удалился - вроде работает.
В содержимом страниц типа detali у меня есть три поля и ниже само содержимое (давно было - вроде это поле по-умолчанию, я его не создавал).
Текущий шаблон сейчас выглядит вот так:
<?php
// $Id: page.tpl.php,v 1.1.4.4 2008/08/23 20:58:56 johnforsythe Exp $
?><!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>
<meta http-equiv="Content-Style-Type" content="text/css" />
<?php print $head ?>
<?php print $styles ?>
<?php print $scripts ?>
</head>
<body>
<div id="container">
<div id="page"<?php if (!$left) { print " class='wide-page'"; } ?>>
<div id="main">
<div id="content">
<?php print $header ?>
<?php if ($mission) { ?><div id="mission"><?php print $mission ?></div><?php } ?>
<div class="tabs"><?php print $tabs ?></div>
<?php if ($title) { ?><h1 class="title"><?php print $title ?></h1><?php } ?>
<?php print $help ?>
<?php if ($show_messages && $messages) { print $messages; } ?>
<?php print $content ?>
<?php print $breadcrumb ?>
</div>
<div id="right">
<?php if ($left) { ?>
<div id="sidebar-left">
<?php print $left ?>
</div>
<?php } ?>
<?php if ($right) { ?>
<div id="sidebar-right">
<?php print $search_box ?>
<?php print $right ?>
</div>
<?php } ?>
</div>
<div class="clear-both"></div>
</div>
<div id="header">
<div id="title">
<?php if ($site_name) { ?><h1><a href="<?php print $base_path ?>" title="<?php print t('Home') ?>"><?php print $site_name ?></a></h1><?php } ?>
<?php if ($site_slogan) { ?><div class='site-slogan'><?php print $site_slogan ?></div><?php } ?>
<div id="title-spacer"></div>
</div>
<div id="nav">
<?php if (isset($primary_links)) { ?><?php print theme('links', $primary_links, array('class' =>'links', 'id' => 'navlist')) ?><?php } ?>
<script type="text/javascript" src="//yandex.st/share/share.js"
charset="utf-8"></script>
</div>
</div>
<div id="footer">
<?php print $footer_message . $footer ?>
</div>
</div>
</div>
<?php print $closure ?>
</body>
</html>
?>
Все значения полей выводятся переменной:
<?php print $content ?>
Можно ли как-то разложить ее на компоненты, типа:
<?php
print $content('field-1');
print $content('field-2');
print $content('field-3');
?>
Прошу прощения за скорей всего неправильный синтаксис (я все делаю по примерам, и на нужный пока не наткнулся).
Все что я пока не пробовал приводило к исчезновению контента, белому экрану и т.д.
Подскажите как мне сделать это. Спасибо!
Комментарии
Быстрее и проще всего Вам будет поставить devel и посмотреть в dsm($content), скорей всего там билды и выводить их надо будет через render.
Девел поставил, но dsm($content) выдает что-то не то, выдает просто типа html-разметку. Названия полей там кстати видно (в названии классов дивов фигурируют).
Вкладка "Devel" (там где "просмотр", "изменить", "Devel") показывает что-то более вменяемое, например одно из полей:
field_naimen (Array, 1 element)
0 (Array, 1 element)
value (String, 6 characters ) 201ST4
Мне удалось вывести три поля, таким образом:
<?php
print $node->content[field_naimen]['field']['#title']. ': ' .$node->field_naimen[0]['view'];
?><br>
<?php
print $node->content[field_volume]['field']['#title']. ': ' .$node->field_volume[0]['view'];
?><br>
<?php
print $node->content[field_location]['field']['#title']. ': ' .$node->field_localion[0]['view'];
?>
А вот содержимое (body) пока не получилось, пробовал так:
<?php
print $node->field_body[0]['view'];
?>
и так:
<?php
print $node->body[0]['view'];
?>
Поле body у меня содержит текст, картинку и ссылку. Возможно ['view'] - неприменимо к такому содержимому, пока не нашел инфу об этом.
Кстати, в первом варианте с field_body ничего не происходит, во втором просто body пропадают почти все элементы страницы.
А можете дать ссылку на материал, где описано как выводить через рендеринг? Заранее спс!
Я почитал статьи касательно 7 Друпала, так там да простыми:
<?php
print render ($content['comments']);
?>
В 6-ом это почему-то не проходит, по крайней мере у меня...
Хотя, в данном примере выводится не поле...
В шестом не было рендер-массивов.
Работали напрямую с объектом ноды.
Semantics, я правильно понимаю, что вот это:
<?php
print $node->content[field_part]['field']['#title']. ': ' .$node->field_part[0]['view'];
?><br>
<?php
print $node->content[field_nalich]['field']['#title']. ': ' .$node->field_nalich[0]['view'];
?><br>
<?php
print $node->content[field_price]['field']['#title']. ': ' .$node->field_price[0]['view'];
?>
и есть объекты ноды? Или не то?
Объект ноды он один $node, а это свойства - в которых содержатся поля и иная информация.
Если надо добраться до содержимого ноды - это надо делать в node.tpl.php
Если делать в node.tpl.php то изменения будут у всех нод а мне для опр. типа материала, для этого создал файл page-node-detali.tpl.php
Или вы имеете ввиду надо создать node-detali.tpl.php ?
Если я в файл page-node-detali.tpl.php копирую содержимое node.tpl.php (хоть из папки темы, хоть из modules/node) то на страницах материалов detali нет ничего кроме тайтла, полей и body, разметки css тоже нет.
Это, правда, от семёрки, но смысл в общем-то тот же.
Сделал, что нужно было, хотя и не совсем так как хотел.
С помощью $node->content вывел три (их всего три у меня) поля, а из $content исключил их галочкой Exclude в Display Fields. Т.е. $content теперь выводит только body. Соотв. теперь я смогу обернуть поля и body в теги и стили.
Сделал, как посоветовали, в файле node-detali.tpl.php , а не в page-node-detali.tpl.php.
Спасибо за помощь!