Не знаю на сколько актуальна задача, так как на 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>