Заявка на товар вместо его оформления через корзину — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 15: Строка 15:
 
# <xsl:if test="$item_price != 0" > - если цена не равна нулю, то показываем, иначе - прячем.
 
# <xsl:if test="$item_price != 0" > - если цена не равна нулю, то показываем, иначе - прячем.
 
# <xsl:choose><xsl:when test="$item_price != 0" > - тоже самое и с кнопкой, в случае нулевой цены прячем кнопку "Добавить в корзину" и показываем "Оставить заявку".  
 
# <xsl:choose><xsl:when test="$item_price != 0" > - тоже самое и с кнопкой, в случае нулевой цены прячем кнопку "Добавить в корзину" и показываем "Оставить заявку".  
# Здесь мы используем обертку в div: &lt;div id="myModal" class="reveal-modal"$gt;. Это необходимо для того, чтобы в дальнейшем подключить JQUERY-скрипт, который покажет все содержимое дива в модальном окне.  
+
# Здесь мы используем обертку в div: &lt;div id="myModal" class="reveal-modal"&gt;. Это необходимо для того, чтобы в дальнейшем подключить JQUERY-скрипт, который покажет все содержимое дива в модальном окне.  
 
# Здесь же, в диве, мы вызываем нашу веб-форму (<xsl:apply-templates select="document('udata://webforms/add/126')/udata" >) с передачей параметра pageredirect, содержащим ID текущей страницы. Это необходимо, чтобы узнать на какой адрес совершать обратный редирект. Обратите внимание, что при вызове формы, мы указываем ID созданной ранее формы.
 
# Здесь же, в диве, мы вызываем нашу веб-форму (<xsl:apply-templates select="document('udata://webforms/add/126')/udata" >) с передачей параметра pageredirect, содержащим ID текущей страницы. Это необходимо, чтобы узнать на какой адрес совершать обратный редирект. Обратите внимание, что при вызове формы, мы указываем ID созданной ранее формы.
  

Версия 17:40, 16 июня 2013

Актуально для версии 2.9.

Задача: Реализовать возможность оставлять заявку на отсутствующий товар через форму обратной связи вместо его оформления через корзину.

Решение: Если цена товара равна нулю, то мы скрываем её отображение в каталоге и в карточке товара, а кнопку "Добавить в корзину" заменяем на "оставить заявку".

1. Впервую очередь нам необходимо перейти в модуль "Обратная связь" и создать форму со всеми необходимыми полями. Также запоминаем ID формы, он нам пригодится в дальнейшем. 2. Далее спрячем цену товара, если она равна нулю и заменим кнопку на "оставить заявку".

Для этого в файле /templates/demodizzy/xslt/modules/catalog/object-view.xsl, необходимо внести следующие изменения:

  1. <xsl:param name="redirectresult" /> - здесь мы объявляем переменную, в которую будет попадать значение после отправки почты и обратного редиректа на страницу.
  2. <xsl:if test="$redirectresult = 'yes'" > - здесь мы проверяем, если в переменное значение YES, то при помощи AJAX за 1 секунду показываем сообщение об успешной отправки почты и через 3 секунды убираем сообщение.
  3. <xsl:variable name="item_price" select="document(concat('udata://emarket/price/', page/@id))" /> - сюда мы помещаем текущее значение цены товара.
  4. <xsl:if test="$item_price != 0" > - если цена не равна нулю, то показываем, иначе - прячем.
  5. <xsl:choose><xsl:when test="$item_price != 0" > - тоже самое и с кнопкой, в случае нулевой цены прячем кнопку "Добавить в корзину" и показываем "Оставить заявку".
  6. Здесь мы используем обертку в div: <div id="myModal" class="reveal-modal">. Это необходимо для того, чтобы в дальнейшем подключить JQUERY-скрипт, который покажет все содержимое дива в модальном окне.
  7. Здесь же, в диве, мы вызываем нашу веб-форму (<xsl:apply-templates select="document('udata://webforms/add/126')/udata" >) с передачей параметра pageredirect, содержащим ID текущей страницы. Это необходимо, чтобы узнать на какой адрес совершать обратный редирект. Обратите внимание, что при вызове формы, мы указываем ID созданной ранее формы.
<xsl:stylesheet	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:umi="http://www.umi-cms.ru/TR/umi">

<xsl:param name="redirectresult" />
     * * *   
<xsl:template match="udata" mode="object-view">

<xsl:if test="$redirectresult = 'yes'" >
    <div id='redirectresult'>
       <h1><img src="/templates/demodizzy/images/success.png" align="middle" />Спасибо! Ваша заявка отправлена.</h1>
    </div>

<script type="text/javascript">					
$(document).ready(function() {
setTimeout ("$('#redirectresult').fadeIn('fast');", 1000);
setTimeout ("$('#redirectresult').fadeOut('slow');", 3000);
});
</script>					
</xsl:if>
<xsl:variable name="item_price" select="document(concat('udata://emarket/price/', page/@id))" />

    * * *

<div class="price" itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer">
	<xsl:if test="$item_price != 0" >
		<span umi:element-id="{page/@id}" umi:field-name="price" itemprop="price">
			<xsl:apply-templates select="document(concat('udata://emarket/price/', page/@id))" />
		</span>
	</xsl:if>
	<link itemprop="itemCondition" href="http://schema.org/NewCondition" />
</div>

    * * *

<xsl:apply-templates select=".//property[@name = '&property-description;']" />
	<div class="clear" />
	<xsl:choose>
		<xsl:when test="$item_price != 0" >
			<form id="add_basket_{page/@id}" class="options" action="{$lang-prefix}/emarket/basket/put/element/{page/@id}/">
				<xsl:apply-templates select=".//group[@name = 'catalog_option_props']" mode="table_options" />
				<input type="submit" class="button big" id="add_basket_{$document-page-id}">
				<xsl:attribute name="value">
				<xsl:text>&basket-add;</xsl:text>
				<xsl:if test="$cart_items/item[page/@id = $document-page-id]">
				<xsl:text> (</xsl:text>
				<xsl:value-of select="sum($cart_items/item[page/@id = $document-page-id]/amount)" />
				<xsl:text>)</xsl:text>
				</xsl:if>
				</xsl:attribute>
				</input>
			</form>
		</xsl:when>				
		<xsl:otherwise>
			<div id="myModal" class="reveal-modal">
				<h1>Оформить заказ</h1>
				<p>Для оформления заказа, заполните следующие поля:</p>
							
				<xsl:apply-templates select="document('udata://webforms/add/126')/udata" >
					<xsl:with-param name="pageredirect" select="page/@id" />
				</xsl:apply-templates>
				<a class="close-reveal-modal">&#215;</a>
			</div>
				<a href="#" data-reveal-id="myModal" class="button big">Оформить заявку</a>
		</xsl:otherwise>
	</xsl:choose>
				
<div class="social">

    * * *

В файле /templates/demodizzy/xslt/modules/catalog/common.xsl вносим следующие правки:

  1. Правки аналогичны предыдущему варианту, с той лишь разницей, что относятся они к тому случаю, когда товар отображается в общей категории с другими товарами.
<xsl:template match="page|item" mode="short-view">
		<xsl:variable name="item_price" select="document(concat('udata://emarket/price/', @id))" />
     * * *   
<div class="price">
	<xsl:if test="$item_price != 0" >
		<span umi:element-id="{@id}" umi:field-name="price">
			<xsl:apply-templates select="document(concat('udata://emarket/price/', @id))" />
		</span>
	</xsl:if>
</div>

    * * *

<xsl:apply-templates select="$object//group[@name = '&group-parameter;']" mode="div" />
	<xsl:choose>
		<xsl:when test="$item_price != 0" >
			<div class="add_from_list">
			
				<a id="add_basket_{@id}" class="button basket_list options_{$is_options}" 
                                 href="{$lang-prefix}/emarket/basket/put/element/{@id}/">
                  			<xsl:text>&basket-add;</xsl:text>
					<xsl:variable name="element_id" select="@id" />
				
					<xsl:if test="$cart_items and $cart_items/item[page/@id = $element_id]">
						<xsl:text> (</xsl:text>
						<xsl:value-of select="sum($cart_items/item[page/@id = $element_id]/amount)" />
						<xsl:text>)</xsl:text>
					</xsl:if>
				</a>
			</div>
		</xsl:when>
		<xsl:otherwise>
			<div id="myModal" class="reveal-modal">
				<h1>Оформить заказ</h1>
				<p>Для оформления заказа, заполните следующие поля:</p>
	      
				<xsl:apply-templates select="document('udata://webforms/add/126')/udata" >
					<xsl:with-param name="pageredirect" select="@id" />
				</xsl:apply-templates>
				<a class="close-reveal-modal">&#215;</a>
			</div>
			 <div class="add_from_list">
				<a href="#" data-reveal-id="myModal" class="button">Оформить заявку</a>
			</div>
		</xsl:otherwise>
	</xsl:choose>
			<div class="clear" />

    * * *

В файле /templates/demodizzy/xslt/modules/catalog/special-offers.xsl вносим следующие правки:

  1. Здесь мы получаем редирект и показываем сообщение об успешной отправке пользователю.
<xsl:stylesheet	version="1.0"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:umi="http://www.umi-cms.ru/TR/umi">

        <xsl:param name="redirectresult" />
     * * *
   
<xsl:template match="udata" mode="special-offers">
	<xsl:if test="$redirectresult = 'yes'" >
	  <div id='redirectresult'>
	    <h1><img src="/templates/demodizzy/images/success.png" align="middle" />Спасибо! Ваша заявка отправлена.</h1>
	  </div>
 
	  <script type="text/javascript">					
	  $(document).ready(function() {
	  setTimeout ("$('#redirectresult').fadeIn('fast');", 1000);
	  setTimeout ("$('#redirectresult').fadeOut('slow');", 3000);
	  });
	  </script>					
      </xsl:if>
	<div class="catalog {$catalog}">

    * * *