Создание чата подобного как на avito.ru

Аватар пользователя rukoved rukoved 4 мая в 0:09

Назрел вопрос... Как можно реализовать чат для общения пользователей меж собой на сайте. Веб-форм не получается, комментарии не то, модуль Privatemsg не подошел.
Есть ли готовое решение этой задачи и куда копать? Функционал общения должен быть аналогичен тому как это реализовано на сайте авито, чтобы пользователь мог отправлять и получать сообщение непосредственно из представления.

Лучший ответ

Аватар пользователя leha373 leha373 14 мая в 19:04

Смотри что у меня
Я создаю пользователя с ролью Психолог (там заполняю поле email)
захожу под этой ролью
у меня есть тип контента Психолог где есть много полей и одно из полей" Емейл для уведомлений "
В это поле я ставлю значение по умолчанию [current-user:mail], так я зашел по ролью и у меня до этого поле email было заполнено, то оно дублируется
сохраняю материал
В Views вывожу это поле и переопределяю его в форму как писалось выше

Комментарии

Аватар пользователя rukoved rukoved 7 мая в 12:21

Да, благодарю за предложенные варианты, но это все не то, их я уже проверила. Мне нужен диалог как на сайте avito, а тут просто чаты.

Я пробую настроить персональную контактную форму, в принципе мне будет достаточно того, что пользователь сможет отправить личное сообщение автору со страницы с представленным материалом но при отправке письма автору вылетает ошибка:
LogicException: Render context is empty, because render() was called outside of a renderRoot() or renderPlain() call. Use renderPlain()/renderRoot() or #lazy_builder/#pre_render instead. in Drupal\Core\Render\Renderer->doRender() (line 243 of core/lib/Drupal/Core/Render/Renderer.php).

Подозреваю, что проблема с модулем contact либо contact-storage. Решений нет этого вопроса, все модули и ядро обновлены до крайней версии. Вопрос висит не решенный.

Аватар пользователя rukoved rukoved 8 мая в 19:17

Благодарю за совет, но этот вариант я уже потестила, он мне не подошел - для того, чтобы отправить сообщение автору материала, отправителю нужно ввести имя автора. Я пока не смогла никак привязать имя автора из материала к этому полю. Возможно есть какие-то варианты но у меня этот, на первый взгляд, простой вопрос не решается ни посредством вебформ ни теми модулями, что можно найти по этой теме.

Аватар пользователя leha373 leha373 8 мая в 19:38

Там из коробки есть поле, которое привязано к автору материала и можно писать личное сообщение

Аватар пользователя rukoved rukoved 8 мая в 20:12

да, благодарю! Это работает! Ваша подсказка мне очень помогла и я обязательно так-же попробую второй вариант с веб-формой.

Аватар пользователя leha373 leha373 8 мая в 19:41

И с помощью веб формы можно решить, сделал ссылку ввида /form/zayavka-na-konsultaciyu?famaly={{ title }}&email={{ mail }}, со скрытым полем и передачей параметров

Аватар пользователя leha373 leha373 8 мая в 20:17

с вебформой нужно ее еще настроить правильно, не просто ссылку написать.Если нужна будет помощь пишите

Аватар пользователя rukoved rukoved 12 мая в 19:17

Здравствуйте! Благодарю за помощь, пригодилась.

У меня получилось настроить веб-форму со скрытым полем темы.
В представление вывела блок с текстом (ссылкой на форму) с запросом этого поля в url, все отрабатывает письмо приходит, но приходит оно на эл. адрес сайта, а цель отправить его автору материала.

В настройках веб-формы в обработчике электронной почты я так и не поняла как указать e-mail или задать переменную, чтобы потом ее заменить в представлении на автора материала.
В токенах нет подобных полей, а в пользовательском адресе электронной почты можно указать только определенный адрес.

Аватар пользователя rukoved rukoved 12 мая в 20:34

Да, именно этого поля и не хватало.
Теперь письма летят куда следует! Благодарю за оперативную помощь!

Аватар пользователя rukoved rukoved 12 мая в 22:28

Заметила, что отправление идет только из аккаунта администратора, в пользовательском аккаунте письмо получает пустое поле вместе адреса эл. почты. Есть ли какие-то особые разрешения для этого? В правах и доступах формы выставила максимальные разрешения но это не помогло.
Над формой повисло сообщение - Only webform administrators are allowed to access this page and create new submissions.

Аватар пользователя rukoved rukoved 13 мая в 13:14

Добрый день! Этот вариант я уже проверила, не сработал, открыла все максимально.. для теста вывела во вьюхе поле с email и вижу, что оно отображается только в аккаунте админа, в пользовательском аккаунте оно скрыто.. пойду копать права, потому, как в веб-форме тоже все доступы открыты

Аватар пользователя leha373 leha373 13 мая в 13:31

Ну по сути поле user: email доступно только для админов. В настройках доступа посмотрите права

или переопределить поле в другом типе материалов и вставить значение по умолчанию токен поля user: email

Аватар пользователя rukoved rukoved 14 мая в 17:30

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

leha373 wrote: переопределить поле в другом типе материалов

создала новый тип материала, добавила текстовое поле и по умолчанию поставила user:email, такого токена в представленных вариантах у себя я не вижу...

Создала новое представление, добавила блок, вывела это поле, оно естественно пустое.

Добавила этот блок в представление из которого я вызываю веб-форму, далее не понимаю что с этим делать. Добавить отношение, тип материала? Поле остается пустым.

Аватар пользователя rukoved rukoved 13 мая в 13:40

"Управление пользователями
Предупреждение: это право связано с безопасностью сайта. Предоставляйте это право только пользователям той роли, которым вы доверяете. Управлять всеми учётными записями пользователей. Включая всю пользовательскую информацию, изменение email адресов и паролей, письма к пользователю, блокирование и удаление учётных записей." - пришлось открыть доступ, только так работает.)

Аватар пользователя rukoved rukoved 13 мая в 14:02

меня вот это еще смущает, над формой висит сообщение - Only webform administrators are allowed to access this page and create new submissions.

Установила - "Разрешить пользователям публиковать материалы с выделенного URL", как временное решение, я вижу, что есть патч для решения этого тоже.

Аватар пользователя leha373 leha373 14 мая в 18:02

rukoved wrote: создала новый тип материала, добавила текстовое поле и по умолчанию поставила user:email, такого токена в представленных вариантах у себя я не вижу...

Создала новое представление, добавила блок, вывела это поле, оно естественно пустое.

Добавила этот блок в представление из которого я вызываю веб-форму, далее не понимаю что с этим делать. Добавить отношение, тип материала? Поле остается пустым.

Вот модуль
https://www.drupal.org/project/field_default_token
токен будет такой [current-user:mail]

Аватар пользователя rukoved rukoved 14 мая в 18:49

leha373 wrote: https://www.drupal.org/project/field_default_token

модуль для 7 друпала, поставила аналог для 8 версии - https://www.drupal.org/project/field_token_value
К сожалению в представлении емайл не показывается Dash 1
может что-то нужно поставить в контекстный фильтр?

Аватар пользователя leha373 leha373 14 мая в 19:04

Смотри что у меня
Я создаю пользователя с ролью Психолог (там заполняю поле email)
захожу под этой ролью
у меня есть тип контента Психолог где есть много полей и одно из полей" Емейл для уведомлений "
В это поле я ставлю значение по умолчанию [current-user:mail], так я зашел по ролью и у меня до этого поле email было заполнено, то оно дублируется
сохраняю материал
В Views вывожу это поле и переопределяю его в форму как писалось выше

Аватар пользователя rukoved rukoved 15 мая в 13:49

Добрый день! Хочу поблагодарить за помощь еще раз)) Вот так получилось без предоставления доступа к управлению пользователями. Новую роль я не создавала, мне не требуется, но принцип тот-же. Работает с токеном!))

Аватар пользователя rukoved rukoved 14 мая в 19:17

установила, но емайл не могу вытащить, остальные поля отображаются как положено, предполагаю, что в настройках фильтра что-то не доделываю

Аватар пользователя rukoved rukoved 14 мая в 19:23

в представлении я его не вижу, как проверить, что он срабатывает, ведь в новом созданном типе материала он стоит по умолчанию и там одно поле.
Либо я должна его добавить в тип материала объявлений откуда я пытаюсь вызвать форму?)

Аватар пользователя leha373 leha373 14 мая в 19:28

Вы же создали новый тип материла! Зайти в меню Content и посмотреть этот материал и что выводит созданное поле mail

Аватар пользователя Semantics Semantics 15 мая в 14:02

Я так и не понял чем вам не подошёл Private Messages, что пришлось городить костыли с webform, если они никак для этого не предназначены

Аватар пользователя rukoved rukoved 15 мая в 14:38

Private Messages, работает но его - нужно привести в порядок, внешний вид вывода сообщений идет одним потоком без стилей и разделений сообщений от отправителя и получателя - друг под другом. Я должна с этим еще разобраться, а веб-форма временное решение.

Аватар пользователя Semantics Semantics 15 мая в 14:41

Очень странное решение.
Добавить рамочки и отступы к сообщениям - 5 минут, 4 минуты искать style.css темы.
Вы на вебформ уже потратили больше времени

Аватар пользователя rukoved rukoved 15 мая в 14:53

добавила, но они одинаково применяются ко всем сообщениям потока, нужно внедрять в шаблон вывода свои стили.

Аватар пользователя rukoved rukoved 15 мая в 14:28

С токеном работает, но путь получается открытый в строке браузера светится майл получателя - .../form/dobavit-obyavlenie?product=Тест&email=admin%40xxxxx.ru Shok

Аватар пользователя rukoved rukoved 29 мая в 21:49

Здравия! У меня такой вариант почему-то не сработал, ссылка формируется из запросов и к сожалению все-равно отображается в строке браузера.

Аватар пользователя leha373 leha373 29 мая в 22:14

Сделай по другому! Создай поле ссылка на сущность, выбери вебформа!
В настройках поля напиши в значение по умолчанию картинка
В управление отображением формы отключи его, а в управлением отображением сможешь вывести и ссылкой, и в модальном окне, также в Views. и вебформа будет привязана к конкретному материалу

Аватар пользователя rukoved rukoved 15 мая в 18:22

Добрый вечер))) это снова я...
Ставлю Private-Message-Messenger по ссылке по инструкции.
с MarionetteJS проблем не возникло, библиотечки и модуль встали, а при установке связанного модуля Selectize.js вылетает ошибка -
Notice: Undefined index: description in drupal_check_module() (line 1057 of /var/www/u0331xxx/data/www/xxxxxxxxxx.ru/core/includes/install.inc).

<?php // Print any error messages
    
foreach ($requirements as $requirement) {
      if (isset(
$requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) {
        
$message $requirement['description'];
        if (isset(
$requirement['value']) && $requirement['value']) {
          
$message t('@requirements_message (Currently using @Item version @version)', ['@requirements_message' => $requirement['description'], '@Item=> $requirement['title'], '@version' => $requirement['value']]);
        }
?>

я на этом этапе застряла полностью...

Аватар пользователя rukoved rukoved 19 мая в 15:30

Как теперь удалить не рабочий модуль private_message_messenger и все сопутствующие к нему, они все взаимосвязаны получились с private_message и ни один нельзя удалить, галочка не активна на всех связанных модулях?

Аватар пользователя ivnish ivnish 19 мая в 15:41

Нужно начать с субмодулей. После их деинсталляции будет доступна и деинсталляция основного модуля.

Аватар пользователя rukoved rukoved 19 мая в 15:47

в данном случае оказалось на оборот, субмодули не хотели удаляться, а сам модуль позволил себя удалить, ну и остальное потом тоже удалила, вылетела пару ошибок но после очистки кэша я их не вижу больше. Я вспомнила, что эти модули и устанавливались в том-же порядке.

Аватар пользователя leha373 leha373 15 мая в 20:07

Расскажите потом как запустился модуль, я еще просто не запускал и не смотрел.Стоит ли ставить

Аватар пользователя rukoved rukoved 16 мая в 19:22

Приветствую!
Потестила Модуль Private Message Messenger - не завелся((
Библиотеки подключены и задействованы.

Если перейти по ссылке в месенджер, висит пустая страница:
New Message
Загрузка...

Если следовать инструкции в связанном модуле
https://github.com/jez500/Drupal8-Marionette-JS

Добавляю запись в мою тему - adapt.libraries.yml в виде:

marionettejs:
 dependencies:
    - marionettejs/marionettejs

Не уверенна, что правильно ее поняла, но это не помогло.

Аватар пользователя rukoved rukoved 15 мая в 22:45

Хорошо, модуль поставила, буду завтра его пытать, при обновлении модулей друпаловских поля съехали, вылезло предупреждение -

Несоответствие определений сущности и/или поля
В типе сущности и определениях поля обнаружены следующие изменения.
Entity Update Tests Content Entity
Поле Type должно быть установлено.
Сообщение
Поле message.field_message_pm_thread должно быть обновлено.
Поле message.field_message_private_message должно быть обновлено.

Пока не поняла как это отразится в дальнейшей работе, предупреждение висело до того как я установила
Private-Message-Messenger.

Раньше с таким не сталкивалась, ищу как исправить сейчас.

Аватар пользователя rukoved rukoved 17 мая в 21:22

В итоге самостоятельно стилизовала Модуль Private Message, чуть позже скину стиль и скрин, может кому пригодится.

Аватар пользователя rukoved rukoved 19 мая в 15:33

В private_message не нашла возможности добавить имеющееся поле, в связи с этим возник вопрос. Как можно добавить поле с названием материала из которого происходит переход по ссылке в личные сообщения? Есть ли какие-то решения?