Не могу понять как разложить print $content на составляющие

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

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 7:27

Всем привет!
Мне нужно кое-что поправить, добавить на все страницы определенного типа материалов.
Для чего я в 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');
?>

Прошу прощения за скорей всего неправильный синтаксис (я все делаю по примерам, и на нужный пока не наткнулся).
Все что я пока не пробовал приводило к исчезновению контента, белому экрану и т.д.
Подскажите как мне сделать это. Спасибо!

Лучший ответ

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 16:01

Сделал, что нужно было, хотя и не совсем так как хотел.
С помощью $node->content вывел три (их всего три у меня) поля, а из $content исключил их галочкой Exclude в Display Fields. Т.е. $content теперь выводит только body. Соотв. теперь я смогу обернуть поля и body в теги и стили.
Сделал, как посоветовали, в файле node-detali.tpl.php , а не в page-node-detali.tpl.php.
Спасибо за помощь!

Комментарии

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 10:51

Девел поставил, но 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-ом это почему-то не проходит, по крайней мере у меня...

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 10:56

Soldering90 wrote:

Я почитал статьи касательно 7 Друпала, так там да простыми:


<?php
print render ($content['comments']);
?>

В 6-ом это почему-то не проходит, по крайней мере у меня...


Хотя, в данном примере выводится не поле...

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 11:06

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'];
    
?>

и есть объекты ноды? Или не то?

Аватар пользователя Andruxa Andruxa 30 апреля 2018 в 11:46

Soldering90 wrote:

В папку с темой я добавил файл page-node-detali.tpl.php в который я скопировал содержимое файла page.tpl.php

Если надо добраться до содержимого ноды - это надо делать в node.tpl.php

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 12:05

Если делать в node.tpl.php то изменения будут у всех нод а мне для опр. типа материала, для этого создал файл page-node-detali.tpl.php
Или вы имеете ввиду надо создать node-detali.tpl.php ?

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 12:08

Если я в файл page-node-detali.tpl.php копирую содержимое node.tpl.php (хоть из папки темы, хоть из modules/node) то на страницах материалов detali нет ничего кроме тайтла, полей и body, разметки css тоже нет.

Аватар пользователя Soldering90 Soldering90 30 апреля 2018 в 16:01

Сделал, что нужно было, хотя и не совсем так как хотел.
С помощью $node->content вывел три (их всего три у меня) поля, а из $content исключил их галочкой Exclude в Display Fields. Т.е. $content теперь выводит только body. Соотв. теперь я смогу обернуть поля и body в теги и стили.
Сделал, как посоветовали, в файле node-detali.tpl.php , а не в page-node-detali.tpl.php.
Спасибо за помощь!