Модальная форма из Конструктора форм

#1 14 сентября 2013 в 21:09
Заказчик захотел, чтобы по кнопкам "Записаться" и "Обратная связь" выскакивали модальные окошки-формы с полями для обратной связи...
Стал ваять...
1. Сделал модули под каждую форму. Задал CSS_префикс, назначил классу этого модуля display:none. Теперь обе формы выводятся невидимыми на каждой странице.
2. Сделал кнопки с видимых модулей, которые делают формы видимыми. Но… в случае ошибки заполнения формы, сообщения, которые идут по тэгу
div class="sess_messages" и далее по дереву почему-то находятся не внутри модуля...
Ну ладно… в template.php допустим я переставлю sess_messages в нужный мне контейнер. Но в случае ошибки снова перегружается страница и снова форма будет невидима...
Сейчас попробую сделать форму в виде отдельной статьи со своей страницей и шаблоном, чтобы сразу выглядела как модальная...
Блин, и как вот ошибки подставить в вывод формы...
Есть идеи как это все сделать не меняя архитектуру Инстанта???
#2 14 сентября 2013 в 21:36

Есть идеи как это все сделать не меняя архитектуру Инстанта???

Львенок

Не доводить до крайности и прямо в модуле подключаемой формы сделать свою, грубо говоря "предварительную проверку" полей, благо JavaScript с этим справляется легко… ну где-то так.
#3 14 сентября 2013 в 21:38
например так:
1. грузить код формы по ajax через отдельный файл, т.е. чтобы было универсально, передавать этому файлу например id нужной вам формы.
2. добавить свой фильтр или подделать существующий, чтобы вместо формы показывал ссылку на форму, которая бы грузилась в модалке по ajax.
3. подправить компонент forms примерно так pastebin.com/yP44vB5r
4. в js проверять ответ соответственно, при аякс запросе система будет отдавать ответы в json формате.

P.s. добавить в ядро пару методов
  1. private static function detectContext(){
  2. if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
  3. $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  4. self::$is_ajax = true;
  5. } else {
  6. self::$is_ajax = false;
  7. }
  8. }
  9. public static function isAjax(){
  10. return self::$is_ajax;
  11. }
а в конструктор ядра добавить
  1. self::detectContext();
к слову сказать все это будет (уже есть) в новом дистрибутиве.
#4 16 сентября 2013 в 16:38
Не хочу лезть в ядро. Разбираться и отлаживать косяки, которые будут потом, некогда и желания нет.
Сделал отдельный шаблон для статьи. Сделал пару отдельных статей в которые вставлены формы. В шаблон прописал несколько DIVов. Яваскриптом выдергиваю сообщения об ошибках и цепляю к нужному ДИВу...
Следующие грабли теперь — в случае успешного отправления сообщения снова выдается эта форма, когда она уже не нужна (имхо не продумано разработчиками)...
Сделать что ли проверку на наличие "успешного" сообщения и в случае наличия скрывать форму и перебрасывать потом на -2 странички из history...

Кстати, а где находится код, который отвечает за генерацию форм из Конструктора???
#5 16 сентября 2013 в 17:07

Разбираться и отлаживать косяки, которые будут потом, некогда и желания нет.

Львенок
я вам дал рабочий код из 1.10.3, при желании подробнее можно посмотреть в траке

где находится код, который отвечает за генерацию форм из Конструктора

Львенок
form.class.php
#6 16 сентября 2013 в 20:40


Разбираться и отлаживать косяки, которые будут потом, некогда и желания нет.

Львенок
я вам дал рабочий код из 1.10.3, при желании подробнее можно посмотреть в траке

Fuze
Я обязательно буду разбираться, но потом. Сейчас время, которое я могу уделить этому проекту, сильно ограничено.


где находится код, который отвечает за генерацию форм из Конструктора

Львенок
form.class.php

Fuze
Спасибо. Супер.
upd: Есть небольшое пожелание к разработчикам, чтобы можно было в Конструкторе выбирать альтернативные шаблоны форм. Сейчас он жестко в классе прописан…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.