Конструктор форм iForms. Добавление записи в типы контента гостем.

+32
3.91K
С момента моей прошлой записи на эту тему прошло больше двух лет. За это время двойка претерпела немало изменений. Поэтому возникла необходимость обновить тот хук и расписать более подробно, как можно используя конструктор форм дать возможность не авторизованным пользователям создавать записи в типах контента.

Итак, для начала нужно установить хук.
Скачать его можно у меня в файлах (файл с названием hook_iforms_guest_publicate). В архиве лежат два файла — один файл манифеста system\controllers\iforms\manifest.php, второй — сам хук system\controllers\iforms\hooks\iforms_guest_publicate.php. Файл хука просто копируется в папку system\controllers\iforms\hooks вашего сайте. Файл манифеста, также можно скопировать в папку system\controllers\iforms, но только в том случае, если вы ранее в него не вносили правки. В противном случае в этот файл на сайте необходимо внести строку
  1. 'iforms_guest_publicate',
по аналогии с файлом из архива.

В 2.7.2, чтобы новый хук заработал, необходимо зайти в админку сайта, в раздел "Компоненты" — "Управление событиями" и нажать кнопку "Обновить".

Теперь необходимо создать форму и привязать её к этому хуку. Форма должна содержать поля с системными именами такими же как и в типе контента, куда будет производится запись.
Обычно, через конструктор заполняют тип контента похожий на "Отзывы" или "Гостевая книга", но это простые примеры, так как там обычно используются поля, без свойств и с малым уровнем вложенности категорий. Рассмотрим более глобальный пример — Добавление объявления.

Для примера будем использовать дефолтный тип контента "Объявления". Заходим в настройки типа контента, в раздел "Поля" и смотрим какие системные имена и типы полей используются.
Иллюстрация
После этого создаём форму у которой во вкладке "События" выбираем наш хук. Рекомендую установить хук после валидации формы или после отправки формы. В первой случае можно прекратить выполнение и отправку самой формы, после создания записи.
Иллюстрация
Остальные настройки формы — на ваше усмотрение.

Создаём поля в этой форме.
Иллюстрация
Вообще, для создания записи в типе контента обязательно нужно указать системное имя этого типа контента в поле — ctype_name, id категории в которой будет выводится запись — category_id, заголовок записи — title, id авторизованного пользователя в качестве автора — user_id.

В файле используемого хука ctype_name указано по умолчанию — "board", можно изменить его прямо в файле для всех форм использующих данный хук, а можно создать скрытое поле в форме с системным именем ctype_name и предустановленным значением нужного типа контента, например для новостей "news" и т.п.

category_id — можно указать также скрытым полем, можно создать тип поля "Категории типа контента" с системным именем — "category_id".
Иллюстрация
Также можно использовать тип поля список с предустановленным значением в виде "ключ | значение" "id категории | Название категории"
Конечно, если не указать в этом поле ничего, то category_id будет соответствовать корневой категории данного типа контента.

title — Заголовок записи берется из двух полей, если есть явно указанное поле с систменым именем "title", то используется его значение, если нет, то ищется поле с системным именем "name", если и оно не найдено, то подставится просто текущая дата.

user_id — тут вообще вариантов может быть много. Можно создать пользователя с никнеймом "Гость" и скрытым полем указать его id или не создавать, а указать уже существующего пользователя. Можно сделать полем список для выбора, от чьего имени авторизованного пользователя будет выводится запись.
Можно, зарегистрировать гостя на сайте shockи выслать ему сгенерированный случайный пароль с приглашением авторизоваться на сайте. Для регистрации пользователя, обязательно нужны поля в форме с системными именами "name" или "nickname" и "email". Также для регистрации можно указать поле "user_groups" — группа пользователей и поле с загрузкой изображения "user_avatar" — аватар пользователя. Если необходимо после регистрации гостя на сайте отправить ему письмо со случайным паролем, то надо заполнить поле "Шаблон автоуведомления", в настройках формы, во вкладке "Внешняя почта".
Если гость уже зарегистрирован на сайте, то новая запись будет осуществляться от имени зарегистрированного пользователя. А если каким-то образом авторизованный пользователь решит заполнить форму, то запись будет публиковаться от его имени.
Если user_id не определён явно, то запись будет опубликована от лица администратора с id = 1.

По умолчанию регистрация гостя отключена. Активировать регистрацию гостя можно скрытым полем 'with_user_register' = 0 — без регистрации, 1 — с регистрацией. Или в файле хука в 49 строке заменить 0 на 1. Все изменения в файле хука будут влиять на все формы, использующие данный хук. Конечно, если этот хук использует только одна форма, то лучше все изменения внести в самом файле, это упростит форму.

На этом обязательные поля закончились, создаём остальные поля такие же, как в самом типе контента.

На этом можно и закончить заполнение полей в типе контента используя конструктор форм. В хуке по умолчанию прописано, что запись будет публиковаться сразу после проверки модератором. Изменить условия публикации можно скрытыми полями
'is_pub' = 0 — не публиковать, 1 — публиковать.
'is_approved' = 0 — отправить на модерацию, 1 — не отправлять.
Также можно задать срок публикации записи скрытым полем 'pub_days' = 15 — количество дней публикации записи.
Указанные значения прописываются в настройках поля в предустановленных значениях.

Можно сразу завершить работу конструктора форм скрытым полем 'redirect_back' = 0 — продолжать выполнять отправку формы, после обработки хука, 1 — прекратить отправку формы, после обработки хука.

Выводим форму виджетом в нужном месте, и смотрим результат
Иллюстрация
Этот вариант подходит для большинства случаев заполнения типов контента гостями. Так как используются только поля, а поля для всех категорий одинаковые. В случае с использование свойств категорий, нужно исходить из конкретной ситуации. Например, если все свойства уникальны для каждой категории, то можно использовать зависимость полей в конструкторе форм и выводить нужные свойства для заполнения в зависимости от выбранной категории. В нашем примере свойства могут быть привязаны к нескольким категориям. Например, свойство "Тип предложения" в категории недвижимость, привязано ещё и в категории "Квартиры".
В конструкторе форм все поля в пределах одной формы должны иметь уникальные системные имена, поэтому в данном случае на каждую категорию необходимо создавать отдельную форму и размещать их на страницах этих категорий crazy
Но не пугайтесь в конструкторе 3.4 теперь есть кнопка копирования формы, которая копирует все настройки и поля формы.

Вернёмся к свойствам. Как узнать id свойства я рассказывал 2 года назад, за это время ничего не поменялось. Цифра после последнего слэша "/" в url-адресе редактирования свойства типа контента и есть нужный нам id.
В форме конструктора создаём поле с системным именем "props_{id}", где вместо {id} прописываем id нужного свойства. Например, у свойства "Тип предложения" id = 7, пишем "props_7".
Иллюстрация
В итоге получим такую форму
Иллюстрация
Иллюстрация
Заполняем форму гостем, отправляем данные, заходим под админом/модератором, разрешаем публикацию.

Рассылка конструктора версии 3.4 началась, но ещё не закончилась. Поэтому, у кого версия конструктора 3.3.0 и выше, получат бесплатно, в течении 2-3 дней. У кого ниже 3.3.0, придётся оплатить обновление до последней версии — 200 руб.
0
Реклама Реклама #
0
Def Def 4 года назад #
круто!!!
0
Jestik Jestik 4 года назад #
Кстати, в связи с новым законом о обработке персональных данных. в состав компонента было бы неплохо включить поле "Чекбокс с ссылкой" типа соглашение, как на многих сайтах соглашение с правилами
+2
Loadырь Loadырь 4 года назад #
На выбор два варианта:
1. Чекбокс, обязательный для заполнения.
2. Описание, после всех полей формы.
Оба варианта есть тут. Причём ссылки можно указать с классом для открытия в модальном окне.
+1
Loadырь Loadырь 4 года назад #
Забыл добавить, текст естественно произвольный, настраивается в настройках для каждой формы.
0
Def Def 4 года назад #
возможно ли вывести в модальном окне страницу с другого сайта?
+1
Loadырь Loadырь 4 года назад #
Возможно, если CORS позволит.
0
Capitan Capitan 4 года назад #
все хорошо, но! это все как всегда до очередного обновления, а потом все опять переделывать :(
+3
Loadырь Loadырь 4 года назад #
Таки да, "печалька" есть везде и всегда. Но все ждут, все надеются, что в коробке когда-то...
0
Oleg_z75 Oleg_z75 4 года назад #
Если будет в коробке конструктор, тогда не будет оригинальности, будет просто стандарт с обрезанными функциями по самое нехочу... Как то так.
+3
Loadырь Loadырь 4 года назад #
Конструктор в коробке, будет однозначно. В офф. документации даже встречал фразы о нём.
Все ждут и надеются, что когда-то гости смогут писать контент на сайте и это будет в коробке, без лишних хаков, хуков и прочей "нечисти". Вот только пока одни ждут, другие пользуются.
0
Скела Скела 3 года назад #
Возможно ли сделать, чтобы при нажатии на кнопку ошибки в форме или уведомление выходило без перезагрузки страницы?
Ставил "разное"-"способ доставки"-"ajax", думал что это связано, но там поля формы вообще не выводятся.
+1
Loadырь Loadырь 3 года назад #
Поставьте галочку проверки полей с помощь jquery
0
Скела Скела 3 года назад #
Оказалось проблема в стилях шаблона bootstrap стиль .modal (удаляем и все нормально работает)
Огромное спасибо. Компонент супер..
0
Jestik Jestik 3 года назад #
Буду благодарен если ответите на несколько вопросов,
- На 2.10.1 Работает? Кто то пробовал?
- Как реализовать заполнение тегов? Сделать поле "tags"? И наверно "предлагать" во время ввода теги не будет?
- Что нужно что бы показывать эту форму для зарегистрированных пользователей? Там же по идее хук не нужен этот..
+1
Loadырь Loadырь 3 года назад #
Jestik:
На 2.10.1 Работает? Кто то пробовал?
На 2.10.0 работает, на 2.10.1 не пробовал, но тоже должно работать.
Jestik:
Как реализовать заполнение тегов? Сделать поле "tags"? И наверно "предлагать" во время ввода теги не будет?
Создать поле tags. Предлагать варианты не будет.
Jestik:
Что нужно что бы показывать эту форму для зарегистрированных пользователей?
Вывести виджет с формой для всех, но есть ли смысл? Хук нужен в любом случае, так как это форма имеет свой обработчик.
0
Jestik Jestik 3 года назад #
Спасибо!
+1
Def Def 3 года назад #
одна опция не работает - почему то система в админке не может отчистить уведомления о заполненных формах. Версия 3.5 форм и версия 2.10.1 инстанта
+2
Loadырь Loadырь 3 года назад #
Система не может очистить сообщения, которые имеют действия. В случае с конструктором форм, сообщение имеет действие, в виде перехода на страницу, откуда была отправлена форма.
0
Сергей Сергей 2 года назад #
Как то пропустил я данное чудо в конструкторе форм, давно есть потребность в публикации гостями контента, даже наверное необходимость. Возник вопрос при настройке. Конструктор может заполнять только стандартные поля? Которые есть в нём с пометкой iForms к примеру поля от dwd он не заполнит? Конструктор полей
0
Сергей Сергей 2 года назад #
2.10.2 полёт нормальный, дополнение вышло много, много версий тому назад всё работает, и поддерживается. Огромное благодарю Loadырь. dance .
0
Region67 Region67 1 год назад #
Так в итоге работает с "конструктором полей" или нет?
+1
Loadырь Loadырь 1 год назад #
Нет. В конструкторе форм для заполнения доступны только поля конструктора, все сторонние поля не доступны в конструкторе.
0
Region67 Region67 1 год назад #
На актуальной версии работает исправно?
+1
Loadырь Loadырь 1 год назад #
Что именно вас интересует? Работа конструктора форм или обсуждаемого хука в данной теме?
0
Сергей Сергей 1 год назад #
И собственно вопрос :
Телеграм боту сообщение отправляется, а вот поля как ему скормить?
В таком виде {price}, {nickname}, {email}, {phones} не выходит, бот их как есть публикует.
По ссылке Доступные html-теги телеграм я смотрел, но не понял как это применить.
Приведите пример заполнения, буду признателен.
А то только ссылку на сайт сделал <a href = '/'> На сайте произошло обновление</a> и всё laugh
Или может конструктор устарел?
Версия конструктора 3.7.5 пора по платить чего нибудь и новую версию получить?
0
Loadырь Loadырь 1 год назад #
Сергей:
В таком виде {price}, {nickname}, {email}, {phones} не выходит, бот их как есть публикует.
А вы прописываете в настройках формы текст для отправки в телеграмм? Попробуйте оставить пустым поле "Шаблон сообщения Telegram-боту" и посмотрите, что прилетит. Если там стоит html-редактор, то надо, чтобы в режиме просмотра кода не было никаких тегов абзаца, блока и т. п. В общем, чтобы поле было пустым
Сергей:
По ссылке Доступные html-теги телеграм я смотрел, но не понял как это применить.
html-теги - это выделение жирным, курсивом и прочее, что доступно по ссылке. Там же и пример использования показан. Чтобы выделить текст жирным надо делать так
Код PHP:
  1. <b>этот текст будет выделен жирным шрифтом в сообщении</b>
И т. п. из доступного по ссылке. Но это не влияет на то, что переменные полей не заполняются их значениями и надо выяснять где глюк. А для этого нужны более полные данные типа версий движка, php, и т.п.
0
Сергей Сергей 1 год назад #
Благодарю за подробности, оставил пустым поле "Шаблон сообщения Telegram-боту" Бот поля получил. Конструктор форм супер !!!
0
Сергей Сергей 1 год назад #
У меня хук работает на 2.13.1, регистрирует пользователя, публикует объявление на сайте, отправляет поля в таблицу гуглу, отправляет сообщение телеграм боту но тут есть вопрос.
Денис Васильевич Денис Васильевич 1 год назад #
Комментарий удален
Денис Васильевич Денис Васильевич 1 год назад #
Комментарий удален
0
Сергей Сергей 1 год назад #
Сайт не сломают, организовал внутреннею росгвардию laugh
0
Сергей Сергей 1 год назад #
Модераторов
0
Сергей Сергей 1 год назад #
Всё в рамках конституции РФ
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.