Кнопка "Предзаказ" вместо кнопки "Купить"

Здравствуйте. У нас на сайте, когда товара нет в наличии, его можно предзаказать. В карточке товара указано “доступность: предзаказ”, но кнопка покупки остается “купить”. Можно ли как-то сделать, чтобы надпись кнопки менялась на “предзаказ” вместо “купить”?

можем доработать

В design/themes/ТЕМА/templates/common/product_data.tpl используйте хук products:add_to_cart и передавайте в файл buttons/add_to_cart.tpl название кнопки в параметре but_text при нужном условии

2 лайка

сколько стоит?

напишите в лс, а лучше в скайп

Подскажите пожалуйста, что где можно почитать новичку о cs-cart чтобы это сделать ?
Файл tpl нашел, хук products:add_to_cart - вижу. Что значит “и передавайте в файл buttons/add_to_cart.tpl название кнопки в параметре but_text при нужном условии” из контекста tpl трудно понять.
Как указать условие что товара нет и он доступен для предзаказа ?

Далее вижу что если у товара есть опции, то в but_text=__(“select_options”).
Я так понимаю что чтобы вместо Купить было Предзаказ, то надо аналогично присвоить переменной but_text что то. Вопрос что ? И где это вообще прописано ?
И заодно что это за синтаксис такой два подчеркивания и в скобках строка: __(“select_options”) ?

select_options - это имя языковой переменной. Языковые переменные добавляются и редактируются на странице Администрирование -> Языки -> Переводы

Для условия попробуйте использовать переменную $product.amount

Так же интересует подобная логика отображения. Можно более подробно ее описать

Спасибо. Уже чуть понятнее, но $product.amount мало. Внутри товара есть селектор “Действие при отсутствии товара в наличии”. Как его значение получить ?
Еще у товаров с вариациями показывается надпись Выбрать вариацию, языковую переменную такую нашел product_variations.select_variation, но в product_data.tpl она не упоминается…
А как для вариаций поправить кнопку на Предзаказ ?

И более сложный вопрос: в движке с которого переезжаем была следующая логика работы Предзаказа: сейчас товара нет, но мы знаем что он скоро поступит в конкретном количестве (допустим товар с вариацией Размер и знаем что поступят все размеры по 2 штуки). Мы устанавливали остаток по вариациям равным тому что ожидаем, но общее кол-во товара по всем вариациям (там было такое поле) ставим равным нулю и в этом случае начинает работать кнопка Предзаказ. В результате когда клиенты делают Предзаказ, то остатки по вариациям уменьшаются, а общий остаток уходит в минус, и когда остаток по какой то конкретной вариации доходит до нуля, то она пропадает с витрины и больше ее Предзаказать нельзя.
Смысл в том что клиенты могут предзаказать только то количество, которое реально поступит, а не бесконечное.
Каким то образом такая логика реализуема в CS-CART ?

{$product.zero_price_action}

Это модулем меняется

design/themes/responsive/templates/addons/product_variations/hooks/products/add_to_cart.override.tpl

О, спасибо большое!
Последний вопрос по этому моменту.
Не знаю каким образом, но как то нашел, что для опции Предзаказ $product.zero_price_action == “R”

Но это буквально вот “методом тыка”, а как правильно это делать и где посмотреть ?
Что вот Предзаказ это $product.zero_price_action == “R”, а другая опция чему то другому равна…
Или как то увидеть переменную для текущего товара в карточке можно ?
Про режим Debug знаю, но сколько в нем по вкладкам не ходил, находясь в карточке нужного товара, не увидел там переменной zero_price_action :frowning:

Документации нет. Только через консоль разработчика в вашем браузере посмотреть

На странице товара в дебаге Templates, затем в списке шаблонов products и в нем найдете zero_price_action.

Можно найти и через поиск браузера (ctrl+f):

Расшифровку значений (R, P, A) можно увидеть на скриншоте ecomlabs.

Спасибо

Спасибо

1 лайк

Если у вас получилось сделать, можете подробно расписать, как это сделать. Очень бы пригодилось. И не слетит ли модификация при обновлении?

Легко :slight_smile:
В указанном выше файле: “product_data.tpl” есть вот такая строка:

{include file="buttons/add_to_cart.tpl" but_id=$_but_id but_name="dispatch[checkout.add..`$obj_id`]" but_role=$but_role block_width=$block_width obj_id=$obj_id product=$product but_meta=$add_to_cart_meta}

Меняем ее на:

    {if $product.amount > 0 }
			{include file="buttons/add_to_cart.tpl" but_id=$_but_id but_name="dispatch[checkout.add..`$obj_id`]" but_role=$but_role block_width=$block_width obj_id=$obj_id product=$product but_meta=$add_to_cart_meta}
		{else}
			{if $product.zero_price_action == "R" }
				{include file="buttons/add_to_cart.tpl" but_id=$_but_id but_text=__("on_backorder") but_name="dispatch[checkout.add..`$obj_id`]" but_role=$but_role block_width=$block_width obj_id=$obj_id product=$product but_meta=$add_to_cart_meta}
			{/if}
		{/if}

Это пока для товара без вариаций, до них еще руки не дошли, чуть позже сделаю.

А что такое модификация и не слетит ли она я просто не знаю…

P.S. Буду благодарен если мне кто то объяснит, что это за язык такой в этих tpl файлах. Просто я программированию обучался в эпоху ассемблера, C… сейчас самостоятельно немного ковыряю php, javascript. А это что за синтаксис такой с диким количеством скобок фигурных, раньше не встречал просто :slight_smile:

1 лайк

Спасибо за помощь. Язык smarty называется. О нем немного есть речь в видео уроках по cs-cart.

К сожалению такой вариант на Unitheme 2 не работает или полностью пропадает блок или переменная не выводится, если кто то доделывал на Unitheme подскажите, еще не доступные товары затемняется при $product.zero_price_action == “R”, хотелось бы также перевести карточку товара в полноцветный режим.

По поводу подсветки если кому надо решается <div class=“ut2-gl__body {if $settings.abt__ut2.product_list.decolorate_out_of_stock_products == “YesNo::YES” |enum && $product.amount <= 0 && $product.zero_price_action !== “P”} decolorize{/if}” в /design/themes/abt_unitheme2/templates/blocks/list_templates/grid_list.tpl, на товаре должен быть запрет на добавлении в корзину при нулевой цене.