В прошлой статье на похожую тему я добавлял форму addToCart. Сейчас немного разжую как добавить ту же форму, только сбоку. Сразу картинка
Надеюсь, из нее понятно, что «Цвет Красный» у товара слева — это список дочерних товаров. Итак, поехали.Первое. Открываем файл /administrator/components/com_virtuemart/html/shop.browse.php
находим там строку 427:
&& !ps_product::product_has_attributes( $db_browse->f('product_id'), true )) {
и вместо нее вставляем это:
) {
Этим мы убираем проверку на наличие свойств у товара, чтобы вывести форму выбора дочерних товаров и свойств товара.
Теперь важное! Меняем шаблон формы. Открываем файл /components/com_virtuemart/themes/toys_store/templates/browse/includes/addtocart_form.tpl.php
и меняем его содержимое на это (не забываем сделать бэкап!):
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?> <div class="vmCartContainer"> <?php mm_showMyFileName(__FILE__); list($html,$children) = $ps_product_attribute->list_attribute( ( $product_parent_id > 0 ) ? $product_parent_id : $product_id ); if ($children != "multi") { if( CHECK_STOCK == '1' && !$product_in_stock ) { $notify = true; } else { $notify = false; } ?> <form action="<?php echo $mm_action_url ?>index.php" method="post" name="addtocart" id="<?php echo uniqid('addtocart_') ?>" class="addtocart_form" <?php if( $this->get_cfg( 'useAjaxCartActions', 1 ) && !$notify ) { echo 'onsubmit="handleAddToCart( this.id );return false;"'; } ?>> <?php } echo $html; if (USE_AS_CATALOGUE != '1') { ?> <?php if ($children != "multi") { ?> <div style="float: right;vertical-align: middle;"> <?php echo '<input type="hidden" class="inputboxquantity" size="4" id="quantity'.$product_id.'" name="quantity[]" value="1" />'; $button_lbl = $VM_LANG->_('PHPSHOP_CART_ADD_TO'); $button_cls = 'addtocart_button'; if( CHECK_STOCK == '1' && !$product_in_stock ) { $button_lbl = $VM_LANG->_('VM_CART_NOTIFY'); $button_cls = 'notify_button'; } ?> <div class="clear"></div> <input type="submit" class="<?php echo $button_cls ?>" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" /> </div> <?php } ?> <input type="hidden" name="flypage" value="shop.<?php echo $flypage ?>" /> <input type="hidden" name="page" value="shop.cart" /> <input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id ?>" /> <input type="hidden" name="category_id" value="<?php echo $category_id ?>" /> <input type="hidden" name="func" value="cartAdd" /> <input type="hidden" name="option" value="<?php echo $option ?>" /> <input type="hidden" name="Itemid" value="<?php echo $Itemid ?>" /> <input type="hidden" name="set_price[]" value="" /> <input type="hidden" name="adjust_price[]" value="" /> <input type="hidden" name="master_product[]" value="" /> <?php } if ($children != "multi") { ?> </form> <?php } if($children == "radio") { ?> <script language="JavaScript" type="text/javascript">//<![CDATA[ function alterQuantity(myForm) { for (i=0;i<myForm.selItem.length;i++){ setQuantity = myForm.elements['quantity']; selected = myForm.elements['selItem']; j = selected[i].id.substr(7); k= document.getElementById('quantity' + j); if (selected[i].checked==true){ k.value = myForm.quantity_adjust.value; } else { k.value = 0; } } } //]]> </script> <?php } ?> </div>
То есть, в отличие от стандартного шаблона добавления в корзину, который я взял из карточки, я убрал выбор количества товара (сделал его скрытым и по умолчанию 1) и сократил список условий в IF, чтобы вывести форму. Для тех, кому в лом — тупо копируйте код в файл.
Список отображается, но кривовастенько — хотелось бы убрать кривую строку из пунктов SELECT`a и вместо «Выберите» начинать с реально существующего товара, чтобы клиенту осталось только нажать «Купить» (провоцируем лень).
Для этого открываем файл /administrator/components/com_virtuemart/classes/ps_product_attribute.php
и ищем строку
$html .= "<option value=\"$product_id\">" . $VM_LANG->_( 'PHPSHOP_SELECT' ) . "</option>" ;
Ее комментируем в двух местах (две таких строки надо найти). Это примерно 290 и 403 строки. Этой строкой мы убираем пункт «Выберите», чтобы сразу был выбран первый товар из списка.
Теперь ищем строку:
$html .= $db->f( "product_name" ) ." - " ;
Это примерно 300 строка. Ее комментируем и ниже где-то строк на 20 (в цикле WHILE которая, перед if( ! $db_sku->is_last_record() ) ) видим строку
$html .= "(" . $db_item->f( "attribute_value" ) . ")" ;
Первая — это название дочернего товара в выпадающем списке, вторая — это свойства дочернего товара в скобках.
То есть, если закомментировать первую (то есть, ~300) строку и вторую (~320) поменять на:
$html .= $db_item->f( "attribute_value" ) ;
получим пункты вида «Красный — 1000 руб.» вместо «Цвет ( красный ) — 1000 руб.»
Если надо убрать цену — надо закомментировать эту строку:
$html .= ' - ' . $CURRENCY_DISPLAY->getFullValue( $price["product_price"] ) ;
На этом, вроде бы, все… Если ничего не упустил 🙂
Вопросы — в комменты, спасибы — в комменты и в рыжую кнопку справа 🙂
День добрый. Спасибо за статью. Единственное возник вопрос. Как убрать кнопку купить у товаров в Browse_x у которых закончились дочерние или написать что нет в наличии? Возможно вы сможете помочь.