UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: shoto от 30 Марта 2012, 15:01:21

Название: Скрытие кнопки добавления в корзину
Отправлено: shoto от 30 Марта 2012, 15:01:21
Добрый день.
есть необходимость сделать скрытие кнопки "добавить в корзину" если у товара стоит значение "нет в наличии" на базе demodizzy.
и честно говоря совершенно не могу представить как это реализовать.
Может у кого было что то подобное?
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 30 Марта 2012, 15:32:57
посмотри страницу с товаром в виде xml (например странице site.ru/catalog_tovarov_tovar1 ты дописываешь site.ru/catalog_tovarov_tovar1.xml и видишь xml код) там смотришь как выводиться поле  в котором должно выводиться "нет в наличии" (кстати в каком именно поле менеджер будет указывать это значение, что за тип у данного поля) и вот когда ты увидишь в xml что меняется, пропишешь соответствующее условие в своем шаблоне .

например у тебя поле со значение "нет в наличии" будет с именем "nalichie" иметь тип поля "выпадающий список. при просмотре в xml варианте такое поле при выбранном пунте "нет в наличии" будет выглядеть примерно так.
<property id="123" name="nalichie" type="relation">
<title>Наличие</title>
<value>
<item id="333" name="Опубликован" type-id="1234" ownerId="14" xlink:href="uobject://333"/>
</value>
</property>
соответственно пункт "нет в наличии" имеет id=333 (в твоем случае конечно будут другие цифры)

 Тогда  в шаблоне для вывода товара укажем условие которое проверяет что если есть поле с именем "nalichie" и его значение не равно 333 то выводить код кнопки
<xsl:if test="not(//property[@name='nalichie']/value/item/@id=333)">
..html код кнопки добавить...
</xsl:if>
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 02 Апреля 2012, 09:28:47
Спасибо, сейчас попробую.
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 02 Апреля 2012, 11:05:09
все получилось как для карточки товара, так и для общего перечня товаров в подразделе.
Спасибо.
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 04 Апреля 2012, 14:37:02
следом за одним, тянется другое:)

Может кто подсказать, как можно реализовать что бы после нажатия, добавления товара в корзину, рядом появлялась ссылка для "Перейти в корзину" помимо того что добавляется (1)?
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 04 Апреля 2012, 14:42:14
все, что меняется в ссылке после добавления в корзину (если ты работаешь на основе demodizzy и у тебя прикручен ajax работа с корзиной), добавляется в js файле /js/site/basket.js

в строчках
if (detect_options.amount) {
var add_basket_button = jQuery('#add_basket_' + detect_options.id);
if (add_basket_button[0].tagName.toUpperCase() == 'A') {
add_basket_button.text(add_basket_button_text + ' (' + detect_options.amount + ')');
}
else add_basket_button.val(add_basket_button_text + ' (' + detect_options.amount + ')');
}
там же добавь, средствами js, ссылку на корзину, которая будет выводиться около ссылку "положить в корзину", которая фигурирует в приведенном выше коде как add_basket_button
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 05 Апреля 2012, 09:50:24
увы. моих познаний в js и ajax недостаточно что бы самостоятельно что то дописать:(
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 05 Апреля 2012, 13:00:17
ну например такой код

if (detect_options.amount) {
var add_basket_button = jQuery('#add_basket_' + detect_options.id);
if (add_basket_button[0].tagName.toUpperCase() == 'A') {
add_basket_button.text(add_basket_button_text + ' (' + detect_options.amount + ')');
}
else add_basket_button.val(add_basket_button_text + ' (' + detect_options.amount + ')');
        jQuery(add_basket_button).after('<a href="/emarket/cart/">Перейти в корзину</a>');
}

Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 05 Апреля 2012, 14:07:47
использовав предложенный код получилось следующее:

начинаешь кликать добавляя в корзину, то сколько раз кликнул, столько раз и появляется эта ссылка, но при этом если страницу обновить, то ссылка пропадает.
А еще она не появляется в карточке самого товара...
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 05 Апреля 2012, 14:20:42
может прописать как то diplay:none или visibility:hidden существующей кнопке и через JS менять это состояние?
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 05 Апреля 2012, 14:59:19
да, так тоже можно и в самом шаблоне проверять есть ли товар с таким id в корзине и как следствие скрывать или отображать эту кнопку при первичной загрузке страницы с товарами или товаром
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 05 Апреля 2012, 15:18:10
проверять средствами какими?
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 05 Апреля 2012, 19:44:23
в demodizzy уже есть эта проверка в шаблоне для вывода страницы с товаром, там у кнопки в корзину проверяются переменная, которая содержит в себе информацию о товарах в корзине. И если id текущего товара найден среди id товаров, которые в корзине, то выводится  число данного товара в корзине
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 05 Апреля 2012, 22:45:20
Да, действительно:) что может быть проще использования еще раз проверки которая уже делалась.
<xsl:if test="$cart_items/item[page/@id = $document-page-id]">
<p><a href="/emarket/cart/">Перейти в корзину</a></p>
</xsl:if>
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 06 Апреля 2012, 07:04:35
для всех кто будет использовать этот кусочек кода.
Не забывайте про то, что переменная $cart_items должна быть определена в начале данного шаблона
<xsl:variable name="cart_items" select="document('udata://emarket/cart/')/udata/items" />
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 27 Апреля 2012, 14:32:30
Переменная определена, только ссылка "Перейти в корзину" появляется если перезагрузить страницу. В чем может быть проблема?
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: admin от 27 Апреля 2012, 14:45:25
если у вас ajax механизм работы с корзиной, то надо лезть в /js/site/basket.js и там в функции replace добавлять новые инструкции, которые после того как товар ляжет в козрину отображали кнопку "оформить заказ"
Название: Re:Скрытие кнопки добавления в корзину
Отправлено: shoto от 02 Мая 2012, 11:03:37
Предложили такой вот вариант:
var flag = 0;	
if (detect_options.amount) {
var add_basket_button = jQuery('#add_basket_' + detect_options.id);
if (add_basket_button[0].tagName.toUpperCase() == 'A') {
add_basket_button.text(add_basket_button_text + ' (' + detect_options.amount + ')');
if (flag == 0){
jQuery(add_basket_button).after('<a href="/emarket/cart/">Перейти в корзину</a>');
flag=1;
else {}
}
Действительно, ссылка Перейти в корзину появляется только один раз, сколько бы не кликали на Добавить в корзину, но...
теперь страница стала перезагружаться. и все очень долго.
может есть какой вариант отображать ссылку не перезагружая страницу и не дублируя саму ссылку столько сколько кликнули?