Возникла необходимость быстрого наполнения корзины - менеджер просто вводит артикулы. У многих современных магазинов такая фишка есть. У Virtuemart - нет. Восполним этот пробел. На странице корзины расположим дополнительное поле ввода где и будем писать добавляемые артикулы. Выглядеть это может так:
Мне показалось удобным расположить наше поле на уровне поля ввода кода купона.
Открываем файл \components\com_virtuemart\themes\default\templates\common\couponField.tpl.php и в самом начале добавлем ещё одну ячейку в таблицу.
<td width="50%"> Быстрое добавление товаров в корзину <form class="addtocart_form" id="addtocart" name="addtocart" method="post" action="<?php echo $mm_action_url . basename( $_SERVER['PHP_SELF']) ?>"> <input type="text" name="product_sku" width="13" maxlength="30" class="inputbox" /> <input type="hidden" value="1" name="quantity[]"> <input type="submit" title="Добавить" value="Добавить" class="addtocart_button"> <input type="hidden" value="shop.cart" name="page"> <input type="hidden" value="cartadd" name="func"> <input type="hidden" value="<?php echo @intval($_REQUEST['Itemid'])?>" name="Itemid"> <input type="hidden" value="com_virtuemart" name="option"> </form> </td> </tr><tr width="50%">
Не забываем сохранить и ковертировать файл в кодировку UTF-8 без ВОМ.
Открываем \administrator\components\com_virtuemart\classes\ps_cart.php
и в начале function add(&$d) после
$_SESSION['last_page'] = "shop.product_details";
пишем
if( !empty( $d['product_sku'])) { $q = "SELECT product_id FROM #__{vm}_product WHERE product_sku = ".$d['product_sku']; $db->query ( $q ); $db->next_record(); $d['product_id']=$db->f('product_id'); $d['prod_id']=$db->f('product_id'); }
Сохраняем. Наслаждаемся....
Спасибо интернет-магазину "Империя" за разрешение показать скрин корзины.
P.S. Если у Вас артикул содержит буквы - строка запроса должна быть следующей:
$q = "SELECT product_id FROM #__{vm}_product WHERE product_sku = '".$d['product_sku']."'";