Хочу поделится. сделал для себя.
Работает, но еще требует некоторого "причесывания".
п.0.
Что имеем: п.0.1. В
/templates/default/category/category_default.php генерируется форма для каждого товара:
<form name = "product" method = "post" action = "<?php print $this->action?>" >
<input type = "text" name = "quantity" value="1" />
<input type = "submit" value = "<?php print _JSHOP_ADD_TO_CART?>" onclick="jQuery('#to').val('cart')"/>
<input type="hidden" name="to" id='to' value="cart" />
<input type = "hidden" name = "product_id" value = "<?php print $product->product_id?>" />
<input type = "hidden" name = "category_id" value = "<?php print $this->category->category_id?>" />
</form>
п.0.2 В
/controllers/category.php в
function view() строка:
$view->assign('action', SEFLink('index.php?option=com_jshopping&controller=cart&task=add'));
то что делать форме когда нажат submit.
п.1.1
Сам js выглядит так:
<script>jQuery(document).ready(function(){
jQuery('form').submit(function() {
п.1.2
Серверная сторона запроса п.1.2.1 в
/controllers/cart.php в
function add() после 43 строки добавляем:
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
header("Content-Type: json/html; charset=utf-8");
$msg_txt= array( 'status'=>1, 'count_product'=>$cart->count_product, 'price'=>formatprice($cart->getSum(0,1)) );
echo json_encode($msg_txt);
die();
}
проверяем если это AJAX запрос, то отдаем JS скрипту данные
п.1.2.2 в
/models/cart.php в
function add($product_id, $quantity, $attr_id, $freeattributes) после 498 строки (начинается с JError:raiseWarning) добавляем:
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
header("Content-Type: json/html; charset=utf-8");
$status=0;
$msg = "В корзине находится максимально доступное количество товара";
echo json_encode(array("status"=>$status, "msg"=>$msg));
die();
}
и еще раз добавляем там же в районе 534 строки ( после строки JError:raiseWarning)
п.2
Куда будем выводить?/modules/mod_jshopping_cart/tmpl/default.phpЗдесь верстаем нашу мини корзину, какой хотим ее видеть. И под шаблон уже правим JS (п.1.1)
Я сделал так:
<h3>Корзина:</h3>
<div id = "jshop_module_cart" class = "vmCartModule">
<span class="empty" <?php if ($cart->count_product>0){ ?> style="display:none;"<?php }?>>Корзина пуста</span>
<div class="corzina" <?php if ($cart->count_product==0){ ?> style="display:none;"<?php }?>>
<span class="count"><?php print $cart->count_product?> на сумму <?php print formatprice($cart->getSum(0,1))?></span>
<span><a href = "<?php print SEFLink('index.php?option=com_jshopping&controller=cart&task=view', 1)?>"><?php print "Перейти"?></a></span>
</div>
</div>
п.3
Скрипт я разместил прямо в
/templates/default/category/category_default.phpДля всплывающего окна с информацией "Товар добавлен", использовал
Impromptuподключается так:
<script src="http://www.trentrichardson.com/Impromptu/scripts/jquery-impromptu.3.1.min.js" type="text/javascript"></script>
css окна настроил под себя. На сайте есть информация.
С отключенным JS корзина работает, как обычно. Т.е. здесь добавлен только JS скрипт, который перехватывает сабмит, берет данные из формы, кидает их серверу, php скрипты jshopping'a отрабатывают свою часть и посылают информацию о количестве товара и его суммарной стоимости (можно получить и другие данные) обратно js скрипту, который выводит это в мини корзину без обновления страницы.
Вроде бы ничего не забыл. Рад любой помощи в оптимизации и "доведения до ума"