Рад представить вашему вниманию обновленный модуль обратной связи Wedal Joomla Callback 2. Он имеет открытый код и распространяется бесплатно.
Wedal Joomla Callback 2 – обновленная версия модуля обратной связи для Joomla 4+

Наконец, он готов к релизу. Рад представить вашему вниманию обновленный модуль обратной связи 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

Об авторе
Об авторе
Wedal (Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.

Добавить комментарий

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Комментарии  

0 # Юрий 26.12.2022 12:51
Спасибо за новую версию. Красивая, кастомизируемая, особенно понравилось прикрепеление файлов, это вообще супер функция :) но есть нюансы.
1. Встроенная форма не работает. Копка Отправка срабатывает, никаких сообщений об удачной отправки не появляется. письмо на почту не приходит.
2. На Всплывающая форма глючит маска телефона.
Прежняя версия 1.2 работает прекрасно.
Виталий, пожалуйста исправляй.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 27.12.2022 09:40
Юрий, спасибо за обратную связь!

Проверил по пунктам:

1) Да, нашел баг, при котором форма не отправлялась при активной опции вложений с единственным файлом. Выпустил версию 2.0.1 с исправлением. Обновитесь до нее, или просто разрешите в настройках модуля множественные вложения.

2) В новой версии модуля скрипт маски используется другой. Старый скрипт использовал jQuery, а потому пришлось от него отказаться. Что именно не работает в маске? У меня все работает хорошо. Единственное отличие - в настройках модуля нужно задавать маску для телефона немного в другом формате. К примеру, вот так для российских номеров: +7 (###) ###-##-##
Ответить | Ответить с цитатой | Цитировать
0 # Юрий 27.12.2022 11:29
К сожалению, не работает.
Установил новую версию модуля 2.0.1 на новую чистую Joomla-4.2.6.
Встроенная форма не работает:
1. Маска "телефон" не показывается.
2. Письмо отправляется, но на почту не приходит. Всплывающего собщения об отправке тоже нет.
Посмотрел код страницы - во встроенной форме не загружаются скрипты wjcallback.css, wjcallback.js, maska.js
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 28.12.2022 12:02
Юрий, да, обнаружен баг, из-за которого скрипты и стили не загружались при отображении на странице только встроенной формы. Исправлен в версии 2.0.2. Спасибо за репорт!
Ответить | Ответить с цитатой | Цитировать
0 # Юрий 30.12.2022 21:19
Обе формы работают. Загружается, отправляется. Спасибо, Виталий, респект! :)
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 29.12.2022 07:00
При отправке формы(встроенная или всплывающая) никакого сообщения об отправке формы не появляется. При всплывающем варианте маска телефона срабатывает, при встроенном варианте нет, вводи сколько хочешь цифр. Всплывающая данные отправляет, встроенная нет. не понимаю как можно было такой продукт, не протестировав выпускать в паблик?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 29.12.2022 08:19
kosh2323, к сожалению, чем сложнее расширение, тем сложнее тестировать его в одиночку. Понимаю негодование. До выпуска в паблик я проверял все настройки и варианты. Но, получается, не все. Проверить все невозможно сразу, к сожалению и первые версии крупных обновлений могут содержать ошибки и проблемы, о которых я узнаю и исправляю как раз благодаря таким комментариям, как ваш.

Теперь о проблеме:
В версии 2.0.1 не загружались скрипты и стили во встроенную форму (вы спросите: как такое можно было пропустить? А вот оказывается можно. Для тестов у меня всегда опубликовано 2 экземпляра модуля: встроенный и всплывающий. Скрипты работали и для встроенного, т.к. их цеплял всплывающий). Это исправлено в версии 2.0.2. Обновитесь, пожалуйста. Проверьте, работает ли форма теперь. Маска также зависит от скриптов, а потому должна теперь тоже работать.

Спасибо за репорт, пусть и в форме негодования). Если обнаружите еще что-то - пишите. Вместе мы сделаем модуль только лучше.
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 29.12.2022 14:04
Прошу простить, если вызвал раздражение, переустановил новую версию(скачал на зеленой кнопке, хотя в самом модуле, в админке нет информации, какая эта версия). По-прежнему всплывающий вариант - модальное окно не закрывается, так и висит, сообщений, что форма отправлена тоже нет, с встроенным вариантом тоже самое, сами данные формы отправляются в обоих вариантах. Потестирую, если надо, пишите прям на почту, без проблем.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 04.01.2023 09:48
kosh2323, ничего страшного. Все нормально. Вы точно обновились до версии 2.0.2? Посмотреть версию можно в разделе: Расширения -> Управление.
По описанию похоже, что у вас возникает какая-то ошибка JS, которая блокирует форму. Если есть возможность посмотреть в живую, пришлите мне ссылку на страницу с формой ответом на этот комментарий или в мессенджер. Посмотрю и разберемся, в чем проблема.
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 08.01.2023 07:21
Приветствую, спасибо за ответ и желание разобраться, ссылку прислать не могу, делаю на локальном, перекачал, переустановил, версия 2.0.2 точно, и ничего не изменилось, проблемы те же, версия Joomla 4.2.6, Шаблон умолчальный Кассиопея, OpenServer PHP 8.1. После загрузки скриптов модуля грузятся только ещё 2, см. скрин.
_https://dropmefiles.com/vRheD
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 08.01.2023 12:19
kosh2323, нашел и исправил ошибку, которая, вероятно, была у вас. В запрос на отправку формы не передавался Itemid страницы, таким образом, в случае, когда модуль был привязан не ко всем страницам, а только к некоторым пунктам меню, возвращалась ошибка.

Обновите модуль до версии 2.0.3. Проверьте повторно (также в новом приватном окне или с очисткой кэша браузера).

Большая благодарность за репорт! Это был серьезный баг, который я, к сожалению, не увидел, т.к. тестировал модуль с привязкой ко всем страницам. Теперь он исправлен.
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 06.01.2023 06:54
Виталий, спасибо вам за ваши разработки! Модуль супер!
Подскажите, каким образом подключается всплывающая форма с собственной кнопкой?
Тег ссылки с параметром data-id и классом "wjcallback-link" разместил нужном месте модуля (переопределение стандартного mod_categoty). Если модуль WJC опубликован без указания позиции, то кнопка не работает. Если публикую его в любой доступной позиции, то работает, но при этом отображается и собственная кнопка.
Если добавляю кастомный шаблон для WJC (в переопределениях делаю копию файлов default и default_popupform c именами custom и custom_popupform), удалив при этом в файле custom код вывода кнопки и выбираю для модуля этот шаблон (custom), то тоже не работает.
Решил проблему удалением кода кнопки в файле default и назначением для модуля макета "по умолчанию", но что-то мне подсказывает что это не правильно))
И ещё. Почему-то не работает параметр "показывать блок согласия с допусловиями". При включении, в форме не отображается.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 08.01.2023 12:24
Сергей,

1) Насчет ручного размещения кнопки.

Чтобы это работало, модуль должен быть размещен в одной из существующих позиций сайта и опубликован. Без этого не подгрузится скрипт, который будет обрабатывать вашу кнопку.

Далее - да, была проблема, что нельзя было отключить базовую кнопку в модуле. Это было неудобно. Исправил это в версии 2.0.3. Теперь есть возможность отключать базовое отображение кнопки для вызова всплывающего окна через опцию: Скрывать кнопку вызова формы?. После обновления вы найдете ее в главном окне настроек.

В остальном - вставленная вручную кнопка должна работать. Проверил на тестовом сайте - у меня работает прекрасно.

2) Насчет блока согласия с доп. условиями.
Это был баг. Блок показывался только при наличии дополнительных полей. Он исправлен в версии 2.0.3. Благодарю за информацию о проблеме!
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 08.01.2023 12:45
Обновился до версии 2.0.3 после отправки формы, модальное окно выводится, по нажатии закрывается, но блок согласия, если указывать какой-то материал, то выводится совсем не тот, указываю разные материалы, выводится один и тот же и совсем не тот. Ссылка формируется вот такая /index.php?view=article&id=3:kontakty&catid=8 учитывается ли то, что если ссылка будет в формате ЧПУ? Таких ссылок нет на сайте, а все в виде test.ru/kontakty.html
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 09.01.2023 06:31
kosh2323, проверил. Ссылка формировалась некорректно. Исправлено в версии 2.0.4, обновитесь. Еще раз спасибо за информацию!

Что касается ЧПУ - ссылка будет формироваться в таком виде, когда выбранная статья привязана к пункту меню. Т.е. создаете статью на условия, привязываете к пункту меню, после выбираете в модуле. Ссылка будет SEF.
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 09.01.2023 10:00
Да, теперь работает, супер, и всё же есть пожелания:

1. В настройках есть пункт "Показывать маску ввода номера", но по факту она ведь не показывается, просто когда начинаешь вводить номер, тогда только не удастся ввести больше цифр. По факту пользователь не видит, а что если он решит вводить телефон отличный от мобильного - 111-11?
2. Если вообще отключить маску вводу, то проверки вообще не происходит, можно вводить любой текст и отправлять, отсутствует проверка на ввод цифр, хорошо бы ввести, хотя бы и с регулярными выражениями, например разрешено ()-1-9+, максимально - столько-то символов. Ведь, если включено поле ввода E-mail, то проверка на ввод @ есть, поле проверяется на корректность ввода.
3. Вопрос капчи, скорее всего об этом думали....не будут ли спамщики использовать эту форму...?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 10.01.2023 06:39
kosh2323, по пунктам:

1) Вопрос с маской неоднозначен. Не так просто подобрать хороший скрипт маски, особенно после отказа от jQuery. Маски на чистом JS довольно большие и часто включают много лишнего. Я перебрал много скриптов и в итоге остановился на том, который вы видите сейчас. У него небольшой размер и функционал, схожий с jQuery masked input, который был в старой версии. Использование именно этой маски в модуле - не догма. Вы можете отключить ее в настройках и подключить любую другую. Или же можно вообще переопределить файл маски в шаблон и заменить его содержимое.

2) У поля телефона тип tel. В спецификации HTML5 для этого типа поля есть атрибут pattern, в котором вы можете задать регулярное выражение. Я не стал добавлять его умышленно, дабы обеспечить бОльшую гибкость, но вы всегда можете переопределить поле телефона через дополнительные поля и добавить pattern с той регуляркой, которая требуется.

3) Капча не нужна. По опыту прошлой версии модуля - спам не проходит. Форма отправляется средствами AJAX, проверяет токен сессии. Большинству ботов она не по зубам и без капчи, по крайней мере на сегодня.
Ответить | Ответить с цитатой | Цитировать
0 # kosh2323 10.01.2023 07:09
1. Хорошо бы вывести маску в плейсхолдер, чтобы пользователь видел в каком формате он должен вводить, в настройках то можно вывести пустое поле для ввода плейсхолдера, данные из него использовать для проверки, так ведь можно?

2. Тоже самое, замечательно было бы в настройках вывести поле "pattern" для задания разрешенных символов и их количества.

Может конечно это неудобно и нет желания заморачиваться, но сейчас рассуждаю как пользователь. Понятно, что можно там переопределить, дописать, допилить. Но хочется, чтобы Ваш продукт был максимально удобным. Спасибо.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 11.01.2023 07:15
kosh2323,

1) Согласен. Добавил в список доработок.

2) Это вряд ли имеет смысл, т.к. маска как раз и выполняет задачи pattern. Но, как верно указали в комментариях ниже, паттерн маски должен взаимодействовать с валидатором J, чтобы не было ситуаций, когда телефон по маске не заполнен полностью, а валидация поля проходит и форма отправляется.
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 08.01.2023 16:26
Большое спасибо! Обновил.
Ещё наблюдение/пожелание. Мне кажется было бы полезно добавить возможность указания регулярных выражений для полей (хотя бы для базовых Имя и Комментарий ). Атрибут pattern в дополнительных полях видимо не обрабатывается, по крайней мере у меня не получилось его использовать.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 09.01.2023 06:36
Сергей, для собственной обработки полей вы можете использовать JS-триггеры, добавленные в новой версии модуля. Для данной задачи подойдет wjcOnFormBeforeSubmit. Он позволяет отменять отправку формы, если возвращает false (пример использования есть в этой статье). Но это всё на стороне клиента. На стороне сервера, по идее, должны отрабатывать фильтры полей Joomla. Если нет, то можно попробовать сделать плагин, т.к. для валидации полей на стороне сервера средствами Joomla наверняка должны быть системные триггеры.
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 09.01.2023 19:25
Маска телефона не выводится и не работает.
Версия последняя. Ж4.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 10.01.2023 06:41
Сергей, на тестовом сайте сейчас проверил, на базовом шаблоне Cassiopea - все работает. Возможно у вас какой-то конфликт скриптов, или же в настройках модуля просто не включили маску. Если есть живой сайт - присылайте ссылку в ответном комментарии - я посмотрю.
Ответить | Ответить с цитатой | Цитировать
0 # Сергей 10.01.2023 15:08
Чистая 4.2.6 на локалке + модуль. В поле тел до ввода не выводится код страны из маски. Он появляется только при вводе первой цыфры. Это неправильно. В маске вида +11 1## ### ## ## форма отправляется даже если ввести не все цыфры.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 11.01.2023 07:11
Сергей, спасибо за ценные замечания. Всё по делу.

Валидация поля телефона, которое заполнено не полностью, проходит, т.к. валидация используется стандартная от Joomla, а той достаточно, чтобы просто были введены данные. Здесь нужно будет довести до ума взаимодействие маски с валидацией J. Я добавил эту задачу в план доработок. Это может быть не так быстро, но со временем сделаю. А пока вы можете добавить такую проверку, используя JS-триггер wjcOnFormBeforeSubmit.
Ответить | Ответить с цитатой | Цитировать
0 # Ветал 10.01.2023 22:47
Какой отличный модуль и как не хватает современной анимированной кнопки.
Вот все что нужно есть в нем, кроме вот этой кнопочки)
Может сделаете?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 11.01.2023 06:54
Ветал, что такое "анимированная кнопка"?
Ответить | Ответить с цитатой | Цитировать
0 # Ветал 11.01.2023 08:38
вот демо:
-
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 12.01.2023 06:31
Ветал, понял. Такая кнопка - это исключительно вопрос стилей. Вы можете скопировать CSS-стили с любого сайта, даже с этого демо, добавить в свой шаблон и указать класс кнопки, вот и всё. Отдельно заносить это в настройки модуля нет никакого смысла.
Ответить | Ответить с цитатой | Цитировать
0 # Ветал 12.01.2023 10:06
Так и сделал, Спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # limonchik 12.01.2023 10:49
Если включена маска, то телефон ограничивается маской, но в тоже врем позволяет отправить форму с меньшим количество символов...

Как это исправить?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 16.01.2023 05:33
limonchik, уже писал выше. Пока только или через переопределения JS модуля или через JS-триггер wjcOnFormBeforeSubmit. Второе предпочтительнее. Проблему добавил в список задач. Постараюсь исправить в ближайшем обновлении.
Ответить | Ответить с цитатой | Цитировать
0 # Igorsrt 27.01.2023 11:25
Здравствуйте.
Форма замечательная, намного лучше и удобнее остальных.
Но столкнулся с двумя моментами, которые у меня пока не получается решить:
1. Добавил в дополнительные поля загрузку еще одного файла по инструкции:
Код:<field name="myfilevalue" type="file" label="Enter some text" description="Choose an image with maximum 100KB" size="10" accept="image/*" />
поле нормально выводится в форме, но файл на почту не приходит... нужно что-то ещё дописать в php?
2. Если загружать файлы с названием на кирилице, то они не приходят на почту.
Можете дать советы? )
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 30.01.2023 05:28
Igorsrt,

1. Дополнительное поле файла пока, к сожалению, работать не будет, поскольку для прикрепления его к письму нужно дополнительно обрабатывать его кодом. Я думаю, стоит добавить в коде проверку на то, что в дополнительных полях есть поля типа "файл" и обрабатывать их как вложения. Добавлю в список правок.

2. Проверю.

Спасибо за ваши замечания. Они ценные и дали новую информацию. Постараюсь учесть их в ближайшем обновлении.
Ответить | Ответить с цитатой | Цитировать
0 # Igorsrt 30.01.2023 14:24
Здравствуйте.
По поводу пункта 2 кажется разобрались: файл не отправляется если в конце его имени стоит точка (типа файл..pdf получается) - вероятно джумла считает это уже каким-то другим расширением (попробовал добавить в список расширений image/*, .pdf, .doc, .docx, .xls, .xlsx, ..pdf - не сработало).

Также не очень нравится мультизагрузка файлов: хочется что бы можно было добавлять файлы по одному из разных папок, удалять и т.п.
Может быть есть возможность как-то прикрутить его к Вашей форме через код php?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 31.01.2023 04:48
Igorsrt, насчет расширения - сразу не отвечу, нужно тестировать. Вообще, за валидацию расширения файла на сервере отвечает метод isValidFileType из файла: /modules/mod_wedal_joomla_callback/src/Helper/WedalJoomlaCallbackHelper.php. Я посмотрел его сейчас, но на первый взгляд не вижу там препятствий на прохождение валидации с двумя точками. Хотя, может быть она там есть.

Насчет мультизагрузки файлов - это уже вопрос фронтенда. Вы можете добавить JS-плагин, который будет скрывать стандартную форму выбора файла, заменяя ее какой-то расширенной. По факту для модуля ничего не изменится, т.к. файлы будут крепится все также к стандартному полю, просто оно будет скрыто. Добавить такой плагин можно без хаков. Может быть имеет смысл включить его в модуль по умолчанию в будущем, но пока так.
Ответить | Ответить с цитатой | Цитировать
0 # Igorsrt 31.01.2023 07:49
Цитирую Wedal:
. Вы можете добавить JS-плагин, который будет скрывать стандартную форму выбора файла, заменяя ее какой-то расширенной.

А можно пример подобного js-плагина? - я что-то второй день ничего не могу найти.
Ответить | Ответить с цитатой | Цитировать
0 # Igorsrt 31.01.2023 19:31
Цитирую Wedal:
Насчет мультизагрузки файлов - это уже вопрос фронтенда. Вы можете добавить 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>

вроде как даже всё работает... но буду проверять конечно ещё завтра )) Спасибо
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 01.02.2023 06:43
Igorsrt, перемудрили.

Первое:
Нельзя трогать файл хелпера - будет хак и изменения при обновлении модуля затрутся.

Второе:
Чтобы изменить базовый макет поля выбора файла нужно переопределить подмакет типа файла в шаблон и изменить под себя. Это повлияет на все поля выбора файла на сайте. В макета вывода формы, в самом верху, я специально оставил полезные ссылки и путь макетов полей:

Код:/* Информация о том, как работать с полями в макете:
- 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 (пример есть в этой статье). Это для всплывающей формы. Для встроенной можно просто добавить код в шаблон с вызовом на загрузку страницы.

А в остальном всё верно.
Ответить | Ответить с цитатой | Цитировать
0 # Ветал 30.01.2023 08:53
Может уже было, но я упустил?
Но, как сделать доп поле обязательным?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 31.01.2023 04:31
Ветал, добавить ему атрибут required="1".
Ответить | Ответить с цитатой | Цитировать
0 # Sergiy 31.01.2023 11:55
https:..
По этой ссылке находятся два модуля для Ж3. Авторами больше не поддерживаются. Посмотрите как там реализовано добавление полей. Поля может добавлять даже пользователь ничего не знающий о программировании.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 01.02.2023 06:32
Sergiy, посмотрел модули. Я видел раньше подобную реализацию, и раньше она мне нравилась. Там используется сабформа в повторяемом поле в настройках, что позволяет также создавать дополнительные поля. Сначала думал сделать похожую реализацию, но позже отказался от этой идеи, т.к. получается гораздо менее универсально.

Смотрите:

1) Список типов дополнительных полей там сильно ограничен. Используя же подход XML-fields из Joomla, мы получаем огромный набор типов полей - любые типы, которые поддерживает Joomla.

2) В тех модулях для рендеринга каждого поля написан свой велосипед. В Wedal Joomla Callback 2 все поля рендерятся через Joomla. В коде модуля теперь вообще нет input'ов.

3) Все стили полей наследуются от используемого шаблона. Если в шаблоне поля оформлены, вам не нужно оформлять их дополнительно. В тех модулях этого нет.

В общем, несмотря на то, что Wedal Joomla Callback добавлять поля чуть сложнее (нужно все-таки перейти по ссылке в модуле и посмотреть примеры их добавления в документации Joomla), вы получаете гораздо большую гибкость в работе с ними. Советую один раз разобраться и в дальнейшем, думаю, возвращаться к способу с повторяемыми формами уже не захочется.
Ответить | Ответить с цитатой | Цитировать