Новый регион между контентом и комментариями

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

Аватар пользователя smirn0ff smirn0ff 23 мая 2012 в 18:09

Задача такая: создать регион между контентом и комментариями к нему. Прочитал о том как как создавать новый регион. В итоге в файле page.tpl.php нашел место где выводиться контент


<?php if ($page['content']): ?>                                
                              <?php print render($page['content']); ?>                          
                            <?php endif; ?>

Но как же сделать регион именно между концом контента страницы и комментариями. Я так понимаю 'content' в это файле цельная часть включающая сам контент и комментарии. В каком файле копать в таком случае?

Комментарии

Аватар пользователя smirn0ff smirn0ff 23 мая 2012 в 20:08

вот код, подскажите куда именно вставить этот код

<?php?>
<div id="node-<?php print $node->nid?>" class="<?php print $classes?> clearfix"<?php print $attributes?>>
  <?php print $user_picture?>

  <?php print render($title_prefix); ?>
  <?php if (!$page): ?>
    <h2<?php print $title_attributes?>><a href="<?php print $node_url?>"><?php print $title?></a></h2>
  <?php endif; ?>
  <?php print render($title_suffix); ?>

  <?php if ($display_submitted || !empty($content['links']['terms'])): ?>
    <div class="meta">
      <?php if ($display_submitted && isset($submitted) && $submitted): ?>
        <span class="submitted"><?php print $submitted?></span>
      <?php endif; ?>

      <?php if (!empty($content['links']['terms'])): ?>
        <div class="terms terms-inline">
          <?php print render($content['links']['terms']); ?>
        </div>
      <?php endif; ?>
    </div>
  <?php endif; ?>

  <?php if (!$teaser): ?>
    <div id="node-top" class="node-top region nested">
      <?php print render($node_top); ?>
    </div>
  <?php endif; ?>
  
  <div class="content"<?php print $content_attributes?>>
  
    <?php
      
// We hide the comments and links now so that we can render them later.
      
hide($content['comments']);
      
hide($content['links']);
      print 
render($content);
      
    
?>
    
    <div id="comment-node"><script type="text/javascript" src="//yandex.st/share/share.js" charset="utf-8"></script>
        <div class="yashare-auto-init" data-yashareL10n="ru" data-yashareType="none" data-yashareQuickServices="yaru,vkontakte,facebook,twitter,odnoklassniki,moimir,lj,gplus">
        </div> 
    
  </div>
  

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

  <?php if (!$teaser): ?>
    <div id="node-bottom" class="node-bottom region nested">
      <?php print render($node_bottom); ?>
    </div>
  <?php endif; ?>
  
</div>
?>

Аватар пользователя ser_house ser_house 24 мая 2012 в 6:10
    <?php
      // We hide the comments and links now so that we can render them later.
      hide($content['comments']);
      hide($content['links']);
      print render($content);
     
    ?>

->

    <?php
      // We hide the comments and links now so that we can render them later.
      hide($content['comments']);
      hide($content['links']);
      //Если наш регион существует - скрываем его перед выводом содержимого
      if (isset($content['my_region'])) {
        hide($content['my_region']);
      }
      //Выводим содержимое
      print render($content);
      //Если это страница ноды и наш регион существует,
      if ($page && isset($content['my_region'])) {
        //то выводим его
        print render($content['my_region']);
      }
      //Выводим всё, что идет после содержимого, в том числе и комментарии
      ...
    ?>
Аватар пользователя ser_house ser_house 24 мая 2012 в 21:23

"drupby" wrote:
а откуда регионы в $content ?
я думал они в page[]

Да это я у себя пихал поначалу. Сейчас рефакторю тот код, вот и попался под руку.

Чего это они в page[]? Куда запхаешь, там и будут.

ТС, как сделано у меня сейчас:

theme.info

  regions[below_node] = Below node

template.php

function THEME_preprocess_node(&$variables) {
  //бла-бла-бла
  $variables['below_node'] = block_get_blocks_by_region('below_node');
}

node.tpl.php

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

В node.tpl.php я пропустил всю разметку, думаю сами справитесь.

Суть в том, что перед выводом основного содержания ($content) мы скрываем из него всякие ненужности в данный момент, типа комментариев (поскольку они в $content['comments']), затем выводим сам $content (то что hide - не выводится).
После него выводим свой регион, заполнили мы его в препроцессе ноды.
Затем выводим остальное, например - комментарии.

По содержимому региона.
Если необходима возможность из админки таскать мышкой блоки в новый регион, то для его заполнения в препроцессе используем block_get_blocks_by_region.

Если это необязательно, можно заполнять любым другим способом.