Компонент "Реакции"

+10
633
Компонент "Реакции"

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

Итак, как это работает. После установки компонента в настройках вашего типа контента появляются новые настройки:

Изображение

Вы можете собрать необходимый набор emodji и он появится внутри записей вашего типа контента:

Изображение

Теперь ваши пользователи смогут выражать свои эмоции к записям.

На данный момент настроек — совсем минимум, но — это первая бета и я выкладываю ее немножко заранее, чтобы собрать от вас фидбек и внести новый дополнительный функционал.

Часть функционала на самом деле есть, просто я пока не включила его в эту версию. Но — он обязательно появится в следующем обновлении. Процесс установки стандартный — после установки не забудьте обновить события в базе данных.

Запланированный функционал:

1) Возможность выбирать группы пользователей которым разрешено оставлять эмоции
2) Создание своих наборов Emodji
3) Возможность создания наборов Emodji из системных иконок InstantCms
4) Возможность уведомления авторов о новых реакциях к его записи
5) Отображение проголосовавших пользователей
6) Возможность тонкой настройки блока с эмоциями

Демо можно посмотреть здесь

До прохождения модерации можно скачать прикрепленный к посту файл.

Буду благодарна за ваши донат, даже самый маленький — все мои разработки бесплатны.

YooMoney: 4100117625208247

Прикреплённый файл:
Скачать 43 Кбскачан 2 раза
+1
Def Def 12 дней назад #

хорошая идея. Только под гостем при клике надо предлагать авторизоваться, чтобы юзер понимал как проголосовать

0
Foxman23 Foxman23 12 дней назад #

Здравствуйте! Да, видимо так и должно быть в идеале — но пока это бета, так что все предложения принимаются и внесутся в обновлении)

+1
Panda58dev Panda58dev 12 дней назад #

Штука нужная и клёвая!
Фидбэк пожалуй будет состоять из «новых плюшек»:
— Если юзверь не авторизирован, и пытаеться поставить реакцию, не просто «return false», а появляется высплывающие уведомление с текстом вроде «Что бы оставлять реакции, вы должны быть зарегестрированы!» или вроде того. Вообще, идеально, если текст можно будет настраивать;
— Добавить в CSS, что-то вроде:

  1. .content_reactions {
  2. -webkit-touch-callout: none;
  3. -webkit-user-select: none;
  4. -khtml-user-select: none;
  5. -moz-user-select: none;
  6. -ms-user-select: none;
  7. user-select: none;
  8. }

Иначе может произойти такое:

Изображение

— В «beta» версии есть лайк (👍🏻), но нет дизлайка (👎🏻). Как понял, в будущем, будет поправлено;
— Имхо, выбранная реакция, лучше смотриться как в примере, в начале статьи, то бишь — увеличенная:

  1. .content_reactions .reaction {
  2. margin: 0 4px;
  3. cursor: pointer;
  4. font-size: 24px;
  5. transition: scale 0.2s;
  6. display: inline-block;
  7. }
  8. .reaction.selected {
  9. scale: 1.5;
  10. }
  11.  

В идеале, если будут глобальные настройки модуля — возможность вставки произвольного css;

— И было бы круто, увидеть код на github/gitflic или т.п.

0
Foxman23 Foxman23 12 дней назад #

Здравствуйте! Спасибо за фидбек!

появляется высплывающие уведомление с текстом вроде «Что бы оставлять реакции, вы должны быть зарегестрированы!» или вроде того. Вообще, идеально, если текст можно будет настраивать

Да, это уже есть (правда пока только у меня 🤗)

В «beta» версии есть лайк (👍🏻), но нет дизлайка (👎🏻). Как понял, в будущем, будет поправлено

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

Имхо, выбранная реакция, лучше смотриться как в примере, в начале статьи, то бишь — увеличенная:

Не совсем поняла что вы имеете ввиду, но очень интересная идея)

И было бы круто, увидеть код на github/gitflic или т.п

Думаете это кому-то будет нужно?)))

+1
Panda58dev Panda58dev 12 дней назад #

Не совсем поняла что вы имеете ввиду

Я про эту картинку:

ИзображениеВыбранная реакция, больше, относительно остальных. Подобное решение, ещё было в доке OSX:

ИзображениеПравда, это программы, а не реакции 😅

Думаете это кому-то будет нужно?)))

Ну, например, вместо того, чтобы писать код в комментариях, я и другие разработчики, могли бы прислать pull request) Но, дело ваше, тут настаивать не буду, т.к. на роль мэйнтейнера не претендую :D

+1
Foxman23 Foxman23 12 дней назад #

Я вас поняла. Стиль самих эмодзи пока такой-  символьный. Будет — как в премиум решении от вордпресса — с анимацией и lotti анимацией

+2
maxisoft maxisoft 12 дней назад #

Ну будет полезно если данная разработка не планируется дальше монетизировать его, то да имеет смысл сделать доступны на github, чтобы можно было строним разработчикам также принять участи в разработке. Простой пример понимаю что код еще будет дорабатываться но могу сразу указать на ряд ошибок и оптимизации в коде.

1. стоит оптимизировать код js 

  1. var reactionType = clickedReaction.data('reaction');
  2. var item_id = clickedReaction.closest('.content_reactions').data('item-id');
  3. var ctype_id = clickedReaction.closest('.content_reactions').data('ctype-id');
  4.  
  5.  

стоит 1 раз получить DOM элемент и потом получать сразу всю data-атрибут

2. проблема с отправкой реакции, стоит сделать проверку на ajax запрос, чтобы не постили простым POST запросом и не спамили. 

  1. public function actionAdd() {
  2.  
  3. if (!$this->request->isAjax()){
  4. cmsCore::error404();
  5. }
  6.  

3. столкнулся с тем что есть ошибка формирования запроса, например на последней версии хромиума (хром, яндекс) не будет нормально работать отправка запроса. Так как вы сделали MIXED тип отправки, сделали POST отправку даных но при этом сделали GET параметр в запросе, из за этого система не может получить данные, корректно 

  1. $.post('/reactions/add?' + $.now(), requestData, function (result) {
0
Foxman23 Foxman23 12 дней назад #

Спасибо за замечания, поправила код — действительно, это лучше, чем было)

Foxman23 Foxman23 11 дней назад #
Комментарий удален
0
F_a_R_i_D F_a_R_i_D 11 дней назад #

Изображение

Отличный компонент. Смотрю как гость, и я не вижу кто за что проголосовал. Так задумано?

0
Foxman23 Foxman23 11 дней назад #

Нет, видимо ошибка закралась в код) Поправлю

0
F_a_R_i_D F_a_R_i_D 11 дней назад #

И ещё такой вопрос, можно ли его прикрутить к форуму?

0
Foxman23 Foxman23 11 дней назад #

Технически — да. На данный момент — нет.

0
Pawell Pawell 10 дней назад #

Здравствуйте. Огромное спасибо за нужный компонент!

Столкнулся с проблемой вывода его на стороннем шаблоне (не выводится). В шаблонах Modern и Default работает. Все файлы залиты в шаблон, также, как и в штатном (default) шаблоне. 

Если вставлять код вызова компонента непосредственно в файле шаблона, то отображается текст (like love haha wow sad angry cool confused celebrate heart_eyes clap thinking) вместо значков. В чём может быть ошибка и как подключить компонент в стороннем шаблоне?

0
Foxman23 Foxman23 9 дней назад #

Здравствуйте. Я проверяла на своем шаблоне — у меня работало. Возможно, вам нужно удалить компонент полностью из системы, удалить таблицу reactions из базы данных и установить повторно, но уже с загруженными файлами в ваш шаблон. После установки не забудьте обновить события в базе данных и увеличить счетчик кеширования в настройках системы. Если проблема сохранится — напишите мне в ЛС, попробуем выяснить в чем проблема.

0
Pawell Pawell 9 дней назад #

У меня внедрён плагин подгрузки контента на примере этого instantcms.ru/blogs/lunyi-blog/ajax-podgruzka-kontenta-dlja-dvoiki.html но для самого типа контента: записей, новостей и пр. По ходу совместное использование с вашим компонентом вызывает некий конфликт скриптов, так как при подключении вашего компонента перестаёт работать подгрузка контента, работа которого основана на скрипте jquery-ias.min.js 

Потому в шаблоне Modern ваш компонент выводится и работает.

0
Foxman23 Foxman23 9 дней назад #

Да у меня там особо ничего нет — только если небольшая библиотека confetti — вы можете ее временно заккоментировать в файле system/controllers/emotions/hooks/content_before_item.php на строке 11

  1. // $this->cms_template->addTplJSName('confetti.browser.min');

А в файле reactions.js вместо вывода конфетти временно выведите какое-нибудь сообщение в консоль, вот в этом участке кода

  1. $.post('/reactions/add', requestData, function (result) {
  2. clickedReaction.removeClass('is-busy');
  3.  
  4. if (result.error) {
  5. alert(result.message); // Выводим сообщение об ошибке
  6. } else {
  7. // Обновляем счетчики для всех реакций
  8. updateReactionsCounters(clickedReaction.closest('.content_reactions'), result.counters);
  9. // Если предыдущая реакция была удалена, убираем выделение
  10. if (result.previous_reaction_type === reactionType) {
  11. clickedReaction.removeClass('selected');
  12. // Запускаем конфетти при удалении реакции
  13. confetti({
  14. particleCount: 100,
  15. spread: 70,
  16. origin: { y: 0.6 }
  17. });
  18. } else {
  19. // Выделяем новую реакцию
  20. clickedReaction.closest('.content_reactions').find('.reaction').removeClass('selected');
  21. clickedReaction.addClass('selected');
  22. // Запускаем конфетти при добавлении реакции
  23. confetti({
  24. particleCount: 100,
  25. spread: 70,
  26. origin: { y: 0.6 }
  27. });
  28. }
  29. }
  30. }, 'json');
0
Pawell Pawell 9 дней назад #

Сделал. Компонент не выводится и подгрузка пропала. 

0
Foxman23 Foxman23 9 дней назад #

Ну, тогда здесь надо думать, так сразу ничего не скажу. Какой говорите компонент конфликтует? Он где-то есть чтобы посмотреть на него? Или сайт, в консоль заглянуть

0
maxisoft maxisoft 9 дней назад #

чтобы решить проблему нужно видеть что выводиться в косоле dev-tools. Проверял на работе шаблона с ias подгрузкой, все работает нормально. Поэтому нужно смотреть не посредственно на вашем сайте.

0
Pawell Pawell 8 дней назад #

Создатель компонента видела сайт. Может поможет при обновлении компонента.

0
Foxman23 Foxman23 8 дней назад #

Да, видела. У вас очень-очень древний шаблон) Я вот честно не знаю, что с этим можно придумать....

0
Shuma Shuma 8 дней назад #

А почему вылезает ошибка Ошибка загрузки исходных карт?

Изображение

0
Foxman23 Foxman23 8 дней назад #

Это указывает на то что браузер пытался загрузить файл исходной карты (source map), который обычно используется для отладки минифицированного или скомпилированного кода. К моему компоненту это никак не относится.

0
Shuma Shuma 8 дней назад #

Хм, интересно. Появилось это после установки компонента. При отключении компонента ошибка исчезает

0
Foxman23 Foxman23 7 дней назад #

Вы можете проверить здесь — reactions.7oz.ru/news/8-investicii-dlja-chainikov-kuda-vkladyvat.html подобных ошибок я не наблюдаю. Вообще — эта ошибка не критична и никак не влияет на работу сайта. Но, если вы уверены, что это вызвал мой компонент, то можете написать мне в ЛС и дать ссылку на ваш сайт — так, по скриншотам что-то сложно сказать.

0
CEH9I CEH9I 8 дней назад #

При удалении компонента из списка компонентов, не удаляется таблица в БД и повторная установка дает ошибку Изображение

При установке версии 1.0.1 версия отображается 1.0.0 Изображение

После установки не показывает в «Каталоге дополнений» что компонент установлен 
Изображение

0
CEH9I CEH9I 8 дней назад #

Прописал в таблице БД вот так и все ок стало отображаться, но нужно вам подправить

Изображение

0
CEH9I CEH9I 8 дней назад #

В общем я хз, ничего не работает
Изображение
Изображение

Изображение


Изображение

События обновлены, файлы все подключились, сыроват компонент конечно.

Изображение

Изображение

0
Foxman23 Foxman23 8 дней назад #

Да, спасибо, сегодня будет обновление по всем собранным замечаниям

Еще от автора

Проверка сложности пароля перед регистрацией
Написала небольшое дополнение, которое в момент регистрации показывает пользователю сложность его используемого пароля.
Виджет "Конструктор модальных окон"
Конструктор модальных окон — функциональный виджет, который позволяет создавать на сайте модальные окна с различным содержимым и управлять их поведени
Виджет "Гонка пользователей"
Дополнительный виджет для компонента «Пользователи», позволяющий выводить юзеров в виде прогресс-бара, устраивая соревновательный эффект.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.