0 Пользователей и 1 Гость просматривают эту тему.
  • 15 Ответов
  • 4272 Просмотров
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
Joomla 2.5

Есть необходимость заполнить одно из полей формы некоторым значением в момент отправки формы. Значение берется из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить". По сути нужно осуществить перехват события отправки. Я написал скрипт на jquery, но он не успевает исполнится, потому что у хроноформс похоже собственный обработчик на мутулс, который срабатывает быстрее. Мой скрипт отрабатывает, если в форме были допущены ошибки заполнения и она не отправляется после нажатия на "отправить". Но этот вариант не годится.
Как решить проблему?
« Последнее редактирование: 19.08.2014, 17:09:02 от Zverek »
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Сделай чтобы скрипт исполнялся на странице, и поле перед отправкой будет уже с нужным наполнением. Или в обработчике, где идет получение значений name, заполнить нужной информацией из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить".
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
Сделай чтобы скрипт исполнялся на странице, и поле перед отправкой будет уже с нужным наполнением.

Фишка в том, что значение должно присваиваться именно в момент отправки данных. Значение берется из БД и за время заполнения формы оно там может изменится. Поэтому брать его нужно в последний момент.

Или в обработчике, где идет получение значений name, заполнить нужной информацией из php-скрипта, который выполняется после того как юзер нажал кнопку "отправить".

А где этот обработчик? Это надо менять скрипт самого хроноформса, как я понимаю. Не думаю, что это вариант, поскольку при обновлении компонента мои изменения исчезнут.
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Ну, если так обновлять не умеете..
Тогда поточнее, что откуда берется, почему эти данные так часто меняются, и для чего они нужны. Может есть другой вариант решения...
И что это за поле такое в БД которое меняется, и может вставляться в форму..?
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
форма - заявка на услуги. Каждая заявка имеет номер. Номер формируется из текущей даты и порядкового номера заявки. Чтобы узнать порядковый номер, нужно считать из базы номер предыдущей заявки и увеличить на единицу. Если сформировать поле с номером заявки в момент, когда форма только появляется на странице, то велика вероятность того, что пока юзер будет заполнять заявку, другой юзер заполнит форму, отправит данные и изменит номер последней заявки в БД. Поэтому считывать номер заявки нужно именно в последний момент. То есть когда юзер уже отправляет данные.
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
очень, и очень тонко..) Есть такой аттрибут для полей БД как AUTO_INCREMENT, благодаря ему у тебя не будут совпадать номера заявок..)))
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
Дело в том, что каждый год порядковый номер должен обнуляться! То есть, номер растет в пределах одного года. Год кончился - начинаем нумерацию сначала. Поэтому я не могу воспользоваться уникальным id заявки, а должен сделать в БД специальное поле для номера.
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Зачем это, вручную считать будешь чтоли?)
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
Не я придумывал ТЗ :)

В любом случае, по id я считаю номер или формирую его в отдельном поле, мне этот номер нужно передавать в форму, потому что номер заявки должен быть в письме, которое получает сотрудник фирмы вместе с остальными заполненными полями.
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Я написал скрипт на jquery, но он не успевает исполнится, потому что у хроноформс похоже собственный обработчик на мутулс, который срабатывает быстрее.
Опа, что-то я этого сразу не заметил...  :o

Скрипт в студию, ща ускорим его..!
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
Да обычный перехватчик.

Код
$('#myform').submit(function(){
$.post("zayavka.php", function(response)
{
 $('#number').val(response);

});    
});


number - id текстового поля, в которое вставляется номер заявки
zayavka.php - скрипт запроса номера предыдущей заявки из БД и формирования нового номера

Вот если я жму на "отправить" не заполнив какого-то обязательного поля, то данный перехватчик срабатывает - записывает номер заявки в нужное поле и потом при повторной отправке данных (когда все обязательные поля заполнены) передает это значение в БД и в письмо.
Но если форма сразу заполнена верно, то обработчик не срабатывает. Как будто его нет вовсе. Ставил return false; не помогает.. алерты выводил внутри обработчика - ничего не работает, если ошибок в форме нет. Она просто уходит и все. Без нужного поля.

Насчет того, что в хроноформс обработчик на mootools  и он срабатывает быстрее моего - это лишь предположение. Я не знаю как на самом деле работает форма.
« Последнее редактирование: 18.08.2014, 14:42:39 от Zverek »
*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Все, пошутили и хватит.. письмо отправляется только после того как в БД добавлены данные, в итоге получается, что после запроса на сохранение новой заявки INSERT, но, до функции отправки письма, нужно создать запрос SELECT, и выбрать все необходимые поля, для отправки в письме.
файл zayavka.php скиньте тоже, возможно проблема в нем..
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0


Цитировать
в итоге получается, что после запроса на сохранение новой заявки INSERT, но, до функции отправки письма, нужно создать запрос SELECT, и выбрать все необходимые поля, для отправки в письме.
Не уловил мысль. Это все делает хроноформс. Зачем нам вмешиваться в этот процесс?  На мой взгляд достаточно, что номер последней заявки мы считаем в момент отправки данных. тут же сформируем новый номер и скормим его хроноформсу.
Скрипт заявки ниже, но он выполняет поставленную перед ним цель. Он рабочий.

номер выглядит так: 12_08_14, где 12 - номер заявки по порядку. 08_14 - текущий месяц и год
В поле БД `number` заявка в таком виде и хранится: 12_08_14. Следующий код считывает номер последней заявки, парсит его, и формирует новый.
Код
$sql = "SELECT number FROM `g5x4u_zayavka` ORDER BY `cf_id` DESC LIMIT 1";
$db->setQuery($sql);
$data_row = $db->loadRow();
$new_number='1';
if($data_row!='')
{
$explode=explode('_',$data_row[0]);

$old_year=$explode[2];
$new_number= ($old_year==date('y'))? $explode[0]+1 : 1;

}

$all_number=$new_number.'_'.date('m').'_'.date('y');
echo $all_number;

*

shurakana

  • Давно я тут
  • 792
  • 50 / 6
Цитировать
Зачем нам вмешиваться в этот процесс?  На мой взгляд достаточно, что номер последней заявки мы считаем в момент отправки данных.

Извините, связь прервалась... я сдаюсь..)
Эта подпись отображается внизу каждого Моего сообщения. Я также могу использовать BB код и смайлы.
*

Zverek

  • Осваиваюсь на форуме
  • 26
  • 1 / 0
На самом деле у меня просто неверно был написан перехватчик события отправки (ошибку разъяснили на другом форуме). Mootools  тут вообще не при делах, поскольку он отвечает только за валидацию формы. Далее форма уходит на обработку стандартным путем. И при корректном перехватчике моя задача решается элементарно.
Вот правильный скрипт перехватчика (не думаю, что кому-то надо будет так заморачиваться, но вдруг...)

Код
$('#myform').submit(function(e, force)
{
    if(!force)
   {
       e.preventDefault();    
       $.post("zayavka.php", function(response)
       {
   $('#number').val(response);
            $('#myform').trigger('submit','true');
        });  
   }

});


То есть вся эта тема к ChronoForms вообще говоря мало отношения имеет. Знание JQuery и ничего больше.
« Последнее редактирование: 20.08.2014, 09:51:44 от Zverek »
*

МихаилМ

  • Захожу иногда
  • 55
  • 2 / 0
Вот правильный скрипт перехватчика (не думаю, что кому-то надо будет так заморачиваться, но вдруг...)

Код
$('#myform').submit(function(e, force)
{
    if(!force)
   {
       e.preventDefault();   
       $.post("zayavka.php", function(response)
       {
    $('#number').val(response);
            $('#myform').trigger('submit','true');
        });   
   }

});



Друг! У тебя там бесконечный цикл получается в скрипте. На субмит
Код
$('#myform').submit(function(e, force)
ты запускаешь операции, которые запускают эту же функцию опять
Код
$('#myform').trigger('submit','true');
Тут правильно делать обработчик событий на кнопку в форме
Код
$('#какая-то кнопка внутри формы').click(function() {});	
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

url материала на email (ChronoForms) [Решено]

Автор Konstantinl

Ответов: 20
Просмотров: 11062
Последний ответ 12.08.2022, 03:00:20
от jesus
Как выводиться форма в модуле? ChronoForms 7?

Автор Alex_iPod

Ответов: 3
Просмотров: 1322
Последний ответ 26.04.2022, 06:19:06
от marksetter
Как в ChronoForms сделать изменение формы в зависимости от выбора?

Автор sashka17

Ответов: 0
Просмотров: 1398
Последний ответ 08.02.2021, 09:33:52
от sashka17
ChronoForms 3 перестал работать на joomle 2.5.9. Ищу совета или специалиста

Автор RuslanKazan

Ответов: 2
Просмотров: 1465
Последний ответ 09.12.2020, 14:19:18
от draff
Информация с UTM меток в ChronoForms

Автор BykovAlx

Ответов: 1
Просмотров: 2475
Последний ответ 13.07.2020, 15:13:06
от jesus