Обращение к методу со стороны ajax
Кастомизирую форму обратной связи (которая site.send_email_form), хочу отправлять форму по ajax без перезагрузки страницы.
Скопировал метод sendEmail в wa-apps/shop/lib/classes/shopViewHelper.class.php, работаю с ним. Возникла проблема обращения к методу со стороны ajax.Что мне написать в параметре url скрипта, чтобы по клику выполнился метод sendEmail? Это вообще возможно?
16 ответов
Отправляйте ваш ajax-запрос на адрес текущей страницы. Аналогично тому, как это делает стандартная форма site.send_email_form, указывая <form action="">.
Идея в том, что в процессе рендеринга страницы выполняется код шаблона с формой. Этот код вызывает sendEmail(), если видит, что пришли данные в POST'е. Вот так и делайте.
Идея понятна, но не получается :(
Вот такая простейшая форма
{if $wa->post("send") and $wa->shop->sendEmail($wa->post("phone"))}
{else}
<form method="post" action="" id="callme_send_form">
<input type="text" placeholder="Номер телефона" name="phone">
<input type="submit" value="Перезвоните мне" name="send">
</form>
{/if}
За ней скрипт
$(document).ready(function() {
$("#callme_send_form").submit(function(){
var form = $(this);
var data = form.serialize();
$.ajax({
type: 'POST',
url: location.href,
data: data
});
return false;
});
});
Без скрипта письмо приходит, со скриптом - нет.
POST-запрос не отправляет поле с именем 'send' — посмотрите в консоли браузера. Как минимум, поэтому не срабатывает условие в первой строке кода. Причина:
Only "successful controls" are serialized to the string. No submit button value is serialized since the form was not submitted using a button.
Решено.
Добавил <input type="hidden" value="call_me" name="send">
Спасибо за помощь!
Можно было бы просто заменить send на phone вот тут:
{if $wa->post("send")
* А вообще какая необходимость редактировать оригинальный файл shopViewHelper.class.php? Не проще свой файл с классом добавить? Тогда и при установке обновлений ничего не потеряется.
Спасибо. Оба замечания учел, все работает!
Добрый день. А не расскажете поподробнее откуда это скопировали?
из /wa-apps/shop/lib/classes/shopNotifications.class.php
Павел, а можете пошагово расписать данную доработку, ну или по крайней мере выложить содержимое /wa-apps/shop/lib/classes/[AjaxNotification].class.php ?
Раз тема спусть столько времени актуальна, рассказываю как реализовать отправку формы по AJAX без перезагрузки страницы на примере формы быстрого заказа в один клик.
Форма в шаблоне карточки товара:
Скрипт для отправки:
Теперь в соответствии с инструкцией https://support.webasyst.ru/170/custom-helper/ создаем класс shopCustom и метод sendBuyMeEmail(). Привожу полный код файла /wa-apps/shop/lib/classes/shopCustom.class.php
Файл /wa-apps/shop/lib/classes/shopCustom.class.php
Не приходят сообщения на Емейл.... В логах:
В shopCustom.class.php перепроверил, в setFrom и в setTo указанны корректные адреса емейл...
Вместо 'email от кого отправляем' вставьте реальный адрес электронной почты, который позволит отправить письмо с Вашего сервера, а вместо www.site.ru адрес Вашего сайта.
То же самое вместо 'email кому отправляем'.
Крутая штука, но смс не хотят приходить как не бился, может подскажете в чем может быть проблема?
Адреса сайта и мыла прописал
Разобрался, письма с сайта вообще не приходили, поменял почту, заработало.
А скажите пожалуйста есть ли возможность вставить в php файл адрес почты из настроек магазина, для заказчика так будет удобнее.
Сделал все по инструкции. Работает, но только на части страниц причем не понятно по какой причине. Методом проб и ошибок, как я понял на части страниц {if $wa->post("xxxx")} это условие банально не отрабатывает как будто не вытягивается пост. И в итоге получается работает отправка на страницах товара, страницах Магазина, на БЛОГЕ везде, ... и не работает в корзине, в категориях, на главной! Форма одинаково генериться проверял! Подскажите в чем может быть причина, а то получается с части страниц письмо приходит , а с части нет...?
та же тема, не решили вопрос?