Сделал кнопку «Предзаказ» вместо кнопки «Купить в один клик» но нужна помощь зала

Была такая задача: для товаров, у которых нулевое количество, прятать кнопку «Купить» при включенной функции «Действие при отсутствии товара в наличии —> Предзаказ», потому что по факту некоторые товары можно было найти, а некоторые — никак, а если человек положил предзаказанный товар в корзину и уже его оплатил, проблем не оберешься, если товар не найти.

Вместо кнопки «Купить» решили изменить кнопку «Купить в один клик» и сделать её для товаров с нулевым количеством кнопкой «Предзаказ».

Решено примерно так:

  1. Файл design\themes*ваша тема*\templates\common\product_data.tpl — выводим кнопку «Купить» только для товаров, что есть в наличии:

             {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}
             {/if}
    
  2. Файл design\themes*ваша тема*\templates\addons\call_requests\hooks\products\add_to_cart.post.tpl — выводим кнопку и форму «Предзаказ»:

     			{if $product.amount > 0 }
     		    {include file="common/popupbox.tpl"
     		        href="call_requests.request?product_id={$product.product_id}&obj_prefix={$obj_prefix}"
     		        link_text=__("call_requests.buy_now_with_one_click")
     		        text=__("call_requests.buy_now_with_one_click")
     		        id="call_request_{$obj_prefix}{$product.product_id}"
     		        link_meta="ty-btn ty-btn__tertiary ty-cr-product-button cm-tooltip"
     		        content=""
     		    }
     		{else}
     		    {include file="common/popupbox.tpl"
     		        href="call_requests.request?product_id={$product.product_id}&obj_prefix={$obj_prefix}"
     		        link_text=__("call_requests.preorder_with_one_click")
     		        text=__("call_requests.preorder_with_one_click")
     		        id="call_request_{$obj_prefix}{$product.product_id}"
     		        link_meta="ty-btn ty-btn__preorder ty-cr-product-button cm-tooltip"
     		        content=""
     		    }
     		{/if}
    

Получилось, вроде, неплохо. Естественно, нужно добавить немного CSS для ty-btn__preorder, но тут уж на вкус на цвет…

Но есть одна проблема, был бы очень признателен, например @ecomlabs за помощь.

Нужно при создании записи об обратном звонке в cscart_call_requests дописать к имени пользователя, которое он введет, слово «предзаказ», чтоб было видно при просмотре заявок на обратный звонок, примерно так:

Сделать это, вроде, можно где-то в app\addons\call_requests\funk.php

Вопрос: где? Условие то же: если количество товара не больше нуля, добавляем к введенному пользователем имени переменную __preorder_mark.

1 лайк
  1. в add_to_cart.post.tpl вместо {else} нужно написать {elseif $product.out_of_stock_actions == “OutOfStockActions::BUY_IN_ADVANCE”|enum} чтобы кнопка отображалась только для товаров с возможностью предзаказа;
  2. в параметр href popupbox’a, отображаемого для предзаказа, нужно добавить url-параметр &preorder=“YesNo::YES”|enum в url;
  3. создаём frontend-контроллер call_requests.post.php, в котором в случае GET-запроса с mode ‘request’ добавляем вызов Tygh::$app[‘view’]->assign(‘preorder’, $_REQUEST[‘preorder’]);
  4. подключаемся к smarty-хуку call_requests:call_requests_form и добавляем скрытый input с именем call_data[preorder] с value = $preorder;
  5. подключаемся к php-хуку do_call_request. внутри делаем проверку на $params[‘preorder’] == YesNo::YES. если условие верно, меняем $params[‘name’] (тут лежит имя пользователя) так как это нужно вам. не забудьте подключить Tygh\Enum\YesNo.
1 лайк

Используйте функцию fn_get_product_amount($product_id); для получения кол-ва товара в наличии и меняйте значение элемента $params[‘name’]

1 лайк