Обратный звонок в CS-Cart 4.3.x

В очередной версии платформы электронной коммерции появилась интересная фича, реализованная отдельным аддоном, call-requests. Аддон реализует блок вывода телефона компании со ссылкой, при клике по которой появляется pop-up с формой ввода имени, телефона и удобного времени звонка. При этом в админпанели также выдается информация, на какой именно странице или со страницы какого товара была эта форма заполнена. Все такие заявки аккумулируются в одном разделе: Заказы - Обратный звонок.
Так же этот аддон добавляет кнопку и форму "Купить в один клик"... Вот тут у меня и возникли потребности некоторого изменения кода, а поскольку начиная с версии 4.3.1 центр обновлений перестал выдавать вносимые изменения в файлы при обновлении, просто затирая их новыми файлами (не везде можно воспользоваться post и pre контроллерами, а owerride влечет за собой массу ответственности по отслеживанию изменений всего перезаписываемого кода или шаблона) то запишу изменения и для себя на будущее.

Итак, "Купить в одни клик". Форма из трех полей, имя, телефон, ИЛИ email. Если покупатель пишет email - его обращение попадает в заказы. Если пишет только телефон - то в заявку на обратный звонок. Не было бы в этом ничего такого, если бы заявку из обратных звонков можно было кнопкой конвертировать в заказ. А так просто "разброд и шатание". Чуточку порядка наведем в шаблоне, изменения небольшие, но приятные. Открываем файл /design/themes/{ваша_тема}/addons/call_requests/views/call_requests/components/call_requests_content.tpl

Для каждого инпута (имя, телефон, email) - прописываем в элемент label класс cm-required
в label для поля email для класса cm-required удаляем условие проверки {if !$product}...{/if} и в тэге form удаляем это условие для класса cm-ajax-full-render (в результате мы делаем все поля обязательными, и требуем полную проверку заполнения формы при отправке.
меняем
<div class="ty-cr-or">— {__("or")} —</div>
на
<div class="ty-cr-or">— {__("and")} —</div>
меняем
<label class="control-group__title cm-required" 
for="call_data_{$id}_name">{__("your_name")}</label>
на
<label class="control-group__title cm-required" 
for="call_data_{$id}_name">
{__("your_name")} {__("and")} {__("last_name")}</label>
что позволяет явно указать последовательность ввода имени и фамилии и на последок штрих - меняем значение языковой переменной your_name с "Ваше имя" на "Ваши Имя"
=======
Фай шаблона
=======

<div id="{$id}">

<form name="call_requests_form{if !$product}_main{/if}" id="form_{$id}" action="{""|fn_url}" method="post" class="cm-ajax cm-ajax-full-render" data-ca-product-form="product_form_{$obj_prefix}{$obj_id}">
<input type="hidden" name="result_ids" value="{$id}" />
<input type="hidden" name="return_url" value="{$config.current_url}" />

{if $product}
    <input type="hidden" name="call_data[product_id]" value="{$product.product_id}" />
    <div class="ty-cr-product-info-container">
        <div class="ty-cr-product-info-image">
            {include file="common/image.tpl" images=$product.main_pair image_width=$settings.Thumbnails.product_cart_thumbnail_width image_height=$settings.Thumbnails.product_cart_thumbnail_height}
        </div>
        <div class="ty-cr-product-info-header">
            <h1 class="ty-product-block-title">{$product.product}</h1>
        </div>
    </div>
{/if}

<div class="control-group">
    <label class="control-group__title cm-required" for="call_data_{$id}_name">{__("your_name")} {__("and")} {__("last_name")}</label>
    <input id="call_data_{$id}_name" size="50" class="ty-input-text-full" type="text" name="call_data[name]" value="" />
</div>

<div class="control-group">
    <label for="call_data_{$id}_phone" class="control-group__title cm-required">{__("phone")}</label>
    <input id="call_data_{$id}_phone" class="ty-input-text-full cm-cr-mask-phone" size="50" type="text" name="call_data[phone]" value="" />
</div>

{if $product}

    <div class="ty-cr-or">— {__("and")} —</div>

    <div class="control-group">
        <label for="call_data_{$id}_email" class="control-group__title cm-email cm-required">{__("email")}</label>
        <input id="call_data_{$id}_email" class="ty-input-text-full" size="50" type="text" name="call_data[email]" value="" />
    </div>

    <div class="cr-popup-error-box">
        <div class="hidden cm-cr-error-box help-inline">
            <p>{__("call_requests.enter_phone_or_email_text")}</p>
        </div>
    </div>

{else}

    <div class="control-group">
        <label for="call_data_{$id}_convenient_time" class="control-group__title">{__("call_requests.convenient_time")}</label>
        <input id="call_data_{$id}_convenient_time" class="ty-input-text cm-cr-mask-time" size="6" type="text" name="call_data[time_from]" value="" placeholder="09:00" /> -
        <input id="call_data_{$id}_convenient_time" class="ty-input-text cm-cr-mask-time" size="6" type="text" name="call_data[time_to]" value="" placeholder="20:00" />
    </div>

{/if}

<div class="buttons-container">
    {include file="buttons/button.tpl" but_name="dispatch[call_requests.request]" but_text=__("submit") but_role="submit" but_meta="ty-btn__primary ty-btn__big cm-form-dialog-closer ty-btn"}
</div>

</form>

<!--{$id}--></div>

Комментарии

Популярные сообщения из этого блога

Обновление сервера 1С:Предприятие на UNIX платформе

CS-Cart: Модули. [AVP] Дополнение для Детектора изменений ядра