Отключить способ доставки если тип товара....

1

Добрый день,


Столкнулся с необходимостью выключать тип доставки если категория товара или Тип товара недостуапен для доставки, например оружие.

Подскажите как реализовать корректно или поправьте мой костыль ниже,


Добавил в шаблон wa-data/public/shop/themes/{%yourtheme%}/cart.html 

{* SERVICES *}
                                  
                                    {* Check if available to delivery *}
                                    {if in_array($item.product.type_id,[2,5,7,9])}
                                        <div class="footer__title">
                                            [`Notdelivered`]
                                        </div>
                                    {/if}

Если тип товара 

2,5,7,9 //Оружие Ножи Патроны и прочее Не подлежит доставке

Таким образом в корзине напротив товара который не подлежит доставке появляется warning

Затем в файле 

wa-apps/shop/lib/classes/checkout/shopCheckoutShipping.class.php

перед

if (is_array($m['rates'])) {

добавил

            //Black-alert
            
            foreach ($items as $item) {
                if (in_array($item[&#039;category_type&#039;],[2,5,7,9]) ) {
                    $m[&#039;available_to_delivery&#039;] = false;
                }
                else {
                    $m[&#039;available_to_delivery&#039;] = true;
                }
            }

и после

'length' => ifset($item, 'length', null),

добавил

&#039;category_type&#039;      => $item[&#039;product&#039;][&#039;type_id&#039;],

wa-data/public/shop/themes/{%yourtheme%}/checkout.shipping.html

добавил проверку

 {if $m.available_to_delivery == false && $m.id == 7}
        {*{if ($m.id == 7 || $m.name != &#039;Самовывоз&#039;) || $m.available_to_delivery == true}disabled="disabled"{/if} *}
            <li class="w-box-sh s-shipping-item shipping-0">
                <h3 class="s-shipping-header"> [`NotIncludedMessage`] </h3>
            </li>
       {else}
        <li class="w-box-sh s-shipping-item shipping-{$m.id}{if $m.id == $shipping.id} is-selected{/if}">
            <h3 class="s-shipping-header">
                <label class="s-shipping-label">
                    {if !empty($m.logo)}
                        <img class="s-shipping-image method-logo" src="{$m.logo}">
                    {/if}
                    <input class="s-shipping-input" type="radio" name="shipping_id" value="{$m.id}" {if $m.external || !empty($m.error)}disabled{/if} {if $m.id == $shipping.id}checked{/if}>
                    <span class="s-shipping-name">{$m.name|escape}</span>
                </label>
            </h3>
            <div class="s-shipping-details">

                <div class="s-shipping-controls">
                    {if empty($m.error) && !empty($m.rates)}
                        {if count($m.rates) > 1}
                            <select class="s-shipping-select shipping-rates" name="rate_id[{$m.id}]">
                                {foreach $m.rates as $rate_id => $r}
                                    <option data-rate="{shop_currency($r.rate, $r.currency)}" {if !empty($r.est_delivery)}data-delivery="{$r.est_delivery}"{/if} {if !empty($r.comment)}data-comment="{$r.comment}"{/if} value="{$rate_id}"{if $rate_id == $shipping.rate_id} selected{/if}>{$r.name} ({shop_currency($r.rate, $r.currency)})</option>
                                {/foreach}
                            </select>
                        {else}
                            <input type="hidden" name="rate_id[{$m.id}]" value="{key($m.rates)}">
                        {/if}
                    {/if}
                </div>

                {if $m.description}<p class="s-shipping-description">{$m.description}</p>{/if}

                <div class="s-rate-wrapper {if !empty($m.error)}has-error{/if}">

                    {* PRICE 
                    <div class="s-price-wrapper js-price-wrapper">
                        [`Price`]:
                        <span class="s-price price nowrap js-price" {if !empty($m.error)}style="display: none;"{/if}">
                            {if empty($m.error)}
                                {if $m.rate !== null}
                                    {shop_currency_html($m.rate, $m.currency)}
                                {elseif $m.external}
                                    {$external_methods[] = $m.id}
                                    [`Loading...`] <i class="icon16 loading"></i>
                                {/if}
                            {/if}
                        </span>
                    </div>
                    *}

                    {* DELIVERY *}
                    <div class="s-delivery-wrapper js-delivery-wrapper" style="{if empty($m.est_delivery) || !empty($m.error)}display: none;{/if}">
                        [`Estimated delivery`]:
                        <span class="s-delivery est_delivery js-delivery-wrapper">{if !empty($m.est_delivery)}{$m.est_delivery}{/if}</span>
                    </div>

                    {* COMMENT *}
                    <p class="s-comment hint error comment js-comment" style="{if empty($m.comment)}display: none;{/if}">
                        {if !empty($m.comment)}{$m.comment}{/if}
                    </p>

                    {* SHIPPING *}
                    <p class="s-shipping-error shipping-error js-error" {if empty($m.error)}style="display: none;"{/if}>{if !empty($m.error)}{$m.error}{/if}</p>
                </div>

                {if !empty($m.form)}
                    <div class="wa-form wa-address" {if $m.id != $shipping.id}style="display:none"{/if}>
                        {$m.form->html()}
                        {if !empty($checkout_steps.shipping.service_agreement_hint)}
                            <div class="wa-field">
                                <div class="wa-value">
                                    <p class="hint">{$checkout_steps.shipping.service_agreement_hint}</p>
                                </div>
                            </div>
                        {/if}
                    </div>
                {/if}

                {if !empty($m.custom_html)}
                    <div class="wa-form" {if $m.id != $shipping.id}style="display:none"{/if}>{$m.custom_html}</div>
                {/if}
            </div>
        </li>
        {/if}

Как это можно сделать менее костыльно при этом не пиля модуль и не бояться обновлений  shop-script ?

Пример как это выглядит

и шаг выбор способа доставки

3 комментария

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

Чтобы добавить комментарий, зарегистрируйтесь или войдите