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

4130
Просматривая форумы заметил часто возникающие вопросы у пользователей, типа: “Как гостям добавлять новости?” Или: “Как не авторизованным, писать на стене в группе или в профиле пользователей?”.

Пока «гости» в двойке ограничены в своих действиях на вашем сайте. Поэтому я решил, немного описать возможности конструктора форм iForms.
Не зависимо, от того какой версией вы пользуетесь - платной или бесплатной, эти возможности доступны в каждой, с небольшой разницей. О разнице я расскажу в конце, но в этом посте, я буду использовать платную версию. Так как она мне больше нравится.



Создаём профиль для наших "гостей".

Выбираем группу пользователей с наименьшим набором прав или создаём новую. Создаём в ней нового пользователя с именем “Гость”. Придумываем ему емаил и пароль. У меня это [email protected] и шесть жирных точек.
Спойлер
В списке он у меня появляется с id = 2. Эту цифру можно временно запомнить.
Спойлер
Теперь у нас на сайте гости имеют свой профиль, в котором мы можем менять аватар и другие настройки на своё усмотрение.
Спойлер
Рассмотрим вариант добавления новостей.

Смотрим какие поля есть у нашего типа контента - «Новости» и какие есть категории.
Спойлер
Открываем наш компонент «Конструктор форм iForms» и создаём форму

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

Добавляем поле список со списком доступных пользователю категорий в поле «предустановленные значения». В виде: название_категории | название_категории.
Системное имя поля со списком категорий будет у нас использоваться, поэтому запомните его название. Можно назвать, как угодно, у меня это category_name.
Спойлер
Добавляем скрытое поле с системным именем, которое потом нам потребуется. У меня это ctype_name, но вы можете использовать другое. Название поля можно указать, оно всё равно не выведется.
Спойлер
В предустановленых значениях этого поля прописываем системное имя контента
Спойлер
Автора записи можно обойти созданием нового строкового поля. А стандартное поле автор просто снять с публикации.
Спойлер
В итоге должно получиться примерно такое
Спойлер
Выводим нашу форму в нужном месте.

Сделаем это в виджете на всех страницах с новостями под выводом основного контента.
Спойлер
Смотрим на сайте, что получилось.
Спойлер
Теперь у нас есть форма, есть желающий ее заполнить, но как определить, что эта форма должна добавить новость?
Для этого в системе есть хук (hook) (не путать с хак).

Дальше - самое страшное в этом посте – надо писать код.
Сперва создаём файл в каталоге \system\controllers\content\hooks\ с названием iforms_after_validate.php
В нём прописываем код. Я в комментариях расписал, что, к чему и зачем. Поэтому, можно просто скопировать.
Спойлер
Тут главное, чтобы системные имена полей формы совпадали с системными именами полей типа контента. Если будет хоть одно разногласие (например вы изменили системное имя поля), то записи в базе не появятся. Выпадет ошибка и белый экран.

Чтобы система знала, что ей делать при появлении данного «события» необходимо прописать в файле \system\controllers\content\manifest.php наш новый хук
'iforms_after_validate', чтоб стало так
Спойлер
Вот пожалуй и всё. Проверяем:
Заполняем форму не авторизованным пользователем – гостем
Спойлер
отправляем и получаем такое сообщение
Спойлер
Авторизуемся и идём в админку контента, находим нашу запись в выбранной категории и включаем ее.
Спойлер
Возвращаемся во фронт сайта и видим нашу новость.
Спойлер
Что мы имеем в итоге.

Наши гости стали немного активнее вести себя на сайте, при этом мы изменили всего одну строчку системного файла движка (\system\controllers\content\manifest.php) и добавили свой один файл-обработчик. По аналогии, возможно сделать многое.

Что касается бесплатной версии конструктора форм, то в нем делается это таким же образом, как описано выше, с той разницей, что в файле \system\controllers\iforms\frontend.php после строки (приблизительно 69 строка):

Код PHP:
  1. $errors[$fname] = $form->validate(cmsCore::getController('iforms', $inCore->request), $user_data);
надо прописать это
Код PHP:
  1.  
  2. // Вызов хука для дополнительной проверки и обработки данных формы
  3. list($user_data, $errors[$fname]) = cmsEventsManager::hook('iforms_after_validate', array($user_data, $errors[$fname]));
  4.  
Вот и всё.

Все картинки в лучшем качестве и сами файлы, что мы с вами здесь создавали и изменяли можно скачать одним архивом.

Конечно, это всего лишь рабочий пример того, как можно использовать конструктор для взаимодействия с посетителями сайта, но вам решать, что можно этим посетителям делать на вашем сайте, а что им лучше не делать.

Спасибо, что дочитали до сюда.
Конструктор форм для InstantCMS 2.1.2... Платный. | Компонент "Похожий контент" для InstantCMS 2.1.2
Комментарии (18)
qwest 28 января 2015 в 19:34 +6
Loadырь вы как всегда на высоте.
Сразу все не осилил но однозначно плюс. На досуге еще поизучаю.
Bubble Gumoff 28 января 2015 в 19:57 +3
Спасибо Вам, вас всегда приятно читать, а главное всегда полезно!
Олег Васильевич я 29 января 2015 в 01:17 +2
К гадалке не ходите...
Спойлер
Loadырь 29 января 2015 в 06:24 +2
вполне приличный премиум-компонент
Так ведь, уже в коробке с конструктором компонент рассылки файлов, обновлений, сообщений, уведомлений. А с подобными обработчиками событий из типов контента легко делаются компоненты вопросы-ответы, отзывы и предложения, гостевые книги, даже слабое подобие форума можно замутить. Просто пока мало, кто это всё разглядеть может.
SpaceSel 29 января 2015 в 05:05 0
Лодырь, значит тебе не нравится бесплатный конструктор форм? 😄
Loadырь 29 января 2015 в 06:07 +2
SpaceSel , читайте внимательно, там про платный написано
мне больше нравится
. А чем вам пользоваться, выбирать вам.
jorgovich 29 января 2015 в 12:44 +3
Бесплатный конструктор это так сказать урезанная версия, платный просто бомба, который при наличии фантазии позволяет очень - очень много интересных вещей сделать. Но нельзя сказать что бесплатный хуже, он просто облегченная версия..
виталя 29 января 2015 в 18:05 0
Согласен, платная версия - вещь! Тоже купил !
Спасибо автору что помог с отправкой с формы(были проблемы с хостом).
виталя 30 января 2015 в 09:06 0
Можно ли в платной версии привязать форму к определённому типу контента?
Чтоб пользователь не выбирал при добавлении записи , а форма уже автоматом появлялась после создания контента.
Loadырь 30 января 2015 в 09:32 +1
Полем вывести не получится. Оно выводится для конкретной записи - конкретная форма. Можно поставить виджет (в сайд бар или после записи контента) на страницы типа контента и в нём вывести нужную форму. Только с отображением заголовков (виджета, формы, кнопки) надо продумать чтоб не задваивались.
виталя 30 января 2015 в 11:28 0
Оно выводится для конкретной записи - конкретная форма. - Это понятно. А можно как -то сделать чтоб для конкретного типа конттента - конкретная форма? Может есть какое решение помимо виджета?
Loadырь 30 января 2015 в 11:49 +1
Помимо виджета, пока решения нет. Могу рассмотреть, как поле можно привязать ко всему типу контента.
Djes 5 марта 2015 в 21:42 0
Загрузил, поставил - все классно! Спасибо!
Loadырь 6 марта 2015 в 07:43 +2
Пожалуйста!
Lancelot 3 августа 2016 в 13:10 0
Добрый день.
У меня ошибка. Критичная? Как быть?
Loadырь 3 августа 2016 в 13:45 0
Тут немного другая тема обсуждается,
Lancelot:
Критичная?
Нет.
Lancelot:
Как быть?
Вариантов масса - от приобретения версии конструктора, имеющей техническую поддержку, до отключения режима отладки в настройках сайта.
тут в последних комментариях я уже ответил на подобный вопрос.
Lancelot 3 августа 2016 в 14:05 0
Я планирую купить ваш компонент, но сперва хотелось бы потестить бесплатную версию для определения подойдёт ли данный компонент для решения моей задачи. Спасибо за скорый ответ.
vsemkrot 1 сентября 2016 в 06:03 -1
купил платную форму, делаю всё по инструкции как в предустановленных значениях прописать категории, если есть например Недвижимость и в ней продать, как этот правильно прописать?