UMIhelp
Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: Axiomateria от 29 Апреля 2013, 23:45:46
-
Здравствуйте!
На основе шаблона "demodizzy" пытаюсь усовершенствовать функционал отправки сообщения администратору сайта в виде
контактных данных с телефоном. То есть в шапке сайта будет ссылка "Обратный звонок".
В этой форме всего три поля "Имя" Номер "телефона" и "Удобное время для звонка".
Основывался в решении на этой статье "Вывод_формы_обратной_связи_в_модальном_окне"
http://wiki.umisoft.ru/%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D0%B8_%D0%B2_%D0%BC%D0%BE%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC_%D0%BE%D0%BA%D0%BD%D0%B5
Плагин и стили Fancybox в последних версиях закачал и подключил в шаблоне, то есть всё как по статье сделал.
Форму сообщения создал в админке (id 131) и вот когда дошёл до этого места в статье: "Создаем форму обратной связи, если она не создана. И прописываем на нее ссылку, указав класс class="modal"."
- тут я и оказался в тупике...
То есть ссылку я так понял надо от вызова шаблона отправки сообщения
<xsl:apply-templates select="document('udata://webforms/add/131')/udata" mode="of-callback"/>
каким-то образом обернуть в тег <a></a>, то есть сделать примерно так:
<a href="{document('udata://webforms/add/131')/udata}" id="requestcall" class="modal" title="Заказать обратный звонок">
? - Правда в этом случае осуществляется переход на не существующую страницу...
Ссылка, если в "холостом" виде
<a id="requestcall" class="modal" title="Заказать обратный звонок" href="#inline">Заказать звонок</a>
то успешно, открывает модальное окно, что подтверждает правильное подключение скриптов и стилей.
Так же и из стандартной формы связи на сайте сообщения успешно отправляются и приходят на ящик администратора в виде уведомления - то есть вообще всё на уровне функционала работает.
Что делать с этим, подскажите пожалуйста, как правильно сделать ссылкой форму отправления в модальном окне?
-
Рабочий вариант будет примерно такой если взять за основу ваш код:
<a id="requestcall" class="modal" title="Заказать обратный звонок" href="#inline">Заказать звонок</a>
а дальше перед </body> пишем что-то типа такого:
<div style="display:none;"><div id="inline">
<xsl:apply-templates select="document('udata://webforms/add/131/')/udata" />
</div></div>
Вот только если делать по уму, то и проверку на правильность и заполненность тоже надо переделывать, стандартная не подойдет, вернее не пройдет проверка капчи, т.к. если скажем ввести не правильную капчу, то модальное окно закроется и на странице отобразиться сообщение об ошибке. Поэтому как вариант писать кастом и передавать результат этого метода тоже в модальное окно в какой-нибудь div расположенный перед формой.
-
Рабочий вариант будет примерно такой если взять за основу ваш код:
<a id="requestcall" class="modal" title="Заказать обратный звонок" href="#inline">Заказать звонок</a>
а дальше перед </body> пишем что-то типа такого:
<div style="display:none;"><div id="inline">
<xsl:apply-templates select="document('udata://webforms/add/131/')/udata" />
</div></div>
Вот только если делать по уму, то и проверку на правильность и заполненность тоже надо переделывать, стандартная не подойдет, вернее не пройдет проверка капчи, т.к. если скажем ввести не правильную капчу, то модальное окно закроется и на странице отобразиться сообщение об ошибке. Поэтому как вариант писать кастом и передавать результат этого метода тоже в модальное окно в какой-нибудь div расположенный перед формой.
Спасибо! Разобрался.
А над кастомом конечно ещё придётся повозиться... Ибо без каптчи не обойтись, да без уведомления об успешной отправки сообщения в этом же модальном окне тоже не полноценно выглядит...
В общем это как ешё возможно решить в выводе модального окна в странице <iframe> код </iframe>.
Однако есть ли такие примеры здесь это вопрос, так как я искал, но видимо я первый, кто задался этим вопросом...
-
самый простой и быстрый способ, это сделать iframe вывод страницы с даной формой. Обычно, для этой страницы пишется пустой шаблон, чтобы ничего лишнего при выводе формы в всплывающем окне не было.
Тогда при отправке формы с незаполненой капчей или еще какой-то ошибкой заполнения, сообщение об ошибке выведется на этой же странице (то есть в этом же всплывающем окне), тогда не придется писать кастом для вывода и отправки формы
-
Форму я уже сделал и подключил - она успешно открывается и позволяет пользователю что-то отправить, правда после отправки сообщение об этом отображается уже на отдельной странице со стандартным уведомлением типа "Спасибо за интерес...", то есть в этотм момент окно уже закрылось.
самый простой и быстрый способ, это сделать iframe вывод страницы с даной формой. Обычно, для этой страницы пишется пустой шаблон, чтобы ничего лишнего при выводе формы в всплывающем окне не было.
Вот и я об этом варианте думаю, однако встал тут же вопрос где ж этот самый шаблон для <iframe>форма отправки</iframe> лучше сделать, то есть в какой папке ? Ведь кажется мне, что этот шаблон ещё надо будет подключить к пустой странице странице в структуре сайта -тогда надо его надо в папку layouts (demodizzy) ?
-
можно конечно и отдельную папку, но все куда проще
У вас есть файл с которого начинается обработка всего xml (файл ~/library/common.xsl) в нем есть 2 шаблона. Первый, как раз является тем, что обрабатывает запрос и понимает либо это udata (все запросы через протоколы upage, udata, uobject и т.д.) либо это страница. И если это страница, то система выкидывает нас на шаблон в файле ~/layout/default.xsl в котором и лежит оболочка (со всеми меню, футерами и т.д. что в итоге мы и хотим убрать для вывода формы)
Поэтому в файл ~/library/common.xsl мы добавляем еще одно условие в котором проверяем что нет узла udata и еще какой-то параметр (по началу я делал проверку на id страницы с формой) и если этот параметр сработает то перекидываем не на <xsl:apply-templates select="." mode="lyaout" />, а на <xsl:apply-templates select="." mode="lyaout_empty" />
Потом идем в шаблон ~/layout/default.xsl и там комируем шаблон с mode="layout" и переделываем его в mode="layout_empty" вырезая из него все лишнее
Потом, правда, приходит понимание что такой же пустой шаблон должен использоваться для страницы с результатом формы (сообщение об успешной отправки)
P.S. а еще позже стал в файле ~/library/common.xsl вместо проверки на id страницы с формой и проверкой на макрос вывода сообщения при отправке формы ( /webforms/posted ) делать проверку на наличие параметра в адресной строке (обычно это ?empty=1) и приплюсовывать его при обращении к страницы формы при выводе её во всплывающем окне и при выводе ответа при отправке формы
P.P.S надеюсь, не слишком путано написал