Вы здесь

Как настроить блок сравнения товара с помощью модуля Node Compare

0

Доброго времени суток всем

Нашел очень удобный модуль для сравнения нод, я использую для сравнения товаров Ubercart - Node Compare, но есть один момент, который если можно было бы поправить, то вообще все было бы идеально для меня по крайней мере.

Суть проблемы в работе модуля следующая (а может и не модуля):

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

Думал у меня это только так, но нет на странице с демо-версией - http://nb7demo.drupalka.ru/- если добавить к сравнению товары, а потом очистить блок сравнения и начать перезагружать страницу - это можно наблюдать так же.

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

Что я делал:

  1. Прописывал дополнительно css стили display:none к блоку
  2. Менял очередность загрузки css, чтобы css стиль применить в блоку сравнения и к классу появляющемуся у него, когда он пустой, в первую очередь
  3. Убирал заголовок совсем, но так как не красиво смотрится, и не понятно сразу получается
  4. Прописывал стили в head

Что я делаю может не так и как можно эту задачу решить?

Заранее спасибо за ответ

Версия Drupal: 
7.x
Связанные проекты: 
Node Compare
Вопрос задан 03.01.2016 - 13:59

Ответы

1

блок скрывается с помощью js путем добавления класса empty. Как вариант, переопределить theme_compare_block_content в своей теме и добавлять класс empty к нужному элементу (см. js) если нет нод для сравнения, чтобы стиль применялся сразу при загрузке страницы

Ответ дан 03.01.2016 - 19:07

Дело в том, что я с программированием на "ВЫ", но немного знаком.

  1. Как переопределить theme_compare_block_content в своей теме?
    как я понял, это нужно прописать в свою тему куда то?:
function theme_node_compare_block_content($vars) {
  $output = '';
  if (isset($_SESSION['node_compare']['nids'])) {
    $sess = $_SESSION['node_compare'];
    $rows = array();
    foreach ($sess['nids'] as $nid => $title) {
      $rows[] = array($title, theme('node_compare_toggle_link', array('nid' => $nid, 'block' => TRUE)));
    }
    if (count($sess['nids']) > 1) {
      $options = array(
        'attributes' => array(
          'class' => array('compare-block-links'),
        ),
      );
      $links = array();
      $links[] = l(t('Compare Selected'), 'compare/me', $options);
      $options['query'] = drupal_get_destination();
      $options['attributes']['class'][] = 'use-ajax';
      $links[] = l(t('Clear'), 'compare/clear/nojs', $options);
      $rows[] = $links;
    }
    $output = theme('table', array('header' => NULL, 'rows' => $rows));
  }
  if (isset($_SESSION['node_compare_history'])) {
    $items = array();
    foreach ($_SESSION['node_compare_history'] as $date => $link) {
      $items[] = l(format_date($date), $link);
    }
    $output .= theme('item_list', array('items' => $items, 'title' => t('Your recent comparisons:')));
  }
  return $output;
  1. Как добавлять класс empty к нужному элементу?
    как я понял, это нужно прописать в свою тему куда то?:
 // Hiding empty block with nodes for comparison.
      if ($.trim(itemsBlockContent.text()) === "") {
        itemsBlock.addClass('empty');
      } else {
        itemsBlock.removeClass('empty');
      }

Если можно, подскажите, что именно и куда нужно вставить, чтобы все заработало как нужно

Комментарий оставлен 03.01.2016 - 20:47

Поискав решение, вроде как понял, что можно переопределить - theme_compare_block_content в файле template.php, который находится в моей теме, верно ли это?

А jquery код нужно, отвечающий за добавление класса к пустому блоку сравнения, вставить в js файл в моей теме, верно ли это?

Комментарий оставлен 04.01.2016 - 13:17

Я немного ошибся с выбором функции. в template.php вашей темы добавьте такую функцию

function my_theme_name_preprocess_block(&$variables) {
  if ($variables['block']->delta == 'node_compare_items' && empty($_SESSION['node_compare']['nids']) && empty($_SESSION['node_compare_history'])) {
    $variables['classes_array'][] = 'empty';
  }
}

my_theme_name заменить на имя темы. код не тестировал, но надеюсь, что будет работать

Комментарий оставлен 04.01.2016 - 16:57

Так получилось, что одновременно ответили и вы и автор модуля, ваш вариант рабочий, благодарю за помощь. Единственное автор модуля порекомендовал "не дергать сессии".

В общем вопрос решен, может кому пригодится, вот код без сессий(с сессиями выше):

function НАЗВАНИЕ-ТЕМЫ_preprocess_block(&$variables) {
  if ($variables['block']->delta == 'node_compare_items') {
    $variables['classes_array'][] = 'empty';
  }
}
Комментарий оставлен 04.01.2016 - 18:24