Просматривая форумы заметил часто возникающие вопросы у пользователей, типа: “Как гостям добавлять новости?” Или: “Как не авторизованным, писать на стене в группе или в профиле пользователей?”.
Пока «гости» в двойке ограничены в своих действиях на вашем сайте. Поэтому я решил, немного описать возможности конструктора форм iForms.
Не зависимо, от того какой версией вы пользуетесь — платной или бесплатной, эти возможности доступны в каждой, с небольшой разницей. О разнице я расскажу в конце, но в этом посте, я буду использовать платную версию. Так как она мне больше нравится.
Создаём профиль для наших "гостей".
Выбираем группу пользователей с наименьшим набором прав или создаём новую. Создаём в ней нового пользователя с именем “Гость”. Придумываем ему емаил и пароль. У меня это guest@krivo.pro и шесть жирных точек.
В списке он у меня появляется с 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 строка):
надо прописать это
Вот и всё.
Все картинки в лучшем качестве и сами файлы, что мы с вами здесь создавали и изменяли можно скачать одним архивом.
Конечно, это всего лишь рабочий пример того, как можно использовать конструктор для взаимодействия с посетителями сайта, но вам решать, что можно этим посетителям делать на вашем сайте, а что им лучше не делать.
Спасибо, что дочитали до сюда.
Пока «гости» в двойке ограничены в своих действиях на вашем сайте. Поэтому я решил, немного описать возможности конструктора форм iForms.
Не зависимо, от того какой версией вы пользуетесь — платной или бесплатной, эти возможности доступны в каждой, с небольшой разницей. О разнице я расскажу в конце, но в этом посте, я буду использовать платную версию. Так как она мне больше нравится.
Создаём профиль для наших "гостей".
Выбираем группу пользователей с наименьшим набором прав или создаём новую. Создаём в ней нового пользователя с именем “Гость”. Придумываем ему емаил и пароль. У меня это guest@krivo.pro и шесть жирных точек.
В списке он у меня появляется с id = 2. Эту цифру можно временно запомнить.
Теперь у нас на сайте гости имеют свой профиль, в котором мы можем менять аватар и другие настройки на своё усмотрение.
Рассмотрим вариант добавления новостей.
Смотрим какие поля есть у нашего типа контента — «Новости» и какие есть категории.
Открываем наш компонент «Конструктор форм iForms» и создаём форму
Затем в этой форме создаём поля, у которых системные имена, совпадают с системными именами полей типа контента.
Если поле по типу совпадает с другими уже настроенными полями формы, то можно скопировать такое поле с его настройками
И создать на его основе новое поле, заполнив только системное имя и заголовок
Далее оставшиеся поля
Теперь добавим "технологические поля", которые не связаны с полями типа контента, но понадобятся нам в дальнейшем.
Добавляем поле список со списком доступных пользователю категорий в поле «предустановленные значения». В виде: название_категории | название_категории.
Системное имя поля со списком категорий будет у нас использоваться, поэтому запомните его название. Можно назвать, как угодно, у меня это category_name.
Добавляем скрытое поле с системным именем, которое потом нам потребуется. У меня это ctype_name, но вы можете использовать другое. Название поля можно указать, оно всё равно не выведется.
В предустановленых значениях этого поля прописываем системное имя контента
Автора записи можно обойти созданием нового строкового поля. А стандартное поле автор просто снять с публикации.
В итоге должно получиться примерно такое
Выводим нашу форму в нужном месте.
Сделаем это в виджете на всех страницах с новостями под выводом основного контента.
Смотрим на сайте, что получилось.
Теперь у нас есть форма, есть желающий ее заполнить, но как определить, что эта форма должна добавить новость?
Для этого в системе есть хук (hook) (не путать с хак).
Дальше — самое страшное в этом посте – надо писать код.
Сперва создаём файл в каталоге \system\controllers\content\hooks\ с названием iforms_after_validate.php
В нём прописываем код. Я в комментариях расписал, что, к чему и зачем. Поэтому, можно просто скопировать.
<?php class onContentIformsAfterValidate extends cmsAction { public function run($form_data){ // получаем данные введёные пользователем (гостем) $user_data = $form_data[0]; $error = $form_data[1]; // если есть ошибки в заполнении формы, возвращяемся для их устранения if ($error) {return $form_data;} // если есть поле с системным именем 'ctype_name' заносим данные в бд, // иначе возвращаем данные $ctype_name = $user_data['ctype_name']; if (!$ctype_name) { return false; } $user = cmsUser::getInstance(); // далее указываем id пользователя из системы. Если пользователь не определён, то подставляем нашего системного гостя с id=2. $user_data['user_id'] = $user->id ? $user->id : 2; $category = $this->model->getCategoryBySLUG($ctype_name, lang_slug($user_data['category_name'])); // удалаем лишние поля перед сохранением в базе // заносим данные в базу $id = $this->model->insert('con_' . $ctype_name, $user_data); if ($id){ // возвращаем сообщение об успешности операции $user->addSessionMessage('Ваша новость будет добавлена после модерации', 'success'); } // обновляем данные на то что нам надо. 'slug' => $id . '-' . lang_slug($user_data['title']), // вставляем url записи по примеру {id}-{title} из настроек типа контента. 'seo_keys' => string_get_meta_keywords($user_data['content']), // Добавляем ключевые слова 'seo_desc' => string_get_meta_description($user_data['content']), // и описание для СЕО 'date_last_modified' => null, // делаем вид, что запись новая и ни разу не обновлялась. 'is_pub' => 0 // 0 - если ждём модерации, если публикуем сразу, то ставим 1. )); // и возвращам данные для оповещения модерторов return $form_data; } // Передаем входящие данные дальше return $form_data; } }
Чтобы система знала, что ей делать при появлении данного «события» необходимо прописать в файле \system\controllers\content\manifest.php наш новый хук
'iforms_after_validate', чтоб стало так
Заполняем форму не авторизованным пользователем – гостем
отправляем и получаем такое сообщение
Авторизуемся и идём в админку контента, находим нашу запись в выбранной категории и включаем ее.
Возвращаемся во фронт сайта и видим нашу новость.
Что мы имеем в итоге.
Наши гости стали немного активнее вести себя на сайте, при этом мы изменили всего одну строчку системного файла движка (\system\controllers\content\manifest.php) и добавили свой один файл-обработчик. По аналогии, возможно сделать многое.
Что касается бесплатной версии конструктора форм, то в нем делается это таким же образом, как описано выше, с той разницей, что в файле \system\controllers\iforms\frontend.php после строки (приблизительно 69 строка):
$errors[$fname] = $form->validate(cmsCore::getController('iforms', $inCore->request), $user_data);
// Вызов хука для дополнительной проверки и обработки данных формы
Все картинки в лучшем качестве и сами файлы, что мы с вами здесь создавали и изменяли можно скачать одним архивом.
Конечно, это всего лишь рабочий пример того, как можно использовать конструктор для взаимодействия с посетителями сайта, но вам решать, что можно этим посетителям делать на вашем сайте, а что им лучше не делать.
Спасибо, что дочитали до сюда.
Реклама #
qwest 9 лет назад #
Сразу все не осилил но однозначно плюс. На досуге еще поизучаю.
Bubble Gumoff 9 лет назад #
Олег Васильевич я 9 лет назад #
Loadырь 9 лет назад #
SpaceSel 9 лет назад #
Loadырь 9 лет назад #
jorgovich 9 лет назад #
виталя 9 лет назад #
Спасибо автору что помог с отправкой с формы(были проблемы с хостом).
виталя 9 лет назад #
Чтоб пользователь не выбирал при добавлении записи , а форма уже автоматом появлялась после создания контента.
Loadырь 9 лет назад #
виталя 9 лет назад #
Loadырь 9 лет назад #
Djes 9 лет назад #
Loadырь 9 лет назад #
Lancelot 8 лет назад #
У меня ошибка. Критичная? Как быть?
Loadырь 8 лет назад #
тут в последних комментариях я уже ответил на подобный вопрос.
Lancelot 8 лет назад #
No Name 8 лет назад #