Заказчику понадобилась popup корзина на его сайте.
Погуглив мы не нашли никакого готового решения или по крайней мере описания такой штуковины под Ubercart.
Пришлось делать самим из того что уже придуманно.
Были использованы модули uc ajax cart для добавления динамической корзины, colorbox для попап окон, uc js cart для динамического подсчета товара, ну и немного допилены tpl и css.
Итак первое это uc ajax cart. В нем есть папка с тимплейтами, немного правим .tpl для реализации внешнего вида и некоторого функционала.
Сюда же добавим скрытый div с содержимым корзины и ссылку colorbox для показа этого содержимого в попап окне.
У меня это так:
<a href="?width=850&height=auto&inline=true#cartOpen" class="colorbox-inline">
В корзине
<?
$a = count(uc_cart_get_contents());
echo $a.' товар'.numberProduct($a, array('','а','ов'));
?>
</a>
<div class="price-of-cart">на <strong><?php print $total ;?></strong></div>
<div id="myCart" style="display:none;">
<div id="cartOpen">
<h2 class="cart_header">Корзина</h2>
<?php print ubercart_popup(); ?>
</div>
</div>
По внешнему виду так:
Там еще функция для склонения товар, товары, товаров есть:
function numberProduct($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
Далее как вы увидели в шаблоне есть вывод содержимого корзины
<?php print ubercart_popup(); ?>
Это и есть функция которая выдирает содержимое корзины писать её нужно в template.php
Выглядит она так:
function ubercart_popup() {
if (module_exists('uc_cart')) {
$items = uc_cart_get_contents();
if (empty($items)) {
return theme('uc_empty_cart');
}
$output = '';
foreach (uc_cart_cart_pane_list($items) as $pane) {
if ($pane['enabled']) {
$output .= $pane['body'];
}
}
return '<div id = "uc_popup">'. $output .'</div>';
}
}
В общем содержимое уже выводится в попапе, только вот есть несколько моментов. Это не срабатывает яваскрипт для обновления позиций товара из модуля uc ajax cart(решить можно немного поправив код, но это сами). По этому поводу я отключил в настройках модуля фитчу «Ajaxify cart page».
Далее установите модуль uc js cart — как раз он и позволяет динамически подсчитывать стоимость.
Вот практически и все. Остальное можно сделать средствами css.
Осталось одно, когда мы открываем корзину и добавляем или уменьшаем количество позиций, в самом блоке корзины при закрыти попап окна ничего не меняется. Здесь тоже нужно дописать кусок яваскрипт кода для обновления.(этим занимаемся)
У меня это выглядит вот так все:
Если кто то из читателей решал этот воброс более изящно, корректно и главное быстро и еще как нить иначе расскажите плиз.
Всем спасибо!
P.S.
На данный момент у нас появилась необходимость написания модуля всплывающей корзины. Этим мы занимаемся. Модуль будет выложен для теста на drupal.ru и будет доступен как для 6-ой так и для 7-ой ветки Drupal.
Автор: zakraben