Мини-корзина — это как раз то место на сайте, где видно только что купленные товары, их количество и общий итог. Как правило, она сидит или наверху (где-то в шапке), или по бокам. Редко — ездит вверх-вниз где-нибудь сбоку.
В Virtuemart это модуль и он называется mod_virtuemart_cart (он, кстати, есть в стандартной поставке магазина). В версии 1.1.9 мини-корзина находится в папке modules/mod_virtuemart_cart и за ее вывод отвечает, казалось бы, файл mod_virtuemart_cart.php, но, заглянув в него, мы видим инклуд, который подключает эту самую корзину совершенно из другого места:
administrator/components/com_virtuemart/html/shop.basket_short.php
Этот файл занимается тем, что выбирает из базы наши покупки и выводит модуль. Да-да, только модуль с сообщением о том, что корзина пуста или шаблон корзины если там что-то есть. За вывод шаблона отвечает строчка
echo $tpl->fetch( 'common/minicart.tpl.php');
Удобно. Хочешь — дописывай и пихай в шаблон. Отдельно дизайнерам и верстальщикам, отдельно — программистам.
Нас понеосет как раз в этот common/minicart.tpl.php, который на самом деле лежит в components/com_virtuemart/themes/default/templates/common/minicart.tpl.php, что логично — это же шаблон 🙂
По умолчанию в этой мини-корзине находится картинка, которая ведет на сайт виртумарта. Недоразумение находится в промежутке с 6 по 10 строчку:
<?php if(!$vmMinicart) { ?> <a href="http://virtuemart.net/" target="_blank"> <img src="<?php echo $mm_action_url ?>components/com_virtuemart/shop_image/ps_image/menu_logo.gif" alt="VirtueMart" width="80" border="0" /></a> <br /> <?php }
т.е. все, что МЕЖДУ { и } подлежит или удалению, или изменению на свой вкус.
Далее идет совершенно корявый (на мой взгляд) вывод итоговой суммы (начиная с 36 строки):
if(!$vmMinicart) { ?> <hr style="clear: both;" /> <?php } ?> <div style="float: left;" > <?php echo $total_products ?> </div> <div style="float: right;"> <?php echo $total_price ?> </div> <?php if (!$empty_cart && !$vmMinicart) { ?> <br/><br style="clear:both" /><div align="center"> <?php echo $show_cart ?> </div><br/> <?php }
Соответственно, я это добро поменял на то, что мне больше нравится и более подходит дизайну магазина:
if($empty_cart && !$vmMinicart) { ?> <hr style="clear: both;" /> <?php } else { ?> <div class="minicart_total"> <div style="float: left;" > <?php echo $total_products ?> </div> <div style="float: right;"> <?php echo $total_price ?> </div> </div> <?php } ?> <?php if (!$empty_cart && !$vmMinicart) { ?> <br style="clear:both" /> <div align="center"> <?php echo $show_cart ?> </div><br/> <?php }
Добавил класс CSS в стандартный файл с темой (components/com_virtuemart/themes/default/theme.css):
/** * Minicart template style (minicart.tpl.php) */ .minicart_total { background: #4B334F; padding: 5px 0 5px 5px; margin-left: -10px; margin-top: 10px; float: left; width: 100%; border: 1px solid #F5D7FB;}
и, вроде бы, успокоился, но заметил, что если добавить один товар — он показывает «1 Товар«, если добавить два товара — покажет «2 Товаров«. Есть варианты, причем разные, один лучше, другой хуже, но для экономии времени я сделал проще. В файле administrator/components/com_virtuemart/html/shop.basket_short.php (как раз там, где считается все это добро) в строках 120—126 идет проверка на количество товаров и соответствующий их вывод. Вот она (оригинальная):
if(!$empty_cart) { if ($amount > 1) { $total_products = $amount ." ". $VM_LANG->_('PHPSHOP_PRODUCTS_LBL'); } else { $total_products = $amount ." ". $VM_LANG->_('PHPSHOP_PRODUCT_LBL'); } $total_price = $CURRENCY_DISPLAY->getFullValue( $total ); }
Соответственно, я ее поменял, переставив местами «Товаров» и их количество и добавил «на сумму:», выделив цифры полужирным. Да, еще убрал лишнюю теперь уже проверку на количество товаров:
if(!$empty_cart) { $total_products = $VM_LANG->_('PHPSHOP_PRODUCTS_LBL') .": <b>". $amount."</b>"; $total_price = "на сумму: <b>" . $CURRENCY_DISPLAY->getFullValue( $total ) . "</b>"; }
Тут надо заметить, что в локализационном файле есть 2 константы, отвечающие за «Товар» и «Товаров» — PHPSHOP_PRODUCT_LBL и PHPSHOP_PRODUCTS_LBL соответственно, поэтому ставим PHPSHOP_PRODUCTS_LBL.
Вроде бы тут все, мини-корзина она и есть мини-корзина, что тут еще можно добавить…
Отличная статья!!! Мне чрезвычайно помогла.
спасибо, долго искал такую статью!!
Thanks a lot!
к сожалению работает частично, показывать показывает только кол-во и сумму, но при добавке в корзину последующего товара корзина приобретает старый вид — где расписанна каждая позиция в ней. при переходе на последующий товар или страницу корзина опять меняет вид на кол-во и сумму.
Дима, учтите, что это статья про мини-корзину, как она устроена и как изменить ее вид, а не руководство к действию. Никто не обещал, что копипаст будет работать на 100 процентов 🙂
Выходит что статья как таковая неявляется инструкцией а так просто блабол которому нестоит доверять?
Не стоит — не доверяйте. Если у всех работает, а у вас нет — ищите проблему на вашем сайте, а не в статье. И это… тупой копипаст не всегда помогает решить проблему, иногда больше проблем создает, чем решает. Учите матчасть и русский язык.