Ajax Сравнения товаров на Hostcms 5.9.x

#
Ajax Сравнения товаров на Hostcms 5.9.x
Не знаю на сколько актуальна задача, так как на Hostcms 6.x уже реализовано сравнение товаров. Мой же сайт был создан давно на базе Hostcms 5.9.x, решил его доработать, а на hostcms 6.x не хотел обновляться. Поиска на сайте hostcms решение данной задачи, но не чего путного не нашел. И решил сделать сам, оказалось что все очень просто


Подключаем jQuery

<!-- jQuery -->
<script type="text/javascript" src="/hostcmsfiles/jquery/jquery.js"></script>


Cкрипт в теле шаблона

<div class="loading" style="display: none; position: absolute; top: 50%; left: 50%;"><img src="/hostcmsfiles/images/ajax_loader.gif" alt="loading"/></div>
<script type="text/javascript">
  $(document).ready(function(){
  $('a.compare').click(function() {
ShowLoadingScreen();
// Берем id товара
  var id = $(this).attr("id");
$.ajax({
            type: 'POST',
            url: '/shop/?compare_id_' + id ,
            data: "ajax_add_item_id="+ id,
          });
       return false;
    });
});
var loader = $(".loading");
function ShowLoadingScreen()
{
   loader.toggle();
}
function HideLoadingScreen()
{
   loader.toggle();
}
</script>


XSL-шаблон товара:

<a href="#" id ="{@id}" class="compare">Сравнить</a>


Если нужно выводить количество товаров.

То создаем Типовую динамическую страницу
и в настройки вставляем код


<?php
$shop = new shop(true);
/* Обработка сравнения товаров */
/* Десериализуем массив */
if (isset($_COOKIE['SHOPCOMPARE']))
{
   $compare_items = @unserialize($shop->GetCookie('SHOPCOMPARE'));
   $compare_items = to_array($compare_items);
}
else
{
   $compare_items = array();
}

/* Добавление элементов */
   foreach ($_GET as $key => $value)
    {
   /* Выбираем из запроса товары, которые нужно добавить в список для сравнения */
   if (preg_match("/compare_id_(\d*)/u", $key, $matches))
      {
      $compare_id = to_int($matches[1]);
      /* Проверяем, есть ли этот товар в кукисах для сравнения */
      if (!in_array($compare_id, $compare_items))
         {
         /*Добавляем в массив кукисов*/
         $compare_items[] = $compare_id;
         }
       }
     }

/* Устанавливаем кукисы */
if (count($compare_items) > 0)
{
   $shop->SetCookie("SHOPCOMPARE", serialize($compare_items), time() + 31536000, '/');
}
else
{
   $shop->SetCookie("SHOPCOMPARE", '', 0, '/');
   unset($_COOKIE['SHOPCOMPARE']);
}
?>



И в макет для типовой


<?php
/* AJAX добавление товара в корзину */
if (isset($_REQUEST['ajax_add_item_id']))
{
if (isset($_COOKIE['SHOPCOMPARE']))
{
$xsl_name ='СравнениеТоваровКраткое';
/* Указываем идентификатор магазина */
$shop_id = '1';
$shop = & singleton('shop');
$param = array();
$shop->ShowItemsCompare($shop_id, $xsl_name, $param);
}
exit();
}
?>


Создаем узел с название раздела - compare, и указываем типовую

Ну и меняем скрипт
<div class="loading" style="display: none; position: absolute; top: 50%; left: 50%;"><img src="/hostcmsfiles/images/ajax_loader.gif" alt="loading"/></div>
<div id = "little_compare"></div>
<script type="text/javascript">
  $(document).ready(function(){
  var compare = $('#little_compare');
  $('a.compare').click(function() {
ShowLoadingScreen();
// Берем id товара
  var id = $(this).attr("id");
$.ajax({
            type: 'POST',
            url: '/compare/?compare_id_' + id ,
            data: "ajax_add_item_id="+ id,
            success: function(data){
                                    compare.html(data);
                                    HideLoadingScreen();
                                   }
          });
       return false;
    });
});
var loader = $(".loading");
function ShowLoadingScreen()
{
   loader.toggle();
}
function HideLoadingScreen()
{
   loader.toggle();
}
</script>


XSL-шаблон товара:

<a href="#" id ="{@id}" class="compare">Сравнить</a>



XSL-шаблон СравнениеТоваровКраткое:


<xsl:template match="/compare">
      <xsl:value-of select="count(//compare_items/item)"/>
</xsl:template>
#
Re: Ajax Сравнения товаров на Hostcms 5.9.x
Демо бы не помешало
http://www.aiventa.ru
#
Re: Ajax Сравнения товаров на Hostcms 5.9.x
А зачем тебе демо, посмотри как реализована корзина. Примерно так же будет, только без суммы
Авторизация