Кнопка купить в VirtueMart 2.0.2 в списке категории

Среда, 07 Март 2012

 

При разработке интернет магазина на Joomla 2.5 с использованием компонента VirtueMart 2.0.2, столкнулся с проблемой - в списке категории, у товаров нельзя вывести кнопку "Купить". То есть, не получается в настройках компонента указать что кнопку "купить" (Add to cart bottom), нужно выводить в списке категории, вместо ссылки "подробнее", которая ведет на страницу товара. Хотя в предыдущих версиях VirtueMart 1.8.x такая возможность была...

 

Решается проблема следующим образом: используя возможность переназначения шаблонов вывода интернет магазина VirtueMart, необходимо в папке вашего шаблона сайта (который включен по умолчанию для фронтенда), создать такую папку:

 

"templates/your_template_name/html/com_virtuemart/category/"

 

И в папку "category" поместить файл-шаблон вывода списка категории интернет магазина VirtueMart - default.php. Данный файл просто скопировать из:

 

"components/com_virtuemart/views/category/tmpl/"

 

Таким же образом переназначаются и все остальные шаблоны вывода VirtueMart.

 

После этого открываем скопированный файл default.php (в папке вашей темы), и добавляем в него в нужное место (по разметке HTML) форму с кнопкой "Купить" (Add to cart bottom). Ниже ее код:

 

 
<?php
<div class="addtocart-area">
  <form id="product-f-<?php echo $product->virtuemart_product_id; ?>" method="post" class="product-f js-recalculate" action="index.php">
    <div class="addtocart-bar">
      <?php // Display the quantity box END ?>
      <span class="addtocart-button">
        <input type="submit" name="addtocart"  class="add-to-cart" value="В корзину"/>
      </span>
 
      </div>
      <?php // Display the add to cart button END  ?>
      <input type="hidden"  name="quantity[]" value="1" />
      <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" />
      <input type="hidden" name="task" value="addJS"/>
      <input type="hidden" name="nosef" value="1"/>
      <input type="hidden" name="lang" value="ru"/>
      <input type="hidden" name="format" value="json"/>
      <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>
</div>
?>
 

 

Сохраняемся и получаем кнопку "Купить" в списке категории VirtueMart:

 

Кнопка купить в virtuemart 2.0.2 в списке категории

 

При клике по данной кнопке в форме, будут отправляться параметры для добавления товара в корзину (через $_POST), а в ответ передается сообщение в формате JSON, которое содержит информацию о статусе добавления товара в корзину VirtueMart.

 

Но при этом сообщение будет выводится прямо на страницу joomla, для того чтобы этого не происходило, нужно отправлять форму по Ajax, добавив перед закрывающим тегом </head>, Javasript jQuery, который и будет выполнять это в списке категории товаров:

 

 
  jQuery.noConflict();
 
  jQuery(document).ready(function($) {
 
    jQuery(".product-f").each(function(index,value){
 
      jQuery(this).submit(function(e){
        e.preventDefault();
        var m_id = jQuery(this).attr('id');
 
        var m_method = jQuery(this).attr('method');
        var m_action = jQuery(this).attr('action');
        var m_data = jQuery(this).serialize();
 
        jQuery.ajax({
          method: m_method,
          url: m_action,
          data: m_data,
          dataType: 'json',
          success: function(result){
            //console.log(result);
          }
        });
      });
 
    });
 
  });
 

 

Если вам нужно будет использовать ответ JSON, то вы можете просмотреть его, раскоментировав строку //console.log(result);

 

PS. Читайте последние записи RSS Подписка на RSS

 

p value=
Метки:

Комментарии 

 
anonim Вторник, 20 Март 2012

Здравствуйте.
А для VM 2.0.0 этот метод сработает?
Ещё такой вопрос.
В Опере не работает кнопка "Добавить в корзину". При отключении JQuery и Ajax начинает работать, но перестаёт работат в ФФ и Хроме. Не знаете как решить проблему?

 

 
 
anonim Вторник, 20 Март 2012

Забыл сказать, joomla 1.5.20

 

 
 
anonim Среда, 28 Март 2012

Привет! Что-то не работает. Во-первых: зачем код формы обрамлен в C ним ругается на синтактсическую ошибку. Убрав - кнопка появляется, но при нажатии открывается чистый лист с такой вот: {"msg":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u043e\u043a\u0443\u043f\u043a\u0438\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0440\u0437\u0438\u043d\u0443
\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u0432\u0430\u0440\u0430 \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043e.","stat":"1"} хренью :(

 

 
 
anonim Среда, 28 Март 2012

Александр, это не хрень, а ответ в JSON формате, в посте я описал как сделать чтобы небыло перехода по этой ссылке, там нужно по Ajax отправлять.

И не понял что там за обрамление формы, уточните

 

 
 
anonim Среда, 28 Март 2012

Виталий, эта примочка только для той версии Virtuemarta которая указана в статье, на остальных я не проверял

 

 
 
anonim Вторник, 03 Апрель 2012

Здравствуйте - всё работало бы у меня, только не пойму как перед вставить Javasript jQuery прокоментируйте пожалуйста! кнопка добавить работает))

 

 
 
anonim Среда, 04 Апрель 2012

Здравствуйте Уважаемый Cleverscript - пожалусйта поясните ситуацию во круг ява скрипта всё получилось но не доганяю как сделать что бы по Ajax отправлялось ((( Помогите пожалуйста...
Выдаёт то же что и у Александра.

 

 
 
anonim Пятница, 06 Апрель 2012

Вы яваскрипт вставили в <head> как описано в статье? Запрос дожен отправлятся по Ajax, в статье же все описано. Перехода на страницу с тем что у вас выводится не должно быть. По этому и нужно отправлять запрос по клику на кнопке по Ajax.

 

 
 
anonim Пятница, 13 Апрель 2012

Здраствуйте cleverscript, скажите пожалуста: как вставить заодно и кнопки (+) и (-) рядом с кнопкой "Добавить в корзину". Я сам это зделал, но получилось криво: при нажатии на (+) или (-) добавление идёт не по 1-у товару, а по 2 сразу. Скажите как нужно это делать правильно?

(я добавил так:




" />










)Судя по результату(опис анному выше) это криво - и так делать нельзя. Помогите пожалуста(токо учусь, разбираю модули - не судите строго.)

 

 
 
anonim Суббота, 14 Апрель 2012

Вы не моглибы мне помочь. Мне необходимо вывести в добавок к кнопкам ещё и (+) и (-). Я добавил код из файла "Детали продукта":





" class="quantity_box">:

" />






После чего конечнои получилось то, что я хотел. Но видимо Так делть не нада: при нажатии на (+) или (-) прибавляется или убывается количество товаров, соответственно, на 2 штуки. Хотелось бы понять: где ошибка?

VirtualMart 2.0.0

 

 
 
anonim Понедельник, 23 Апрель 2012

Аналогичная проблема добавление товара с шагом +2.... в каточке товара все нормально...

 

 
 
anonim Пятница, 27 Апрель 2012

Код формы отрабатывает, товар прибавляется.
Не пойму куда именно вставить ява-скрипт...
Пожалуйста, объясните "на пальцах" в какой именно файл надо вставить код...

 

 
 
anonim Воскресенье, 29 Апрель 2012

Rad, в файл в который форму добавляли, как описано в статье, добавьте в самый конец файла.
Или перед закрывающим тегом в index.php вашего шаблона.

 

 
 
anonim Воскресенье, 20 Май 2012

При нажатии Добавить в корзину, перехода в корзину не происходит, при обновлении страницы видно, что товар в корзине присутствует. Отключаю jQuery и переход в корзину происходит, но товара в корзине отсутствует.

Нужна помощь!!!

 

 
 
anonim Четверг, 24 Май 2012

Максим, в статье описано о добавлении кнопки в список категории Virtuemart, по вашей ссылки я не увидел данной кнопки ни в одном списке категории товаров Virtuemart.
Возможно вы ее удалили, также я не увидел чтобы работала кнопка в самой карточке товара.

 

 
 
anonim Суббота, 23 Июнь 2012

Все работает, но не появляется всплывающее окно с системным сообщением, что товар добавлен в корзину(системн ые сообщения у меня выводятся PopUp окном) http://scrap.codersite.ru/bumaga

 

 
 
anonim Пятница, 29 Июнь 2012

Всем день добрый! Единственное пока решение которое дает результат. Не подскажите куда вставлять код а то как выше говорилось выводиться хрень, но товар добавляется в корзину:
jQuery.noConflict();

jQuery(document ).ready(function( $) {

jQuery(".product-f").each(function(i ndex,value){

jQuery(this).submit(function (e){
e.preventDefault( );
var m_id = jQuery(this).attr('id');

var m_method = jQuery(this).attr('method');
var m_action = jQuery(this).attr('action');
var m_data = jQuery(this).serialize();

jQuery.ajax({
method: m_method,
url: m_action,
data: m_data,
dataType: 'json',
success: function(result ){
//console.log(result);
}
});
});

});

});

 

 
 
anonim Суббота, 28 Июль 2012

Ребят, а для 2.0.6/8 решение проблемы нету?(
Я замучался искать, ничего адекватного так и не встретил((

 

 
 
anonim Понедельник, 11 Март 2013

Здравствуйте
Возникла проблема,не могу писать посты на форуме, часто выдает
ошибку FlashScript 458 Error
Что это может быть ?

 

 
 
anonim Воскресенье, 24 Март 2013

Решение на много короче:
require_once("modules/mod_virtuemart_ product/helper.php");
echo mod_virtuemart_ product::addtoc art ($product);

 

 

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