1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

VM 2.x Кнопка купить на странице категории товара

Тема в разделе "Virtuemart", создана пользователем Freeman Liberty, 4 июл 2012.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
  1. Freeman Liberty

    Freeman Liberty

    Регистр.:
    19 май 2009
    Сообщения:
    463
    Симпатии:
    171
    Искал способ вставить кнопку "купить" и ввод кол-ва товара на страницу категории товара рядом с кнопкой "подробнее".
    Не сильно силен в php, поэтому код, возможно, можно было бы и упростить (брал частями из default_addtocart.php и helper.php модуля вывода товаров).
    У меня все работает, глюков не заметил.
    Вообщем в файл default.php расположенный в ваш шаблон\html\com_virtuemart\category либо в аналогичном файле расположенном в components\com_virtuemart\views\category\tmpl\

    вставляем следующий кусок кода


    PHP:
    <div class="addtocart-area">
     
            <form method="post" class="product" action="index.php">
                        <?php
                        
    // Product custom_fields
                        
    ?>
     
                        <div class="addtocart-bar">
     
                <?php // Display the quantity box
     
        
    $stockhandle VmConfig::get('stockhandle''none');
        if ((
    $stockhandle == 'disableit' or $stockhandle == 'disableadd') and ($this->product->product_in_stock $this->product->product_ordered) < 1) {
    ?>
            <a href="<?php echo JRoute::_('index.php?option=com_virtuemart&view=productdetails&layout=notify&virtuemart_product_id='.$this->product->virtuemart_product_id); ?>" class="notify"><?php echo JText::_('COM_VIRTUEMART_CART_NOTIFY'?></a>
     
    <?php } else { ?>
                            <!-- <label for="quantity<?php echo $this->product->virtuemart_product_id?>" class="quantity_box"><?php echo JText::_('COM_VIRTUEMART_CART_QUANTITY'); ?>: </label> -->
            <span class="quantity-box">
            <input type="text" class="quantity-input js-recalculate" name="quantity[]" value="<?php if (isset($this->product->min_order_level) && (int) $this->product->min_order_level 0) {
        echo 
    $this->product->min_order_level;
    } else {
        echo 
    '1';
    ?>" />
            </span>
            <span class="quantity-controls js-recalculate">
            <input type="button" class="quantity-controls quantity-plus" />
            <input type="button" class="quantity-controls quantity-minus" />
            </span>
            <?php // Display the quantity box END ?>
     
     
                <?php
                
    }
                
    // Add the button
                
    $button_lbl JText::_('COM_VIRTUEMART_CART_ADD_TO');
                
    $button_cls '';
                
    // Display the add to cart button
                
    $stockhandle VmConfig::get('stockhandle','none');
                if((
    $stockhandle=='disableit' or $stockhandle=='disableadd') and ($product->product_in_stock $product->product_ordered)<1){
                    
    $button_lbl JText::_('COM_VIRTUEMART_CART_NOTIFY');
                    
    $button_cls 'notify-button';
                    
    $button_name 'notifycustomer';
                }
                
    ?>
                <?php // Display the add to cart button ?>
                <span class="addtocart-button">
                    <input type="submit" name="addtocart"  class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
                </span>
     
                        <div class="clear"></div>
                        </div>
     
                        <input type="hidden" class="pname" value="<?php echo $product->product_name ?>"/>
                        <input type="hidden" name="option" value="com_virtuemart" />
                        <input type="hidden" name="view" value="cart" />
                        <noscript><input type="hidden" name="task" value="add" /></noscript>
                        <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
                        <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
                    </form>
            <div class="clear"></div>
                </div>

    После чего на странице категории появляется кнопка "Купить" с возможностью ввода кол-ва товара.
    Если у кого будут предложения по улучшению - милости просим.
     
  2. Freeman Liberty

    Freeman Liberty

    Регистр.:
    19 май 2009
    Сообщения:
    463
    Симпатии:
    171
    Вот обнаружил чуть более короткий вариант - 40 строк против 62
    PHP:
    <form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
        <div class="addtocart-bar">
     
                <?php // Display the quantity box ?>
                <!-- <label for="quantity<?php echo $product->virtuemart_product_id;?>" class="quantity_box"><?php echo JText::_('COM_VIRTUEMART_CART_QUANTITY'); ?>: </label> -->
                <span class="quantity-box">
                    <input  type="text" class="quantity-input" name="quantity[]" value="1" />
                </span>
                <span class="quantity-controls">
                    <input type="button" class="quantity-controls quantity-plus" />
                    <input type="button" class="quantity-controls quantity-minus" />
                </span>
                <?php // Display the quantity box END ?>
     
                <?php // Add the button
                
    $button_lbl JText::_('COM_VIRTUEMART_CART_ADD_TO');
                
    $button_cls ''//$button_cls = 'addtocart_button';
                
    if (VmConfig::get('check_stock') == '1' && !$product->product_in_stock) {
                    
    $button_lbl JText::_('COM_VIRTUEMART_CART_NOTIFY');
                    
    $button_cls 'notify-button';
                } 
    ?>
     
                <?php // Display the add to cart button ?>
                <span class="addtocart-button">
                    <input type="submit" name="addtocart"  class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
                </span>
     
            <div class="clear"></div>
            </div>
     
            <?php // Display the add to cart button END ?>
            <input type="hidden" class="pname" value="<?php echo $product->product_name ?>">
            <input type="hidden" name="option" value="com_virtuemart" />
            <input type="hidden" name="view" value="cart" />
            <noscript><input type="hidden" name="task" value="add" /></noscript>
            <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
            <?php /** @todo Handle the manufacturer view */ ?>
            <input type="hidden" name="virtuemart_manufacturer_id" value="<?php echo $product->virtuemart_manufacturer_id ?>" />
            <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
    </form>
    Может кому пригодится.
     
    kakooshop, svfolder и Drunk Monkey нравится это.
  3. dionis8

    dionis8 Писатель

    Регистр.:
    30 ноя 2011
    Сообщения:
    6
    Симпатии:
    1
    у меня что первый что второй вариант кода даёт такой результат((( кнопка только под одним товаром
    вирт2.0.6 у меня
    [​IMG]
    обновился до 2.0.14 тот же эффект(((
     
    kakooshop нравится это.
  4. toluy

    toluy Писатель

    Регистр.:
    23 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    У меня вот этот :rules: код работает исправно:
    PHP:
    <!--Add to cart button BEGIN-->
    <form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
      <div class="addtocart-bar">
        <?php // Display the quantity box BEGIN ?>
          <div class="product-price floatleft">
                        <?php
                        
    if ($this->show_prices == '1') {
                            if(empty(
    $product->prices) and VmConfig::get('askprice',1) and empty($product->images[0]->file_is_downloadable) ){echo JText::_('COM_VIRTUEMART_PRODUCT_ASKPRICE');}
                            
    //todo add config settings
                            
    if( $this->showBasePrice){
                                echo 
    $this->currency->createPriceDiv('basePrice','COM_VIRTUEMART_PRODUCT_BASEPRICE',$product->prices);
                                echo 
    $this->currency->createPriceDiv('basePriceVariant','COM_VIRTUEMART_PRODUCT_BASEPRICE_VARIANT',$product->prices);}
                            echo 
    $this->currency->createPriceDiv('variantModification','COM_VIRTUEMART_PRODUCT_VARIANT_MOD',$product->prices);
                            echo 
    $this->currency->createPriceDiv('basePriceWithTax','COM_VIRTUEMART_PRODUCT_BASEPRICE_WITHTAX',$product->prices);
                            echo 
    $this->currency->createPriceDiv('discountedPriceWithoutTax','COM_VIRTUEMART_PRODUCT_DISCOUNTED_PRICE',$product->prices);
                            echo 
    $this->currency->createPriceDiv('salesPriceWithDiscount','COM_VIRTUEMART_PRODUCT_SALESPRICE_WITH_DISCOUNT',$product->prices);
                            echo 
    $this->currency->createPriceDiv('salesPrice','COM_VIRTUEMART_PRODUCT_SALESPRICE',$product->prices);
                            echo 
    $this->currency->createPriceDiv('priceWithoutTax','COM_VIRTUEMART_PRODUCT_SALESPRICE_WITHOUT_TAX',$product->prices);
                            echo 
    $this->currency->createPriceDiv('discountAmount','COM_VIRTUEMART_PRODUCT_DISCOUNT_AMOUNT',$product->prices);
                            echo 
    $this->currency->createPriceDiv('taxAmount','COM_VIRTUEMART_PRODUCT_TAX_AMOUNT',$product->prices);
                        } 
    ?>
            </div>
            <span class="quantity-box floatleft">
                <input type="text" class="quantity-input js-recalculate" name="quantity[]" value="<?php if (isset($this->product->min_order_level) && (int) $this->product->min_order_level 0) {
                    echo 
    $this->product->min_order_level;
                } else {
                    echo 
    '1';
                } 
    ?>" />
            </span>
            <span class="quantity-controls js-recalculate floatleft">
            <input type="button" class="quantity-controls quantity-plus" />
            <input type="button" class="quantity-controls quantity-minus" />
            </span>                       
          <?php // Display the quantity box END ?>
          <?php // Add the button
            
    $button_lbl JText::_('COM_VIRTUEMART_CART_ADD_TO');
            
    $button_cls ''//$button_cls = 'addtocart_button';
            
    if (VmConfig::get('check_stock') == '1' && !$this->product->product_in_stock) {
                
    $button_lbl JText::_('COM_VIRTUEMART_CART_NOTIFY');
                
    $button_cls 'notify-button';
          } 
    ?>
        <!-- </div> -->
          <?php // Display the add to cart button ?>
          <span class="addtocart-button">
            <input type="submit" name="addtocart"  class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
          </span>
          <div class="clear"></div>
      </div>
      <?php // Display the add to cart button END ?>
      <input type="hidden" class="pname" value="<?php echo $product->product_name ?>">
      <input type="hidden" name="option" value="com_virtuemart" />
      <input type="hidden" name="view" value="cart" />
      <noscript><input type="hidden" name="task" value="add" /></noscript>
      <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
      <?php /** @todo Handle the manufacturer view */ ?>
      <input type="hidden" name="virtuemart_manufacturer_id" value="<?php echo $product->virtuemart_manufacturer_id ?>" />
      <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
    </form><!--Add to cart button END-->


    добавлял в раздел productdetails в файле "путь-до-шаблона/html/com_virtuemart/category/default.php"
     
  5. V-A-S

    V-A-S Создатель

    Регистр.:
    22 мар 2012
    Сообщения:
    48
    Симпатии:
    17
    Это для какой версии VM? Что-то я не могу у себя найти в какое место (номер строки) данный код вставлять?
     
  6. Carleone

    Carleone Постоялец

    Заблокирован
    Регистр.:
    8 ноя 2012
    Сообщения:
    51
    Симпатии:
    39

    Вставлять нужно в www/components/com_virtuemart/views/category/tmpl/default.php
    Virtuemart 2.0.14
    [​IMG]
     
    stadi, V-A-S и aivalab нравится это.
  7. aivalab

    aivalab

    Регистр.:
    18 ноя 2012
    Сообщения:
    382
    Симпатии:
    135
    А как вывести еще и выпадающий список custom fields туда же ? Очень надо, но шаманство пока не дало успеха...

    Сам спросил, сам отвечаю - оказалось достаточно взять код из helper.php модуля Вирта :
    Код:
    <form method="post" class="product" action="index.php">
                                            <?php
                                            // Product custom_fields
                                            if (!empty($product->customfieldsCart)) {
                                                    ?>
                                                    <div class="product-fields">
                                                            <?php foreach ($product->customfieldsCart as $field) { ?>
     
                                                            <div style="display:inline-block;" class="product-field product-field-type-<?php echo $field->field_type ?>">
                                                                    <span class="product-fields-title"><b><?php echo $field->custom_title ?></b></span>
                                                                    <?php echo JHTML::tooltip ($field->custom_tip, $field->custom_title, 'tooltip.png'); ?>
                                                                    <span class="product-field-display"><?php echo $field->display ?></span>
                                                                    <span class="product-field-desc"><?php echo $field->custom_field_desc ?></span>
                                                            </div>
     
                                                            <?php } ?>
                                                    </div>
                                                    <?php } ?>
     
                                            <div class="addtocart-bar">
     
                                                    <?php
                                                    // Display the quantity box
                                                    ?>
                                                    <!-- <label for="quantity<?php echo $product->virtuemart_product_id;?>" class="quantity_box"><?php echo JText::_ ('COM_VIRTUEMART_CART_QUANTITY'); ?>: </label> -->
                            <span class="quantity-box">
                            <input type="text" class="quantity-input" name="quantity[]" value="1"/>
                            </span>
                            <span class="quantity-controls">
                            <input type="button" class="quantity-controls quantity-plus"/>
                            <input type="button" class="quantity-controls quantity-minus"/>
                            </span>
     
     
                                                    <?php
                                                    // Add the button
                                                    $button_lbl = JText::_ ('COM_VIRTUEMART_CART_ADD_TO');
                                                    $button_cls = ''; //$button_cls = 'addtocart_button';
     
     
                                                    ?>
                                                    <?php // Display the add to cart button ?>
                                                    <span class="addtocart-button">
                                                            <?php echo shopFunctionsF::getAddToCartButton($product->orderable); ?>
                            </span>
     
                                                    <div class="clear"></div>
                                            </div>
     
                                            <input type="hidden" class="pname" value="<?php echo $product->product_name ?>"/>
                                            <input type="hidden" name="option" value="com_virtuemart"/>
                                            <input type="hidden" name="view" value="cart"/>
                                            <noscript><input type="hidden" name="task" value="add"/></noscript>
                                            <input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>"/>
                                            <input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>"/>
                                    </form>


    Почему-то предложенные варианты ТС и около 6 вариаций с http://forum.virtuemart.net от забугорных друзей не работали, причем именно CustomFields не выводились. быть может из-за того, что на данном проекте у меня они не совсем стандартно создаются - их не видно в самой админке Вирта, все админится через модуль синхронизации с 1С. Собственно в ней товар добавляется, продается, заказы загружаются и все автоматически по заданному временному интервалу... разошелся, сори за оффтоп.
     
  8. V-A-S

    V-A-S Создатель

    Регистр.:
    22 мар 2012
    Сообщения:
    48
    Симпатии:
    17
    А у меня вопрос. Вот смотрите данный хак у меня работает нормально, НО при изменении в настройках магаза во вкладке "Внешний вид" - "Действие при поступлении на склад" - "Показывать 'Известить меня' вместо кнопки 'Добавить в корзину" кнопка "Добавить в корзину" не пропадает. По логике она должна поменяться на 'Известить меня'. Может кто подсказать как подправить?
     
  9. cooler6260

    cooler6260 Писатель

    Регистр.:
    19 ноя 2012
    Сообщения:
    2
    Симпатии:
    0
    Второй вариант кода, который из 40 строк в IE 9 работает не правильно. В IE 8 проблем не наблюдал. При нажатии кнопки "В корзину" товар в корзину не помещается, а открывается корзина без товара. В связи с чем заменил код на тот, что в первом посту. На него жалоб не поступало.
     
  10. Garyk01

    Garyk01 Постоялец

    Регистр.:
    6 окт 2012
    Сообщения:
    82
    Симпатии:
    29
    Аналогичная ситуация - не работает "Уведомить меня" с этими вариантами - немного порылся и нашел такой вариант:

    1) В папку ваш сайт/templates/ваш шаблон/html/com_virtuemart/category
    скопировать файл default_addtocart.php из папки
    ваш сайт/components/com_virtuemart/views/productdetails/tmpl
    2) Открыть файл default.php из папки
    ваш сайт/templates/ваш шаблон/html/com_virtuemart/category
    и добавить пару строк в удобное место (где предполагаете вывести кнопку) :
    PHP:
    <?php
        $this
    ->product $product;
        echo 
    $this->loadTemplate('addtocart');
    ?> 


    Все...))) Пробуйте, тестируйте...
    Главное, что появляется "Уведомить меня" при отсутствии товара, если в админке установлена соответствующая "галка"

    P.S. если понравилось, то "+ " не забывайте ставить)))
     
    lakshmi и V-A-S нравится это.