Мини-корзина Virtuemart 1.1.9

Мини-корзина — это как раз то место на сайте, где видно только что купленные товары, их количество и общий итог. Как правило, она сидит или наверху (где-то в шапке), или по бокам. Редко — ездит вверх-вниз где-нибудь сбоку.

В 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 (как раз там, где считается все это добро) в строках 120126 идет проверка на количество товаров и соответствующий их вывод. Вот она (оригинальная):

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.

Вроде бы тут все, мини-корзина она и есть мини-корзина, что тут еще можно добавить…

0

Мини-корзина Virtuemart 1.1.9: 7 комментариев

  1. Дима

    к сожалению работает частично, показывать показывает только кол-во и сумму, но при добавке в корзину последующего товара корзина приобретает старый вид — где расписанна каждая позиция в ней. при переходе на последующий товар или страницу корзина опять меняет вид на кол-во и сумму.

    1. merinovkv

      Дима, учтите, что это статья про мини-корзину, как она устроена и как изменить ее вид, а не руководство к действию. Никто не обещал, что копипаст будет работать на 100 процентов 🙂

        1. merinovkv Автор записи

          Не стоит — не доверяйте. Если у всех работает, а у вас нет — ищите проблему на вашем сайте, а не в статье. И это… тупой копипаст не всегда помогает решить проблему, иногда больше проблем создает, чем решает. Учите матчасть и русский язык.

Добавить комментарий