
Наконец, он готов к релизу. Рад представить вашему вниманию обновленный модуль обратной связи Wedal Joomla Callback 2.
В нем учтены все пожелания, собранные за время существования Wedal Joomla Callback 1.x.
В нем добавлены новые, очень полезные функции.
Он, как всегда, имеет открытый код и распространяется бесплатно.
Встречайте…
О модуле
Wedal Joomla Callback 2 – модуль для Joomla 4+, который позволяет добавлять на сайт встроенные и всплывающие формы обратной связи в любых количествах.
Модуль работает полностью по AJAX, без перезагрузки страницы при вызове и отправке.
Все другие подробности относительно базовых возможностей модуля, которые были в версии 1.x, вы можете прочитать в статье: Модуль Wedal Joomla Callback – Всплывающая Форма Обратной Связи.
Новые возможности Wedal Joomla Callback 2
Теперь про самое интересное. Что появилось в новой версии модуля.
Поддержка Joomla 4+ и отказ от поддержки Joomla 3
Код модуля переписан практически полностью. Теперь он выполнен по канонам Joomla 4. Версию Joomla 3 модуль, к сожалению, не поддерживает и поддерживать не будет.
Нужно смотреть в будущее и идти вперед. Было принято решение отказаться от сохранения совместимости с Joomla 3 ради чистоты кода.
Joomla 3 будет поддерживать старая версия модуля Wedal Joomla Callback 1.x. Вы можете скачать ее здесь:
Скачать Wedal Joomla Callback 1.x для Joomla 3
Поскольку код модуля полностью переписан, возможны проблемы с обновлением с версии 1.x на версию 2. Если вы используете старую версию модуля на Joomla 4+ и хотите обновить ее, то лучше пойти по пути удаления старого модуля и установки нового.
С неприятной частью закончили) Теперь о хорошем…
Добавлена поддержка неограниченного количества дополнительных полей разных типов, через Joomla XML Fields
Основным нововведением версии 2 является новый функционал модуля, реализующий поддержку дополнительных полей.
Вы можете добавить:
- Поля любых типов
- В любом количестве
- Разные в каждом модуле
Теперь ваш модуль может выглядеть, например, вот так:
Добавление полей происходит с помощью XML-формата полей Joomla. В админке это выглядит примерно вот так:
Пусть вас не пугает XML-формат полей. В документации Joomla есть подробное описание по каждому типу поля. Ссылка на эту документацию доступна прямо на вкладке дополнительных полей в модуле.
Таким образом, в Wedal Joomla Callback вы можете конструировать практически любые формы.
Данные их всех дополнительных полей автоматически будут отправляться вам на почту в заявке.
Добавлена возможность переопределения базовых полей
В продолжение темы полей. Код работы с полями переписан на полную поддержку возможностей Joomla. Отсюда появляется возможность не только добавлять новые поля, но и переопределять обязательные.
В модуле есть несколько обязательных полей, на которые раньше можно было влиять только настройками. Возможности работы с ними были ограничены. Например, без переопределения макетов вы не могли изменить их порядок.
Теперь вы можете переопределить базовые поля. Это делается путем добавления в дополнительные поля новых, с именами базовых. Например, чтобы переопределить поле «Имя», которое имеет название «name», вам нужно добавить в дополнительные поля такую запись:
Таким образом вы можете изменить заголовок поля, его валидацию, а также некоторые другие настройки. Можете вывести его не над, а под другими дополнительными полями.
Добавлена поддержка вложений
Желанная многими функция теперь доступна из коробки. В Wedal Joomla Callback 2 появилась возможность прикреплять вложения в форму, например, файл с реквизитами, фото и др. В админке эта опция включается на главной вкладке:
Вы можете:
- Выбирать между загрузкой одиночного или множественного вложения
- Ограничивать допустимые форматы файлов вложения
- Указывать свое название поля вложения
Все выбранные пользователем файлы будет прикреплены к письму с данными формы, отправленному вам на Email.
Вот так это выглядит на сайте:
Добавлена поддержка целей Яндекс.Метрики
Еще одна желаемая многими функция. Теперь в настройках модуля вы можете указывать цели Я.Метрики на вызов всплывающей формы звонка (клик на кнопку «Заказать звонок») и отправку формы.
Вот как это выглядит:
Подсказка по работе с целями представлена прямо на вкладке.
Внимание: Модуль не добавляет на сайт код Яндекс.Метрики. Убедитесь, что добавили код Яндекс.Метрики на сайт самостоятельно. Счетчики целей не будут работать без базового кода Метрики.
В настройках модуля вам нужно задать только идентификатор цели. Идентификатор счетчика модуль определит самостоятельно.
И, разумеется, вы можете задавать разные цели для каждого экземпляра модуля.
Код кнопки вызова формы максимально упрощен для использования в любом месте страницы
После того, как люди начали активно использовать первую версию модуля обратной связи, выяснилась одна особенность, о которой я не думал – многие хотят использовать модуль в билдерах страниц сайта.
Очень часто я получал вопрос: как встроить кнопку вызова модуля в то или иное место.
Проблема состояла в том, что нельзя было вот так просто создать в билдере кнопку, указать для нее ссылку и чтобы по ней вызывался нужный модуль. Почему? Модуль имел такой код для вызова кнопки:
<div id="WJC102" data-id="102" class="wjcallback "> <a class="wjcallback-link" href="#">Заказать</a> </div>
DIV-обертка была обязательна, т.к. в ней передавался ID модуля, необходимый для получения корректных параметров из настройки именно нужно экземпляра. И во эта DIV-обертка создавала проблемы у пользователей билдеров.
В текущей версии я учел этот момент. Теперь код вызова всплывающего окна выглядит так:
<a data-id="109" class="wjcallback-link" href="#" data-ym-aimid="popuptest">Заказать звонок</a>
Таким образом, вы можете легко вставить кнопку в билдер и вывести в любом месте сайта.
Обязательных параметров всего два:
- data-id – должен содержать ID экземпляра модуля. Без него мы не сможем понять, какой именно модуль нужно вызывать
- class = “wjcallback-link” – класс, который позволяет скрипту понять, что при клике по этой кнопке/ссылке нужно вызывать модуль.
- Дополнительно вы можете вручную указать цель для передачи в Яндекс-метрику, используя атрибут data-ym-aimid
Вот, собственно, и всё. Надеюсь, что эта функция немного упростит и без того непростую жизнь пользователям билдеров.
Добавлены дополнительные возможности оформления модуля
Чтобы поменьше лазить в код и использовать переопределения макетов, в настройки модуля добавлена вкладка «Оформление» где есть возможность задать:
- CSS-классы кнопки заказа звонка
- CSS-классы кнопки отправки формы
- CSS-классы формы
- CSS-классы для обертки каждого поля
- CSS-классы для обертки формы
Зачем это нужно. Предположим, ваш шаблон использует какой-то фреймворк, или же, в нем используются какие-то нестандартные классы для оформления форм. Раньше вам бы пришлось переопределять макет формы в шаблон и править классы в нем. Теперь вы можете задать уникальные классы прямо в настройках.
Не могу сказать, что это всегда будет удобнее. Если у вас много модулей с формами, например, десятки, то может быть проще, как и прежде, внести один раз правки в макет и не добавлять дополнительные классы в настройках каждого модуля. Если же у вас 1-2 модуля, то может быть проще сделать это через настройки.
Вот как это выглядит в админке:
Также хочу отметить вот что. В зависимости от используемого шаблона форма может выглядеть теперь по-разному. Если шаблон переопределяет или оформляет базовые формы Joomla, то наш модуль унаследует это оформление и автоматически примет стиль других форм сайта.
jQuery больше не требуется
JS-скрипты модуля полностью переписаны на чистый Javascript. Теперь подключение jQuery не требуется. Модуль больше не подключает эту библиотеку.
Добавлены JS-триггеры для разных событий модуля
В JS-код модуля добавлены триггеры (нестандартные события), которые позволяют вам добавить свои кусочки кода в то или иное место. Это аналогично плагинам в Joomla, но только работает именно для JS-кода модуля.
На данный момент доступны следующие события:
- wjcOnFormPopupAfterLoad – срабатывает сразу после появления всплывающей формы. Содержит объект загруженной формы. Может быть использовано для определения того, какая форма вызвана, какие содержит поля и т.п.
- wjcOnFormBeforeClose – срабатывает перед закрытием всплывающего окна форма. Содержит объект загруженной формы. Может быть полезно для удержания посетителя путем добавления подтверждения закрытия всплывающего окна (пример кода будет ниже)
- wjcOnFormBeforeSubmit – срабатывает перед оправкой формы. Содержит объект загруженной формы и заполненных полей. Может использоваться для дополнительной валидации формы и т.п.
- wjcOnFormAfterSubmit – срабатывает сразу после отправки формы. Содержит объект отправленной формы и заполненных полей. Может использоваться для интеграции с CRM и другими сторонними сервисами.
Ниже примеры использования JS-событий модуля в вашем JS-коде:
document.addEventListener('DOMContentLoaded', () => { //Получить все поля формы после загрузки document.addEventListener('wjcOnFormPopupAfterLoad', (form) => { console.log(form.detail.querySelectorAll('input')); }); //Получить информацию о форме после ее закрытия и вывести дополнительный диалог о закрытии формы document.addEventListener('wjcOnFormBeforeClose', (form) => { console.log(form.detail); if (!confirm("Вы уверены, что хотите закрыть форму?")) { event.preventDefault(); } }); //Получить данные полей формы перед отправкой document.addEventListener('wjcOnFormBeforeSubmit', (form) => { let formdata = new FormData(form.detail.closest('form')); console.log(formdata); }); //Получить данные полей формы после отправки и возврата успешного ответа document.addEventListener('wjcOnFormAfterSubmit', (form) => { let formdata = new FormData(form.detail.closest('form')); console.log(formdata); }); });
Обратите внимание, что ваш код должен быть подключен после подключения файла скриптов модулей!
Возможность указать несколько получателей письма
Еще одна небольшая функция, которой не хватало. Теперь в настройках модуля вы можете указать нескольких получателей писем с данными отправленной формы – просто укажите их в поле «Дополнительные получатели»:
Все поля теперь используют базовые макеты Joomla, наследуют стили шаблона, могут быть переопределены в шаблон
Поскольку в модуле появились дополнительные поля, хорошо бы иметь возможность переопределения их разметки в шаблон. Такая возможность есть!
Все поля модуля используют макеты полей Joomla из папки:
/layouts/joomla/form
Эти макеты могут быть переопределены в ваш шаблон. Но учтите, что обычно все формы на сайте используют их. Таким образом, изменения в этих макетах повлияет не только на формы модуля, но и на другие стандартные формы сайта (например, форма авторизации, регистрации и т.д). Хотя это скорее плюс.
Файлы стилей и скриптов модуля теперь доступны для переопределения
Файлы скриптов и стилей модуля теперь располагаются в папке media, и, соответственно, могут быть переопределены в используемый вами шаблон.
Если вам не хватает чего-то в оформлении или JS-кода, то теперь вы легко можете переопределить файлы и подправить это под себя.
Но что касается JS-кода, то гораздо предпочтительнее будет использовать JS-триггеры, поскольку в обновлениях модуля в файл JS могут быть внесены изменения, которые вы не увидите, в случае когда переопределили JS-файл в шаблон.
Мелкие доработки и исправления
Помимо основных нововведений, описанных выше, в модуле было сделано много других, мелких, доработок и исправлений. Особого смысла их описывать нет. Но, быть может, те, кто использует модуль еще первой ветки, почувствуют их.
Практически все замечания, которые вы присылали, были учтены и исправлены в новой версии. Так что надеюсь, что обратная связь была полезной для нас всех.
Я всегда рад конструктивной критике: предложениям и замечаниям по работе модуля. Присылайте их мне на почту, пишите в комментариях. Тем самым вы поможете сделать модуль еще лучше.
Где скачать модуль Wedal Joomla Callback 2?
Новая версия модуля доступна в том же репозитории на Github. Только теперь она будет занимать ветку master. Старая же версия модуля 1.x переместится в ветку Joomla3.
В разделе релизов вы сможете найти версии для обеих веток:
- версии 1.х – для Joomla 3
- версии 2.х – для Joomla 4+
Для понимания:
- версии Wedal Joomla Callback 1.х будут работать и на Joomla 3 и на Joomla 4, но на 4 предпочтительнее использовать новый модуль
- версии Wedal Joomla Callback 2.х будут работать только на Joomla 4+
Ниже даю ссылки на скачивание последний версий обеих веток:
Скачать Wedal Joomla Callback 2 для Joomla 4+
Скачать Wedal Joomla Callback 1.x для Joomla 3
Комментарии
1. Встроенная форма не работает. Копка Отправка срабатывает, никаких сообщений об удачной отправки не появляется. письмо на почту не приходит.
2. На Всплывающая форма глючит маска телефона.
Прежняя версия 1.2 работает прекрасно.
Виталий, пожалуйста исправляй.
Проверил по пунктам:
1) Да, нашел баг, при котором форма не отправлялась при активной опции вложений с единственным файлом. Выпустил версию 2.0.1 с исправлением. Обновитесь до нее, или просто разрешите в настройках модуля множественные вложения.
2) В новой версии модуля скрипт маски используется другой. Старый скрипт использовал jQuery, а потому пришлось от него отказаться. Что именно не работает в маске? У меня все работает хорошо. Единственное отличие - в настройках модуля нужно задавать маску для телефона немного в другом формате. К примеру, вот так для российских номеров: +7 (###) ###-##-##
Установил новую версию модуля 2.0.1 на новую чистую Joomla-4.2.6.
Встроенная форма не работает:
1. Маска "телефон" не показывается.
2. Письмо отправляется, но на почту не приходит. Всплывающего собщения об отправке тоже нет.
Посмотрел код страницы - во встроенной форме не загружаются скрипты wjcallback.css, wjcallback.js, maska.js
Теперь о проблеме:
В версии 2.0.1 не загружались скрипты и стили во встроенную форму (вы спросите: как такое можно было пропустить? А вот оказывается можно. Для тестов у меня всегда опубликовано 2 экземпляра модуля: встроенный и всплывающий. Скрипты работали и для встроенного, т.к. их цеплял всплывающий). Это исправлено в версии 2.0.2. Обновитесь, пожалуйста. Проверьте, работает ли форма теперь. Маска также зависит от скриптов, а потому должна теперь тоже работать.
Спасибо за репорт, пусть и в форме негодования). Если обнаружите еще что-то - пишите. Вместе мы сделаем модуль только лучше.
По описанию похоже, что у вас возникает какая-то ошибка JS, которая блокирует форму. Если есть возможность посмотреть в живую, пришлите мне ссылку на страницу с формой ответом на этот комментарий или в мессенджер. Посмотрю и разберемся, в чем проблема.
_https://dropmefiles.com/vRheD
Обновите модуль до версии 2.0.3. Проверьте повторно (также в новом приватном окне или с очисткой кэша браузера).
Большая благодарность за репорт! Это был серьезный баг, который я, к сожалению, не увидел, т.к. тестировал модуль с привязкой ко всем страницам. Теперь он исправлен.
Подскажите, каким образом подключается всплывающая форма с собственной кнопкой?
Тег ссылки с параметром data-id и классом "wjcallback-link" разместил нужном месте модуля (переопределение стандартного mod_categoty). Если модуль WJC опубликован без указания позиции, то кнопка не работает. Если публикую его в любой доступной позиции, то работает, но при этом отображается и собственная кнопка.
Если добавляю кастомный шаблон для WJC (в переопределениях делаю копию файлов default и default_popupform c именами custom и custom_popupform), удалив при этом в файле custom код вывода кнопки и выбираю для модуля этот шаблон (custom), то тоже не работает.
Решил проблему удалением кода кнопки в файле default и назначением для модуля макета "по умолчанию", но что-то мне подсказывает что это не правильно))
И ещё. Почему-то не работает параметр "показывать блок согласия с допусловиями". При включении, в форме не отображается.
1) Насчет ручного размещения кнопки.
Чтобы это работало, модуль должен быть размещен в одной из существующих позиций сайта и опубликован. Без этого не подгрузится скрипт, который будет обрабатывать вашу кнопку.
Далее - да, была проблема, что нельзя было отключить базовую кнопку в модуле. Это было неудобно. Исправил это в версии 2.0.3. Теперь есть возможность отключать базовое отображение кнопки для вызова всплывающего окна через опцию: Скрывать кнопку вызова формы?. После обновления вы найдете ее в главном окне настроек.
В остальном - вставленная вручную кнопка должна работать. Проверил на тестовом сайте - у меня работает прекрасно.
2) Насчет блока согласия с доп. условиями.
Это был баг. Блок показывался только при наличии дополнительных полей. Он исправлен в версии 2.0.3. Благодарю за информацию о проблеме!
Что касается ЧПУ - ссылка будет формироваться в таком виде, когда выбранная статья привязана к пункту меню. Т.е. создаете статью на условия, привязываете к пункту меню, после выбираете в модуле. Ссылка будет SEF.
1. В настройках есть пункт "Показывать маску ввода номера", но по факту она ведь не показывается, просто когда начинаешь вводить номер, тогда только не удастся ввести больше цифр. По факту пользователь не видит, а что если он решит вводить телефон отличный от мобильного - 111-11?
2. Если вообще отключить маску вводу, то проверки вообще не происходит, можно вводить любой текст и отправлять, отсутствует проверка на ввод цифр, хорошо бы ввести, хотя бы и с регулярными выражениями, например разрешено ()-1-9+, максимально - столько-то символов. Ведь, если включено поле ввода E-mail, то проверка на ввод @ есть, поле проверяется на корректность ввода.
3. Вопрос капчи, скорее всего об этом думали....не будут ли спамщики использовать эту форму...?
1) Вопрос с маской неоднозначен. Не так просто подобрать хороший скрипт маски, особенно после отказа от jQuery. Маски на чистом JS довольно большие и часто включают много лишнего. Я перебрал много скриптов и в итоге остановился на том, который вы видите сейчас. У него небольшой размер и функционал, схожий с jQuery masked input, который был в старой версии. Использование именно этой маски в модуле - не догма. Вы можете отключить ее в настройках и подключить любую другую. Или же можно вообще переопределить файл маски в шаблон и заменить его содержимое.
2) У поля телефона тип tel. В спецификации HTML5 для этого типа поля есть атрибут pattern, в котором вы можете задать регулярное выражение. Я не стал добавлять его умышленно, дабы обеспечить бОльшую гибкость, но вы всегда можете переопределить поле телефона через дополнительные поля и добавить pattern с той регуляркой, которая требуется.
3) Капча не нужна. По опыту прошлой версии модуля - спам не проходит. Форма отправляется средствами AJAX, проверяет токен сессии. Большинству ботов она не по зубам и без капчи, по крайней мере на сегодня.
2. Тоже самое, замечательно было бы в настройках вывести поле "pattern" для задания разрешенных символов и их количества.
Может конечно это неудобно и нет желания заморачиваться, но сейчас рассуждаю как пользователь. Понятно, что можно там переопределить, дописать, допилить. Но хочется, чтобы Ваш продукт был максимально удобным. Спасибо.
1) Согласен. Добавил в список доработок.
2) Это вряд ли имеет смысл, т.к. маска как раз и выполняет задачи pattern. Но, как верно указали в комментариях ниже, паттерн маски должен взаимодействовать с валидатором J, чтобы не было ситуаций, когда телефон по маске не заполнен полностью, а валидация поля проходит и форма отправляется.
Ещё наблюдение/пожелание. Мне кажется было бы полезно добавить возможность указания регулярных выражений для полей (хотя бы для базовых Имя и Комментарий ). Атрибут pattern в дополнительных полях видимо не обрабатывается, по крайней мере у меня не получилось его использовать.
Версия последняя. Ж4.
Валидация поля телефона, которое заполнено не полностью, проходит, т.к. валидация используется стандартная от Joomla, а той достаточно, чтобы просто были введены данные. Здесь нужно будет довести до ума взаимодействие маски с валидацией J. Я добавил эту задачу в план доработок. Это может быть не так быстро, но со временем сделаю. А пока вы можете добавить такую проверку, используя JS-триггер wjcOnFormBeforeSubmit.
Вот все что нужно есть в нем, кроме вот этой кнопочки)
Может сделаете?
-
Как это исправить?
Форма замечательная, намного лучше и удобнее остальных.
Но столкнулся с двумя моментами, которые у меня пока не получается решить:
1. Добавил в дополнительные поля загрузку еще одного файла по инструкции:
Код:
<field name="myfilevalue" type="file" label="Enter some text" description="Choose an image with maximum 100KB" size="10" accept="image/*" />
поле нормально выводится в форме, но файл на почту не приходит... нужно что-то ещё дописать в php?
2. Если загружать файлы с названием на кирилице, то они не приходят на почту.
Можете дать советы? )
1. Дополнительное поле файла пока, к сожалению, работать не будет, поскольку для прикрепления его к письму нужно дополнительно обрабатывать его кодом. Я думаю, стоит добавить в коде проверку на то, что в дополнительных полях есть поля типа "файл" и обрабатывать их как вложения. Добавлю в список правок.
2. Проверю.
Спасибо за ваши замечания. Они ценные и дали новую информацию. Постараюсь учесть их в ближайшем обновлении.
По поводу пункта 2 кажется разобрались: файл не отправляется если в конце его имени стоит точка (типа файл..pdf получается) - вероятно джумла считает это уже каким-то другим расширением (попробовал добавить в список расширений image/*, .pdf, .doc, .docx, .xls, .xlsx, ..pdf - не сработало).
Также не очень нравится мультизагрузка файлов: хочется что бы можно было добавлять файлы по одному из разных папок, удалять и т.п.
Может быть есть возможность как-то прикрутить его к Вашей форме через код php?
Насчет мультизагрузки файлов - это уже вопрос фронтенда. Вы можете добавить JS-плагин, который будет скрывать стандартную форму выбора файла, заменяя ее какой-то расширенной. По факту для модуля ничего не изменится, т.к. файлы будут крепится все также к стандартному полю, просто оно будет скрыто. Добавить такой плагин можно без хаков. Может быть имеет смысл включить его в модуль по умолчанию в будущем, но пока так.
А можно пример подобного js-плагина? - я что-то второй день ничего не могу найти.
Извините что снова пишу не дождавшись ответа (но поэтому и пишу, что бы лишний раз не беспокоить) :))
вроде как нашел вариант сам - "https://snipp.ru/html-css/input-file-style#link-input-file-so-spiskom-vybrannyh-faylov "
Не сообразил как поправить поле формирования инпута файлов WedalJoomlaCallbackHelper.php (с джумлой не сильно дружу), поэтому просто вставил div вывода списка загруженных файлов в default_popupform.php и немного перековеркал оригинальный код js:
Код:
<script>
var dt = new DataTransfer();
$('.fileupload input[type=file]').on('change', function(){
let $files_list = document.getElementById('input-file-list');
//let $files_list = $(this).closest('.input-file').next();
//$files_list.empty();
$files_list.innerHTML = '';
for(var i = 0; i < this.files.length; i++){ //alert(i);
/*let new_file_input = '<div class="input-file-list-item">' +
'<span class="input-file-list-name">' + this.files.item(i).name + '</span>' +
'<a href="#" onclick="removeFilesItem(this); return false;" class="input-file-list-remove">x</a>' +
'</div>';*/
let new_file_input = document.createElement('div');
new_file_input.className = 'input-file-list-item';
//$(DivLinkStr).append("<b>Hello</b>");
new_file_input.innerHTML = '<span class="input-file-list-name">' + this.files.item(i).name + '</span>' +
'<a href="#" onclick="removeFilesItem(this); return false;" class="input-file-list-remove">x</a>';
$files_list.append(new_file_input); //alert($files_list);
dt.items.add(this.files.item(i));
};
this.files = dt.files; //alert(this.files);
});
function removeFilesItem(target){
//let name = $(target).prev().text();
let name = $(target).prev().text(); //alert(name);
let input = document.getElementById('fileupload');
$(target).closest('.input-file-list-item').remove();
for(let i = 0; i < dt.items.length; i++){
if(name === dt.items.getAsFile().name){
dt.items.remove(i); alert('надо удалить');
}
}
input.files = dt.files;
}
</script>
вроде как даже всё работает... но буду проверять конечно ещё завтра )) Спасибо
Первое:
Нельзя трогать файл хелпера - будет хак и изменения при обновлении модуля затрутся.
Второе:
Чтобы изменить базовый макет поля выбора файла нужно переопределить подмакет типа файла в шаблон и изменить под себя. Это повлияет на все поля выбора файла на сайте. В макета вывода формы, в самом верху, я специально оставил полезные ссылки и путь макетов полей:
Код:
/* Информация о том, как работать с полями в макете:
- https://api.joomla.org/cms-3/classes/Joomla.CMS.Form.Form.html
- https://docs.joomla.org/Basic_form_guide
- https://docs.joomla.org/Advanced_form_guide
Макеты разметки полей находятся в каталоге: /layouts/joomla/form и могут быть переопределены в ваш шаблон */
Третье:
JS-код в данном случае лучше подключать, используя триггер wjcOnFormPopupAfterLoad (пример есть в этой статье). Это для всплывающей формы. Для встроенной можно просто добавить код в шаблон с вызовом на загрузку страницы.
А в остальном всё верно.
Но, как сделать доп поле обязательным?
По этой ссылке находятся два модуля для Ж3. Авторами больше не поддерживаются. Посмотрите как там реализовано добавление полей. Поля может добавлять даже пользователь ничего не знающий о программировании.
Смотрите:
1) Список типов дополнительных полей там сильно ограничен. Используя же подход XML-fields из Joomla, мы получаем огромный набор типов полей - любые типы, которые поддерживает Joomla.
2) В тех модулях для рендеринга каждого поля написан свой велосипед. В Wedal Joomla Callback 2 все поля рендерятся через Joomla. В коде модуля теперь вообще нет input'ов.
3) Все стили полей наследуются от используемого шаблона. Если в шаблоне поля оформлены, вам не нужно оформлять их дополнительно. В тех модулях этого нет.
В общем, несмотря на то, что Wedal Joomla Callback добавлять поля чуть сложнее (нужно все-таки перейти по ссылке в модуле и посмотреть примеры их добавления в документации Joomla), вы получаете гораздо большую гибкость в работе с ними. Советую один раз разобраться и в дальнейшем, думаю, возвращаться к способу с повторяемыми формами уже не захочется.
Отображается содержимое первого созданного модуля. Если создать второй, который бы отображался в другой языковой версии - ничего не происходит. Отображаются первые поля, хотя это совершенно другой модуль уже и поля другие (и name тоже) Да и модуль без полей. а отображается с полями первого. А так же текст заполняемый в модуле (кроме текста заголовка)
Почему так?
Но также может быть просто неправильная настройка модуля или понимание того, как работает мультиязычность.
Смотрите:
При смене языка модуль должен заменяться полностью. Т.е. если у вас 2 языка, то вы создаете 2 экземпляра модуля для одной формы. Каждый экземпляр привязывается к определенному языку и только в нем будет показываться. Это должно работать. С дополнительными полями, скорее всего, получится работать только так, т.к. их названия не содержат языковых констант, а вписываются вами вручную. С другой стороны, возможно, языковые константы в доп.полях также будут работать, а создать значения для них можно в менеджере переопределения констант. Но это я не тестировал. Нужно будет проверить.
Что же касается отображения одного экземпляра модуля для всех языков, с автоматической сменой названий под выбранный язык - это тоже должно работать в теории, а на практике, пока не тестировалось (да и языков в модуле пока всего два: русский и английский).
В любом случае, спасибо за информацию! Обязательно проверю и внесу правки, если потребуется.
Я совсем забыл, что ссылка в кнопке на анкету содержит ID модуля (этой анкеты) И создавая новый модуль для другого языка, я просто копировал предыдущий (с тем же ID)
Так что все работает и доп поля в мультиязычной версии.
Спасибо за обратную связь
1. Не могу понять, из каких соображений "Вступительный текст в форме" - только plain, без html? Ну, там, выделить что-то болдом, или какой-то джаваскрипт добавить...
2. Письмо сразу в спам приходит. Вообще-то, это не проблема, так как оно приходит на один и тот же адрес и можно фильтры настроить.
X-Spam-Flag: YES
X-Spam-Score: 5.322
X-Spam-Level: *****
X-Spam-Status: Yes, score=5.322 tagged_above=1 required=4.5
tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
FREEMAIL_FORGED_REPLYTO=2.503, FROM_EXCESS_BASE64=0.105,
HTML_MESSAGE=0.001, HTML_MIME_NO_HTML_TAG=0.635, MIME_HTML_ONLY=1.105,
SPF_SOFTFAIL=0.972, URIBL_BLOCKED=0.001]
Тут больше всего заняло FREEMAIL_FORGED_REPLYTO=2.503 потому что в Reply-To подставляется адрес того, кто отправил форму. А в поле From - другой адрес. Можно попробовать (и попробую) подставляьб в ReplyTo не только адрес, а имя-адрес, типа Reply-To: Chuck Norris .
но, ещё раз - ОРГОМНОЕ СПАСИБО!
По пунктам:
1) Да, вы правы. Не помню уже причину почему так было сделано. Но сейчас не вижу причины это так оставлять. Внес правку, разрешившую безопасный html в этом поле. Она появится в ближайшем обновлении. Если очень нужно, можете скачать собранную версию из ветки dev на Github. Там эта правка уже внесена.
2) Здесь, наверное, история не из-за модуля, а из-за настроек отправки почты в Joomla или на сервере. В поле ReplyTo целенаправленно подставляется адрес из поля email, заполняемого в форме, поскольку это позволяет быстро и правильно отвечать на полученное письмо. Если его туда не добавлять или добавлять свой, то при ответе на письмо придется копировать адрес и вставлять в поле получателя вручную.
Насчет подстановки имя-адрес - интересно. Дайте знать, что получится. Может быть это имеет смысл...
Помоги, пожалуйста. Установил новую версию, пишет мне постоянно
Uncaught (in promise) SyntaxError: Unexpected token '
Вопрос как можно по прописать по отдельности вывод полей, чтобы возможно было менять их расположение в макете?
Можно пример вывода одного поля в макете, так как там идет вывод в цикле
Код:
<?php //Базовые поля и их переопределения ?>
<?php foreach ($form->form->getFieldset('fields') as $field) { ?>
<?php echo $field->renderField(array('class' => $field->id . ' ' . $form->params->get('fieldwrapper_suffix'))); ?>
<?php } ?>
Код:
<?php echo $form->renderField('time'); ?>