SeeToo

Представляю Вашему вниманию, новый компонент SeeToo, который умеет строить динамичные блоки «Смотрите также».

Порядок вывода списка ресурсов, зависит от пользовательского поведения. Чем больше переходов было на определенный ресурс, тем выше в списке он будет показываться.

Видео-обзор
Страница в магазине (тут есть пример)

Основу составляет сниппет SeeTooResources, который является оберткой для pdoResources. Смысл его работы в том, что он формирует массив конфигурации для вызова pdoResources (или другого сниппета, название которого передано в параметр element), а именно:
  • подключает таблицу, в которой хранится поведение пользователей;
  • определяет использовать кеш pdoTools или нет;
  • задает сортировку по умолчанию (сортируем по количеству переходов, при одинаковых значениях дополнительно сортируем в случайном порядке);
  • задает условие, показывать неактивные записи переходов или нет;
  • указывает границу переходов, после преодоления которой, запись будет закреплена в выводе.

По поводу границы переходов

Она задается в параметре minCount и по умолчанию имеет значение 10. Что означает, сначала выводятся все записи у которых 10 и больше переходов с текущего ресурса. После этого, если не достигнут лимит вывода, выводятся случайные записи, которые удовлетворяют условиям pdoResources.

Планы на будущее

  • сделать msOrderHandler для «С этим товаром покупают» (кто разбирается, может сделать это в текущей версии компонента, главное использовать другой ключ для сохранение записей, по умолчанию ключ 'view')
  • сделать возможность включения/выключения вывода случайных ресурсов после выбранных ресурсов (реализовано в версии 1.1)
  • сделать возможность включения/выключения обратной связи, то есть, ресурс-цель, так же является ресурсом-источником, а ресурс-источник, является ресурсом-целью
Предложения по развитию можете писать в комментарии.

P.S. Извиняюсь за качество видео, если нужно будет, запишу новое.

[Обновлено] 26.01.2017

Вышла новая версия 1.1.0
Владимир Кисилица
02 июля 2016, 12:15
modx.pro
4
5 925
+15

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

Владимир
02 июля 2016, 15:51
0
Доброго дня!
Спасибо. Интересный компонент.
У меня установлен siteStatistics, у вас не было мысли его подружить с вашим компонентом? Напрашивается мысль из таблиц siteStatistics выбирать данные рейтинга, благо у меня он уже наработанный.
    Владимир Кисилица
    02 июля 2016, 16:12
    +2
    Здравствуйте!
    Такой мысли не было. Они немного отличаются по логике.
    В SeeToo просмотры считаются не для ресурса в целом, как это сделано в siteStatistics, а для связи «ресурс-источник, ресурс-цель». То есть для каждого ресурса, например статьи, будет свой уникальный список просмотренных статей.
      Владимир
      02 июля 2016, 16:27
      0
      Данные о переходах хранятся постоянно? или?
        Владимир Кисилица
        02 июля 2016, 16:30
        0
        Они хранятся постоянно, в таблице.
        Этими записями можно управлять на страницах ресурсов, куда добавляется новая вкладка, как в ms2Gallery
          Владимир
          02 июля 2016, 16:43
          0
          Ок. Куплю, интересно.
          У меня контекстов много, я могу где то запретить сбор статистики вообще? Для какого то контекста, или для варианта шаблон/категория/ и т.п.?
            Владимир Кисилица
            02 июля 2016, 16:50
            0
            Запретить можно выключив плагин «SeeToo». Запретить сбор, по какому-то условию, пока нельзя, подумаю как это можно реализовать. Ограничить вывод по шаблону, категории, можно используя стандартный функционал сниппетов группы pdoTools. Например условием:
            [[!SeeTooResource?
            	&parents=`7`
            	&where=`{"template" : 4}`
            ]]
              Владимир Кисилица
              02 июля 2016, 17:05
              0
              По каким параметрам вам нужно запретить? Например, можно сделать системную настройку, в которой указаны контексты, в которых разрешено сохранять информацию о переходах.
                Владимир
                02 июля 2016, 17:24
                0
                Контексты- обязательно. Хорошо бы в разрешенных контекстах по ID категорий не собирать ни какую информацию. Именно не собирать. Выводить то- все понятно.
                  Владимир Кисилица
                  02 июля 2016, 18:21
                  0
                  Контексты я добавлю в ближайшее время, с категориями я еще подумаю, как это лучше всего сделать, но вы вполне можете реализовать логику под себя, если умеете писать сниппеты.
                  Вся логика учета переходов выполняется в плагине SeeToo, вы можете отключить его, и написать свой плагин, который будет учитывать все ваши условия.
                    Владимир
                    02 июля 2016, 18:24
                    0
                    Да, но если какие то пожелания будут учтены, то и покупать SeeToo будет веселее)))
                    Например, исключение контекстов- ну просто обязательно хотелось бы видеть в варианте «из коробки».
        Сергей Шлоков
        02 июля 2016, 21:58
        +1
        Так о чего его дружить. Он и так дружит с pdoResources. Вот пример (в самом конце).
          Владимир
          02 июля 2016, 23:36
          0
          Да, спасибо. Видел. После смены верстки буду использовать сортировку по просмотрам постоянно. Для того и покупал siteStatistics.
          Но тут мысль возникла переключатель сделать, разный тип рейтинга статей.
        Wassi Wassinen
        02 июля 2016, 17:04
        +1
        Сколько, примерно, будет весить таблица в БД при 50.000 посещениях в день? Есть примеры веса таблицы на более-менее посещаемых сайтах?
          Владимир Кисилица
          02 июля 2016, 17:14
          +1
          Размер таблицы не зависит от количества посещений в день. Он зависит от количества ресурсов, которые учавствуют в выборке сниппета SeeTooResources. Вот скрин таблицы заполненной тестовыми данными, 50000 записей joxi.ru/823Oea1I67DGp2
            Wassi Wassinen
            02 июля 2016, 17:17
            0
            Спасибо за ответ! Куплю.
              Владимир Кисилица
              02 июля 2016, 17:18
              +1
              Скрин самой таблицы joxi.ru/Y2LjL3gFn4QV5r, поле view хранит количество переходов. Тип поля int с атрибутом UNSIGNED, то есть диапазон он 0 до 4.294.967.295, размер одного такого значения составляет 4 байта
            Евгений
            05 июля 2016, 06:15
            0
            В сниппете есть возможнось вывести список — «Вы смотрели»?
            Павел Левин
            08 июля 2016, 14:39
            0
            Видел в email рассылке от магазина, думал взять, но потом увидел некую простоту, т.е. сортировка идет чисто по переходам.
            Будет ли усовершенствование процесса сортировки/рейтинга, по мимо ручного указания явной связи. М.б. учет ключевых слов?

            Причина такого мышления:
            Если сайт состоит из статей и любая статья из любой категории корневого ресурса может быть неким образом связана с текущей, то вероятность рандомного попадания в выдачу довольно ничтожна, а пользователи за неимением лучшего, будет заходить в первые статьи, а если их всего 3-6 в выдаче?

            Вот решил подождать следующего обновления, вдруг что-то с этим решат.
              Владимир Кисилица
              09 июля 2016, 08:41
              0
              Я специально не продумывал никаких дополнительных условий. Хотя готов выслушать предложения, если народ будет за, то реализую обязательно.

              Всё делалось для того, чтобы вы могли ограничить выборку, например текущим родителем, или каким нибудь условием. Возьмем к примеру такую ситуацию. У нас в одной категории много статей разных авторов, и мы хотим ограничить показ статей текущим родителем и текущим автором. Вызов будет выглядеть так.
              [[!SeeTooResources?
              	&parents=`[[*parent]]`
              	&where=`{"createdby":"[[*createdby]]"}`
              ]]

              Возьмём другую ситуацию. У нас есть много категорий и много товаров в них, но мы не хотим ограничивать их текущим родителем, а хотим ограничить значением некого поля. Пусть это будет vendor, будем выводить товары текущего производителя.
              [[!SeeTooResources?
              	&element=`msProducts`
              	&where=`{"Data.vendor":"[[+vendor]]"}`
              ]]

              Можно использовать сортировку по полям ресурса или товара, но тогда смысл этого компонента пропадает, и для этого лучше использовать сниппеты группы pdoTools.

              Есть еще идея например половину статей выводить сортируя по переходам, половину всегда выводить случайно, в рамках условий, заданных пользователем
              Николай
              12 августа 2016, 00:57
              0
              При установке, вылезают ошибки:

              Could not load class: SeeTooResource from mysql.seetooresource.
              Could not get table name for class: 
              Could not load class: SeeTooResource from mysql.seetooresource.
              Could not get table name for class: 
              Could not load class: SeeTooResource from mysql.seetooresource.
              Could not load class: SeeTooResource from mysql.seetooresource.
              Could not get table name for class: 
              Could not load class: SeeTooResource from mysql.seetooresource.
              Дополнение не работает. Вызываю:

              [[!SeeTooResources?
                      &cache=`1`
                      &cacheTime=`3600`
                      
                      &parents=`12`
                      &limit=`3`
                      &tpl=`product`
                  ]]
              Ничего не выводится.
              Владимир
              22 декабря 2016, 21:48
              0
              Доброго дня!
              Заметил, что есть такая потребность, вынести в системные настройки айдишники ресурсов которые не должны участвовать в выборках, т.е. ресурс показывающийся при 404 (благодаря старым внешним ссылкам) очень часто у меня выскакивает, ну и вообще полезно что-то иметь возможность исключить глобально, не в параметрах сниппета, а конкретно в системных настройках, точно как имеющаяся seetoo_exclude_content_type «Список MIME типов, которые нужно исключить».
                Владимир
                22 декабря 2016, 22:38
                0
                PS и там же, в системных настройках исключать целыми категориями по id, контекствми, или по типу, например isfolder.
                  Сергей
                  23 января 2017, 13:11
                  0
                  Добрый день!
                  Подтвердите мои ожидания. Я правильно понимаю, что у любого ресурса, я могу выводить любые записи? И будут, только те, которые я захочу отобразить у данного ресурса?
                    Владимир Кисилица
                    23 января 2017, 14:15
                    0
                    Да, всё верно
                      Сергей
                      23 января 2017, 14:52
                      -3
                      Напишите простой способ вывода, почему то не ту документации у вас.
                      В таком случае выводятся не понятно по какому принципу записи, те что в админке отметил, не вывелись.
                      Надо что бы, если не отмечено не чего, то не чего бы и не выводилось.

                      [[!SeeTooResources?
                      	&tpl=`object`
                      ]]
                        Сергей
                        23 января 2017, 15:05
                        -3
                        То, что я имел ввиду я не увидел в видео, Вы обманули меня? Нету вообще в документации как вывести (точнее документации можно сказать нету, есть видео) именно те ресурсы, которые я хочу, мне не нужен рандом, нужно конкретный вывод.
                          Владимир Кисилица
                          23 января 2017, 15:45
                          +1
                          у каждого ресурса есть вкладка «SeeToo», заходите в неё и выбираете ресурсы, которые вы хотите вывести
                            Сергей
                            23 января 2017, 16:09
                            0
                            Зашел, выбрал, но по прежнему рандомные записи, кеш? Чистил.
                              Владимир Кисилица
                              23 января 2017, 17:35
                              0
                              Вызовите сниппет, с параметром &minCount=`0`. Это означает, что нужно выводить все ресурсы, у которых количество переходов больше или равно 0
                                Сергей
                                24 января 2017, 14:03
                                -5
                                Вы пьяны? Вы вообще читаете что я пишу?
                                Я вас спросил. У ресурса с id1 я могу вывести только ресурсы с id201 и id 234??? И все больше не фига не чего не хочу там выводить.
                                Вы сказали да, какого хрена не выводит или плагин не работает должным образом.
                                Он просто выводит рандомные записи. при чем тут &minCount=`0`?????
                                Где нормальная документация? В админке я поставил что мне надо вывести, но плагину вообще плевать, что я там ставлю, значит возможно надо что то в сниппете дописать, вопрос что??????????
                                По факту, если эта функция не работает, но не какой ценности вообще не вижу в этом плагине, вывести похожие записи можно и без него.

                                Жду от вас адекватного ответа, читайте пожалуйста что Вам пишут.
                                  Владимир Кисилица
                                  24 января 2017, 14:55
                                  +4
                                  Извините, но мне кажется, что я как раз адекватен. Вот сейчас вы достаточно точно описали то, чего хотите. На данный момент функции отключения случайных записей нет, о чем написано в этом топике под заголовком «Планы на будущее». Этот функционал реализован в следующей версии, которую я выпущу сегодня-завтра.

                                  Извините, что не понял вас с первого раза
                                    Владимир Кисилица
                                    24 января 2017, 19:08
                                    +1
                                    Выпущена новая версия компонента, топик с описанием изменений в процессе написания, Вы можете обновить компонент и вызвать сниппет «SeeTooResources» с параметром &useRandom=`0`, это исключит добавление случайных ресурсов. Есть еще такой нюанс, что сниппет по прежнему будет выводить ресурсы, у которых количество просмотров равно или больше, указанного числа в параметре «minCount». Рекомендую Вам использовать ниже приведенный код, для вывода всех выбранных Вами ресурсов, без учета минимального количества просмотров.

                                    [[!SeeTooResource?
                                    	&parents=`0` // или любой другой парент на Ваше усмотрение
                                    	&minCount=`0`
                                    	&useRandom=`0`
                                    	&tpl=`output` // соответственно свой чанк для вывода
                                    ]]
                                      Сергей
                                      24 января 2017, 20:30
                                      -2
                                      Наверное с этого и надо было начинать, что этого функционала нету, а не писать мне параметр, который мне бы не помог.
                                      Спасибо за обновление!
                                      Еще одни вопрос, не обратил внимания, но если я не ошибаюсь то в эту вкладку попадают сами ресурсы, если такое есть, можно как то исключить автоматическое добавление?
                                      И сделайте нормальную документацию для людей, во избежания глупых вопросов.

                                      P.S А на вас тролей, которые ставят плюсы и минусы, плевать. Вы даже мнение не можете свое выразить.
                                        Владимир Кисилица
                                        24 января 2017, 22:49
                                        0
                                        Еще одни вопрос, не обратил внимания, но если я не ошибаюсь то в эту вкладку попадают сами ресурсы, если такое есть, можно как то исключить автоматическое добавление?

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

                                        Вы хотите, создавать связи только вручную?

                                        Если да, то нужно просто выключить плагин SeeToo, я именно поэтому разделил логику на 2 плагина. Но следует учитывать, что при обновлении компонента, он снова активируется. Возможно позже я сделаю системную настройку для отключения этого плагина. Пока еще думаю как лучше сделать.
                                        Владимир Кисилица
                                        24 января 2017, 23:03
                                        0
                                        Возможно ничего делать не буду, так как всё можно сделать красиво вторым способом.

                                        Второй способ.
                                        В этой версии добавлен класс, который с помощью метода check проверяет могут ли ресурсы образовать связь, если могут, он должен вернуть true, иначе false. Вам нужно просто создать свой класс, наследовав его из базового, переопределить метод check, чтобы он всегда возвращал false и указать название своего класса в системной настройке seetoo_excluder_class
                                        Сергей
                                        30 января 2017, 22:37
                                        0
                                        Здравствуйте!
                                        Прошу прощение за задержку с ответом. Получается что ресурсы сами собой попадают на вкладку SeeToo. Как это отключить?
                                        -Вы хотите, создавать связи только вручную?
                                        Все верно!
                                        Отключить? Как? Деинсталлировать?
                                        Владимир Кисилица
                                        01 февраля 2017, 09:20
                                        0
                                        Выключите плагин SeeToo (при обновлении компонента он включится опять) или расширьте класс SeeTooExcluder (при обновлении компонента, ничего не слетит). Здесь есть примеры расширения этого класса, для Вашего случая подходит первый пример, можете его копировать.
                                        Сергей
                                        03 февраля 2017, 12:40
                                        0
                                        Спасибо. Но все ли я сделал верно.
                                        1. Создал файл core/components/seetoo/custom/excluder/SeeTooExcluder.class.php
                                        2. Вставил в него «Когда мы не хотим отключать плагин, чтобы отключить автоматическое добавление связей, так как например при обновлении он снова станет активным.»
                                        3. Зашел в системные настройки и там уже есть это

                                        Вот эти слова мне не совсем понятны «наследуем свой класс из базового класса SeeTooExcluder»
                                        Все ли я сделал или, что то забыл?
                                        Владимир Кисилица
                                        03 февраля 2017, 15:01
                                        +1
                                        файл должен содержать этот код
                                        <?php
                                        
                                        require_once(dirname(dirname(__DIR__)) . '/model/seetoo/seetooexcluder.class.php');
                                        
                                        class ExcludeAll extends SeeTooExcluder
                                        {
                                            public function check($resource_from, $resource_to)
                                            {
                                                return false;	
                                            }
                                        }

                                        и укажите в настройке seetoo_excluder_class ExcludeAll
                                        Сергей
                                        09 февраля 2017, 14:35
                                        0
                                        Если я указываю ExcludeAll Скрин То ресурсы не открываются для редактирования.
                                        Владимир Кисилица
                                        09 февраля 2017, 15:01
                                        0
                                        Скинь доступы через техподдержку, посмотрю
                            Владимир
                            23 января 2017, 15:47
                            +1
                            Привет, пользуюсь этим компонентом. В документе (ресурсе) есть вкладка SeeToo, там интерфейс управления связанными ресурсами, можно удалять\добавлять. Таким образом, с нужным ресурсом связанны только те ресурсы, которые вы туда добавите или рандомные, ели вы не редактируете содержимое этой вкладки.
                            Я автора прощу сделать список исключенных ресурсов, которые ни когда бы не добавлялись сами к списку во вкладке SeeToo, а в остальном, компонент весьма полезен.
                            Владимир Кисилица
                            23 января 2017, 16:02
                            +2
                            Несколько примеров есть на странице компонента в магазине modstore.pro/packages/utilities/seetoo, посмотрите, может Вам подойдет один из предложенных вариантов.
                        Никита
                        18 ноября 2020, 15:29
                        0
                        Добрый день! Как плагином подхватить изображения товара msProducts?
                        Пробовал сделать вывести так:

                        [[!SeeTooResources?
                        &includeThumbs=`464x464, 232x232`
                        &limit = `4`

                        &snippet=`msProducts`
                        &tpl=`lookedTpl2`
                        ]]

                        и ничего, картинки не подхватываются

                        &element=`msProducts` тоже не работает, товары вообще не выводятся
                          Никита
                          18 ноября 2020, 16:50
                          0
                          Вывел в итоге так:
                          [[!SeeTooResources?
                          &class=`msProduct`
                          &element=`msProducts`
                          &limit = `4`
                          &tpl=`lookedTpl`
                          ]]
                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                          50