Добавление материалов пользователями

Аватар пользователя goodboy goodboy 30 августа 2015 в 15:36

На сайте потребовалось, чтобы анонимные пользователи оставляли свои отзывы и они автоматически публиковались. Создал тип материала "Отзывы" с полями "Имя","Email","Раздел"(taxonomy_term) и "Отзыв". Дал пользователям права на создание ноды типа "Отзыв" и отчитался, что все сделано!

Но, оказалось не все так просто. Мне был предъявлен ряд запросов и недостатков:

  1. В заголовке, вместо "Создание материала Отзыв", необходимо "Добавить отзыв"
  2. Кнопку отправки в форме назвать "Добавить"
  3. Вывести специальное сообщение после создания материала
  4. Убрать "лишнюю" информацию в форме добавления ноды - информация о формате, подсказки...
  5. Использовать AJAX, вывод результатов валидации в том же окне
  6. Предусмотреть наличие полей, доступных только администратору
  7. Форму вывести в модальном окне

Первые 3 задания помогли сделать модули Custom submit messages и Messages Alter. Лишняя информация убирается при помощи Simplify. AJAX добавил модулем ASAF, наличие доступа к полям - Field Permissions.

А вот вывод в модальном окне заставил задуматься. Конечно, есть множество способов такого вывода, но потребовался именно такой, который уже реализован для контактной формы (webform). А модальность для вебформ была реализована при помощи Modal forms, которая не работает с формой добавления ноды. Сделать быстро такую же темизацию нереально. Все, приплыли, такой подход не годится. Что делать?

Для начала, я сделал вебформу с теми же полями, что и в типе материала (за исключением полей для администратора). Все вопросы сразу же решились настройками Webform и уже установленными модулями для Webform. Специальной верстки для формы добавления ноды, разборок с административной темой не потребовалось. Показал форму заказчику, тот - "ну вот же, а говорил что долго и сложно". Для создания ноды после сабмита вебформы использовал Rules (+Webform_rules). Некоторые мелочи дописал в своем модуле в hook_node_presave. Бонусом пошла встроенная в webform система уведомлений на Email.

Проблемы начинаются с появлением сложных полей. Даже, для поля типа ссылки на термин (с выводом из views), потребовался дополнительный модуль ( я использовал Webform_Views_Select ). Нужно будет что-то решать с множественным полем картинок. Скорее всего, еще с чем-то. Идеальных решений не бывает.

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 30 августа 2015 в 20:24

- Хм, когда-то сталкнулся с такой же проблемой - заставить https://www.drupal.org/project/modal_forms работать с node/add, форкнул модуль - там кода - немного надо было добавить.
- Стараюсь применять entityform, а не webform. Но формы и материалы - всё таки разные задачи решают. В случае с отзывами - часто требуется модерация и привязка например к товарам магазина. Поэтому конечно материал + entityreference. Модальный функционал сейчас всё чаще делаю с помощью встроенный jquery ui.dialog Smile , ajax validation - https://www.drupal.org/project/clientside_validation

Аватар пользователя goodboy goodboy 31 августа 2015 в 1:17

Странно, если с modal_forms все так несложно, почему разработчики столько лет тянут. Мы пробовали еще варианты с fancybox, colorbox, достаточно ресурсоемкое занятие выходило, по верстке много работы. Решили пробовать auto-dialog.

Чаще всего приходилось делать Отзывы и Вопросы-Ответы. Модерация само собой, этот момент я опустил. Кстати, на чем делаете модерацию? Я по-старинке пользуюсь форком Modr8, пора уже на workflow переходить, хотя мне он показалося тяжеловесным модулем.

Материал в любом случае создается, со всеми привязками, только во втором варианте параллельно еще и запись в вебформе. Кстати, бывали случаи, когда модератор ошибался ("дрогнула рука") и удалял хорошие материалы пользователя. Материал удаляется же безвозвратно, а так остается копия в вебформе.

Насчет entity form будем думать. Спасибо за обширный ответ.

Аватар пользователя sas@drupal.org sas@drupal.org 31 августа 2015 в 9:20

- С modal_forms не знаю, но так бывает - просто поддерживают, да и тяжеловат он, туда - сюда инфыу гоняет, часто быстрее и достаточно inline сразу выдать скрытую.
- Простейшая модерация - rules, workflow - для разветвленных процессов.
- С удаление, - можно сделать доступным только снятие с публикации, а другому манагеру уже - удаление.
- Entityform мне нравится:
- Конверсией настройки ( так как поддерживает Fields API)
- Интеграцией со модулями must be contribution (например раньше своя отправка у них была notification, а потом с rules интегрировались и это простор для творчества)
- Гибкость настройки по спец. функционалности , всякие - кнопка должна называться ... , сообщени после долждно быть таким ... Smile

Аватар пользователя goodboy goodboy 31 августа 2015 в 12:05

Я использовал workflow для сайта организации, там регионы присылали материалы, отправлялось редактору, те правили и опять. Все шикарно конечно. Для отзывов тяжелое решение. А как при помощи rules модерировать? Имеется в виду автомодерация? У нас модератор вручную просматривает список материалов.

Entity form прогрессивней конечно. Но те же modal_forms поддерживают его? Для модуля заявлено webform.

Аватар пользователя goodboy goodboy 8 сентября 2015 в 20:44

Ясно, я и в список материалов для модерации добавляю, и на почту уведомление о добавлении материала (при помощи Rules). А вот сейчас продолжаю форкать modr8, делаю примитивный спам-фильтр ))

В песочнице модуль, вот таких моментов опасаюсь, могут всплыть подводные камни