Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

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

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Здравствуйте!
На основе шаблона "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>
то успешно, открывает модальное окно, что подтверждает правильное подключение скриптов и стилей.
Так же и из стандартной формы связи на сайте сообщения успешно отправляются и приходят на ящик администратора в виде уведомления - то есть вообще всё на уровне функционала работает.

Что делать с этим, подскажите пожалуйста, как правильно сделать ссылкой форму отправления в модальном окне?

*

PHOENIX-75

  • *
  • 22
  • +3/-0
    • Просмотр профиля
Рабочий вариант будет примерно такой если взять за основу ваш код:
<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 расположенный перед формой.

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Рабочий вариант будет примерно такой если взять за основу ваш код:
<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>.
Однако есть ли такие примеры здесь это вопрос, так как я искал, но видимо я первый, кто задался этим вопросом...

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
самый простой и быстрый способ, это сделать iframe вывод страницы с даной формой. Обычно, для этой страницы пишется пустой шаблон, чтобы ничего лишнего при выводе формы в всплывающем окне не было.

Тогда при отправке формы с незаполненой капчей или еще какой-то ошибкой заполнения, сообщение об ошибке выведется на этой же странице (то есть в этом же всплывающем окне), тогда не придется писать кастом для вывода и отправки формы

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
Форму я уже сделал и подключил - она успешно открывается и позволяет пользователю что-то отправить, правда после отправки сообщение об этом отображается уже на отдельной странице со стандартным уведомлением типа "Спасибо за интерес...", то есть в этотм момент окно уже закрылось.

самый простой и быстрый способ, это сделать iframe вывод страницы с даной формой. Обычно, для этой страницы пишется пустой шаблон, чтобы ничего лишнего при выводе формы в всплывающем окне не было.

Вот и я об этом варианте думаю, однако встал тут же вопрос где ж этот самый шаблон для <iframe>форма отправки</iframe> лучше сделать, то есть в какой папке ? Ведь кажется мне, что этот шаблон ещё надо будет подключить к пустой странице странице в структуре сайта -тогда надо его надо в папку layouts (demodizzy)  ?  

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
можно конечно и отдельную папку, но все куда проще

У вас есть файл с которого начинается обработка всего 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 надеюсь, не слишком путано написал