easyComm 1.7.0. Расширенный рейтинг

В версии 1.7.0 я добавил возможность отобразить подробную информацию об оценках, которые ставили пользователи.



Подобный вывод можно увидеть на других сайтах, например Алиэкспресс или Вайлдберриз.

Собственно было добавлено поле votes к объекту ecThread, где хранится кол-во голосов с той или иной оценкой. Данные хранятся в формате json.

Обновления данных идет в момент создания/редактирования/удаления сообщений (ecMessages), привязанных к цепочке.

Т.к. на очень большом количестве сайтов компонент уже установлен, а соответствующих данных в базе нет, то пришлось позаботиться о том, что бы все корректно работало. Поэтому при вывозе сниппета ecThreadRating идет проверка, что данные по голосам имеются, иначе они пересчитываются и заносятся в базу. Таким образом, для того, чтобы заполнить поле votes на ваших сайтах ничего делать не нужно.

Чтобы отобразить у себя на сайте такую панель, вам потребуется вызвать уже знакомый сниппет ecThreadRating с параметром tpl, где указать специальный чанк.

Родной парсер MODX:
[[!ecThreadRating? &tpl=`tpl.ecThreadDetailedRating`]]

Парсер Fenom:
{'!ecThreadRating' | snippet : ["tpl" => "tpl.ecThreadDetailedRating"]}

Чанк tpl.ecThreadDetailedRating появился в новой версии пакета.

Так же, произошли изменения в файле стилей /assets/components/easycomm/css/web/ec.default.css, туда добавились новые css классы для отображения всего этого. Если вы делали копию файла и вносили туда изменения — не забудьте про это.
Наумов Алексей
26 декабря 2018, 15:03
modx.pro
3
1 724
+15

Комментарии: 8

Иван Бондаренко
30 декабря 2018, 18:53
0
Здравствуйте Алексей. Начал пользоваться вашим компонентом для одного из сайтов. Предложение по функционалу: сделайте так, чтобы обзор сохранялся в сессию или куда нибудь еще пока он не опубликован. Своеобразный черновик. Все таки пользователи часто пишут отзывы прямо на сайте и весь труд пользователя может быть легко потерян без таких черновиков. Это плюс к юзабилити сайта.
    Наумов Алексей
    09 января 2019, 09:15
    +1
    Имеется ввиду сохранять текст, который набирает пользователь, чтобы при закрытии и последующем открытии окна браузера он сохранялся?
      Иван Бондаренко
      09 января 2019, 10:54
      0
      Да. Имею в виду это. Просто сам недавно писал отзыв на своем сайте из фронта. Написал слов 200 а потом полез на другие вкладки в браузере за дополнительной информацией. Чуть случайно не закрыл окно, где печатал :) Понимаю, что такой функционал не в приоритете, но будет плюсом к юзабилити.
    Konstantin
    04 января 2019, 18:57
    0
    А у меня сниппет ecMessages работает странно.
    вызываю одинакого в двух местах:
    {'!ecMessages' | snippet : [
        'limit' => '50',
        'tpl' => 'tpl.ecMessages.Prod',
    ]}
    в одном месте работает как надо и выводит отзывы, а в другом ничего не выводит.
    С ShowLog выводит это:
    0.0000279: pdoTools loaded
    0.0014160: Conditions prepared
    0.0000100: Query parameters ready
    0.0000069: xPDO query object created
    0.0000360: innerJoined ecThread as Thread
    0.0000122: Added selection of ecMessage: `id`, `thread`, `subject`, `date`, `user_name`, `user_email`, `user_contacts`, `text`, `reply_author`, `reply_text`, `notify`, `notify_date`, `ip`, `rating`, `createdon`, `createdby`, `editedon`, `editedby`, `published`, `publishedon`, `publishedby`, `deleted`, `deletedon`, `deletedby`, `extended`
    0.0000050: Added selection of ecThread: `Thread`.`id` AS `thread_id`, `Thread`.`resource` AS `thread_resource`, `Thread`.`name` AS `thread_name`, `Thread`.`title` AS `thread_title`, `Thread`.`message_last` AS `thread_message_last`, `Thread`.`message_last_date` AS `thread_message_last_date`, `Thread`.`count` AS `thread_count`, `Thread`.`votes` AS `thread_votes`, `Thread`.`rating_simple` AS `thread_rating_simple`, `Thread`.`rating_wilson` AS `thread_rating_wilson`, `Thread`.`properties` AS `thread_properties`, `Thread`.`extended` AS `thread_extended`
    0.0000370: Added where condition: `Thread`.`name`=resource-2645, ecMessage.published=1, ecMessage.deleted=0
    0.0000150: Sorted by ecMessage.date, DESC
    0.0000010: Limited to 5, offset 0
    0.0001280: SQL prepared "SELECT `ecMessage`.`id`, `ecMessage`.`thread`, `ecMessage`.`subject`, `ecMessage`.`date`, `ecMessage`.`user_name`, `ecMessage`.`user_email`, `ecMessage`.`user_contacts`, `ecMessage`.`text`, `ecMessage`.`reply_author`, `ecMessage`.`reply_text`, `ecMessage`.`notify`, `ecMessage`.`notify_date`, `ecMessage`.`ip`, `ecMessage`.`rating`, `ecMessage`.`createdon`, `ecMessage`.`createdby`, `ecMessage`.`editedon`, `ecMessage`.`editedby`, `ecMessage`.`published`, `ecMessage`.`publishedon`, `ecMessage`.`publishedby`, `ecMessage`.`deleted`, `ecMessage`.`deletedon`, `ecMessage`.`deletedby`, `ecMessage`.`extended`, `Thread`.`id` AS `thread_id`, `Thread`.`resource` AS `thread_resource`, `Thread`.`name` AS `thread_name`, `Thread`.`title` AS `thread_title`, `Thread`.`message_last` AS `thread_message_last`, `Thread`.`message_last_date` AS `thread_message_last_date`, `Thread`.`count` AS `thread_count`, `Thread`.`votes` AS `thread_votes`, `Thread`.`rating_simple` AS `thread_rating_simple`, `Thread`.`rating_wilson` AS `thread_rating_wilson`, `Thread`.`properties` AS `thread_properties`, `Thread`.`extended` AS `thread_extended` FROM `modx_ec_messages` AS `ecMessage` JOIN `modx_ec_threads` `Thread` ON `ecMessage`.`thread` = `Thread`.`id` WHERE  ( `Thread`.`name` = 'resource-2645' AND `ecMessage`.`published` = 1 AND `ecMessage`.`deleted` = 0 )  ORDER BY ecMessage.date DESC LIMIT 5 "
    0.0004301: SQL executed
    0.0000029: Rows fetched
    0.0000031: Returning raw data
    0.0023220: Total time
    10 485 760: Memory usage
    Что это может быть?
      Наумов Алексей
      09 января 2019, 09:14
      +1
      убедитесь, что thread верный указан во втором месте… отзывы привязаны к ресурсам!
        Konstantin
        09 января 2019, 14:24
        0
        Вообще не был указан :-). Спасибо
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8