[FAQ] Создаем сворачивающиеся комментарии

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

Аватар пользователя makkon makkon 2 января 2012 в 21:03

Гугл выкидывает по поиску на одну тему на д.орг, в которой материал по данной теме так и не помог мне сделать рабочий вариант.
Предлагаю следующее:
1) Чтобы сделать свернутые комментарии - нужно выставить в нужном типе материалов показ комментариев на текущей странице, затем (я использую zen) в template.php

function yourthemename_preprocess(&$variables,$hook){
  if ($hook == 'box') {
  $content = $variables['content'];
  // Здесь можно проверить тип ноды, если надо ($variables['node']->type)
  if(!empty($variables['title'])) {
    $collapsed=($variables['title'] == t('Post new comment'));
    $element = array(
      '#type' => 'fieldset',
      '#title' => $variables['title'],
      '#collapsible' => TRUE,
      '#collapsed' => $collapsed,
      '#attributes' => array('class'=>'comment-box'),
      '#value' =>  $content,
    );
  unset($variables['title']);
  $variables['content']=theme('fieldset',$element);
}}}

Обновить кеш и в результате форма комментирования будет спрятана под спойлером.
2) Чтобы запехнуть под спойлер вобще весь блок комментариев, нужно создать js файл - например comments.js, подключить его к теме (theme.info в zen) и в файле прописать

$(document).ready(function() {
  $( 'div[id^=comments]' ).each(function(index, comments) {
        var $comments = $( comments );
        if ($comments.length == 0) return;
        var count = $comments.find('.comment').size();
        var label = Drupal.formatPlural(count, 'Комментариев: 1', 'Комментариев: count');
        if (count==0)
        {
                var label = "Нет комментариев";
        }
        var $legend = $(document.createElement('legend')).html(label);
        var fsetclass = 'comments collapsible' + (location.href.search(/#(comment|new)/) == -1 ? ' collapsed' : '');
        var $fset = $(document.createElement('fieldset')).addClass(fsetclass);
        $fset.insertBefore($comments).append($legend).append($comments);
        Drupal.behaviors.collapse($fset.parent());
  });  
});

это позволит выводить блок комментариев в виде
Комментариев: X, либо
Нет комментариев когда их нет в виде коллапс заголовка, щелкнув на который, можно будет просмотреть или добавить новые комментарии.
Надеюсь поможет.

Кстати как доработать comments.js? У меня он топорный думаю.

Комментарии

Аватар пользователя alex_shut alex_shut 2 января 2012 в 23:26

прикольно))
А не лучше в момент когда нет комментариев написать "оставить комментарий" или чтот тип того?
Ну вроде как народу привычно кликать на надпись типа "3 комментария" чтоб их прочесть. Но не так часто вроде догадываются кликнуть на "нет комментариев" чтоб оставить первый.

Аватар пользователя makkon makkon 2 января 2012 в 23:33

возможно и лучше. там додумаем когда заполнять надумаем.
главное, что это работает=)
кстати раз уж ссылку дал, как по производительности сайт? обычно у меня только на патроле сайты летают, а этот на 201-м руцентра=)

Аватар пользователя makkon makkon 3 января 2012 в 1:29

"ХулиGUN" wrote:
"ХулиGUN" wrote:
Много лишнего и ненужного кода

ну а если более дельно? я готов критику принимать. учитывая, что я кодить не умею, там довольно много лишнего

Аватар пользователя alex_shut alex_shut 2 января 2012 в 23:51

"makkon" wrote:
как по производительности сайт

ну у меня открывало норм вполне. Правда скорость 20 мегабит у моего инета.

Аватар пользователя makkon makkon 3 января 2012 в 1:31

"Vlk" wrote:
А на jQuery slideToggle не проще ли вышло бы?

зачем лишние библиотеки яваскриптовские подрубать, если есть у друпала встроенное?

Аватар пользователя mak-vardugin mak-vardugin 3 января 2012 в 16:32

"ХулиGUN" wrote:
Много лишнего и ненужного кода

возьми да сократи, ато ходят тут : "горизонт завален", "моя бабушка лучше пишет"....