Поля записи данных на обратный звонок

Попробуйте

<?php

if (!defined('BOOTSTRAP')) { die('Access denied'); }

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'request') {
        if (!empty($_REQUEST['call_data']) && empty($_REQUEST['call_data']['email'])) {
            $prefix = preg_replace('/[^0-9]+/', '', $_REQUEST['call_data']['phone']);
            $_REQUEST['call_data']['email'] = $prefix . '@no.mail';
        }
    }
    return;
}
result_ids: call_request_block793

return_url: index.php?dispatch=call_requests.request&obj_prefix=block&obj_id=793
call_data[name]: Сергей
call_data[phone]: +38(050)123-45-67
call_data[time_from]:
call_data[time_to]:
security_hash: 9a6d3492216d184f07fc6ac13eb529ae
full_render: Y
is_ajax: 1
dispatch[call_requests.request]:

Отработало как обычно, но в заказ не упало. Можно сказать, что вернулись к начальной точке(((( Как же конвертировать этот звонок в заказ? Может ему нужно добавить данные по доставке или тип сменить? Я в отчаянии…

А если так: (без pre контроллеров)

В my_changes создать func.php

function fn_my_changes_generate_email()
{
    $id = TIME;
    $email = $id.'@mail.com';
    
    return $email;
}

В файле call_requests_content.tpl
/design/themes/[ТЕМА]/templates/addons/call_requests/views/call_requests/components

Примерно на 30 строке после
<input id="call_data_{$id}_phone" class="ty-input-text-full cm-cr-mask-phone" size="50" type="text" name="call_data[phone]" value="{$call_data.phone}" />

{if !$product}

{if $call_data.email}
	{$call_email = $call_data.email}
{else}
    {$call_email = ""|fn_my_changes_generate_email}
{/if}


<input id="call_data_{$id}_email" class="ty-input-text-full" size="50" type="hidden" name="call_data[email]" value="{$call_email}" />
{/if}

Это покажется странным, но в папке /design/themes/[ТЕМА]/templates/addons/call_requests/ у меня только папка hooks и все. Тема Yupi от Алексбрендинг
/design/themes/[ТЕМА]/templates/addons/call_requests/views/call_requests/components этот путь нашел в responsive

Попробывал Ваш способ. Эффекта тоже нет.

Ну, он же отправляет данные на диспетчер с формы, а где код отправки лежит? Может я смогу просто теже данные сразу по ajax и отправить на свой скрипт. Костыль, но лучше, чем ничего

У нас данный метод работает. Но не на теме AB

какой из именно работает?

У нас второй вариант. Но уверены, что и первый вариант тоже можно сделать :slight_smile:

Можете сбросить свой вариант файла call_requests_content.tpl?

В данном файле логика немного иная, суть в том, чтобы убрать email вообще, и генерировать его.

<div id="{$id}">

<form name="call_requests_form{if !$product}_main{/if}" id="form_{$id}" action="{""|fn_url}" method="post" class="{if !$product} cm-ajax cm-ajax-full-render{/if}"{if $product} data-ca-product-form="product_form_{$obj_prefix}{$product.product_id}"{/if}>
<input type="hidden" name="result_ids" value="{$id}" />
<input type="hidden" name="return_url" value="{"order.complete"|fn_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">
            <h3 class="ty-product-block-title">{$product.product}</h3>
        </div>
    </div>
{/if}

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

<div class="ty-control-group">
    <label for="call_data_{$id}_phone" class="ty-control-group__title cm-cr-mask-phone-lbl 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="{$call_data.phone}" />
</div>

{if $product}

{if $call_data.email}
 {$call_email = $call_data.email}
 {else}
   {$call_email = ""|fn_my_changes_generate_email}
{/if}


<input id="call_data_{$id}_email" class="ty-input-text-full" size="50" type="hidden" name="call_data[email]" value="{$call_email}" />
{/if}

{if $product && $show_email}

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

    <div class="ty-control-group">
        <label for="call_data_{$id}_email" class="ty-control-group__title cm-email">{__("email")}</label>
        <input id="call_data_{$id}_email" class="ty-input-text-full" size="50" type="text" name="call_data[email]" value="{$call_data.email}" />
    </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="ty-control-group">
        <label for="call_data_{$id}_convenient_time_from" class="ty-control-group__title">{__("call_requests.convenient_time")}</label>
        <input id="call_data_{$id}_convenient_time_from" class="ty-input-text cm-cr-mask-time" size="6" type="text" name="call_data[time_from]" value="" placeholder="{$smarty.const.CALL_REQUESTS_DEFAULT_TIME_FROM}" /> -
        <input id="call_data_{$id}_convenient_time_to" class="ty-input-text cm-cr-mask-time" size="6" type="text" name="call_data[time_to]" value="" placeholder="{$smarty.const.CALL_REQUESTS_DEFAULT_TIME_TO}" />
    </div>

{/if}

{include file="common/image_verification.tpl" option="call_request"}

<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>

Дык, а как вы его в заказы передаете, если в cscart email обязателен для создания заказа?
Кроме того, я так понимаю, что не составит труда до собаки подставить номер телефона…

Должно работать проверьте путь до файла call_requests.pre.php и почистите кэш

app/addons/ADDON_NAME/controllers/frontend/call_requests.pre.php

Кстати, а не нужны ли еще данные по товару? :slight_smile: Добавив email, заказ может не будет создан из-за отсутствия информации по товару, так как запрос из обратного звонка идет

кеш почистил и путь проверил
/app/addons/my_changes/controllers/frontend/call_requests.pre.php

<?php

if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }

if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’) {
if ($mode == ‘request’) {
if (!empty($_REQUEST[‘call_data’]) && empty($_REQUEST[‘call_data’][‘email’])) {
$prefix = preg_replace(’/[^0-9]+/’, ‘’, $_REQUEST[‘call_data’][‘phone’]);
$_REQUEST[‘call_data’][‘email’] = $prefix . ‘@no.mail’;
}
}
return;
}

Не хочет работать. В звонки падает и все
http://joxi.net/Grq4wzXiQ7qRbA

:face_with_symbols_over_mouth: Задолбало. Пойду убьюсь ап стенку

Теперь нужно придумывать тестовый товар?

Видимо так и есть, функция fn_call_requests_placing_order размещает заказ

Что интересно, alex branding написал, что их теиа не влияет на функционал, но ттгда я вообще потеряшка ;-(

Так вы запрос не с товара тестируете, а с шапки магазина? В этом случае, конечно же, работать не будет

С шапки нет поля email. @sergejfreelancer call_requests.pre.zip (407 Байт)

1 лайк

Т. Е. Проблема в том, что с шапки нужно добавить скрытое поле email? И спасибо за файл, но разве он выполнится, если поле почты будет не пустое?