We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 39706
    • 34 Posts
    Решил использовать этот модуль для голосования в Gallery, до этого был самописный компонент. Всё гуд, кроме того, что у мя был реализован механиз выставления rank'а (есть такое поле в gallery_album_items) при каждом голосовании, чтобы не создавать всякие tv, а использовать уже имеющиеся инструменты ротации. Можно как-то прикрутить мой код, не влезая внутрь модуля? В кач-ве хука или еще как...

    Можно было бы использовать &rating=`type=2,column=rank`, если бы такое значение у column было допустимым. хоть и вставлялась бы сумма, но для ранжирования всё равно подходит, чем больше, тем выше

    Если бы вставлялась сумма, то было бы еще лучше, т.к. можно было бы использовать это поле для вывода всех с учетом ранка [ed. note: diegos last edited this post 14 years, 1 month ago.]
      • 31246 ☆ A M B ☆
      • 428 Posts
      Приветствую,
      К сожелению в параметре rating значение type=2 пишет только в ресурс и значение column имеет только приоритет названий longtitle, description, introtext, properties

      Вы можете создать свой плагин или изменить likeDislikePlugin код в событии OnlikeDislikeSave на свой, придерживаясь правил передачи значений.
      Вернее оставить синтаксис вызова &rating=`type=2,column=properties` а в плагине изменить код на свой. т.е. писать в Gallery в поле ранк. целое число баланса или как вам нужно.

      Вообще, в следующей версии сделаю type=3 - кустом. где вы сами сможете управлять записями как вам удобно.
        Valentin Rasulov - Industrial design (Hobbies - Web Development)
        Development not standard projects on CMF MODx Revolution.
        Small sample of extensions
        • 39706
        • 34 Posts
        Мне не обязательно использовать &rating, т.к. все нужные данные уже передаются, поле name в БД получается, к примеру, таким GalleryItem10::91455537::Ювентус, где 10 - это айди категории (т.е. intval'ом могу спокойно вытащить), а 91455537 айди фотки.
        Только никак не пойму как впихнуть мой код в плагин или как там впихнуть что-то типо функции (например, set_rank($cid=10,$id=91455537), цифры понятно будут вставляться динамически). На момент выполнения моей функции можно прегматчнуть на GalleryItem.
          • 31246 ☆ A M B ☆
          • 428 Posts
          так не выйдет.
          откройте файл
          www/core/components/likedislike/processors/web/like.php
          найдите строку 125
          и замените её на
          $itemsEvents['typeRat'] = isset($arrayDR['type']) ? intval($arrayDR['type']) : 1;

          теперь создайте плагин с любым именем и повешайте на событие OnlikeDislikeSave
          при вызове снипета голосования укажите просто
          &rating=`type=3`


          Данные все которые передаются в плагин описанны здесь

          Пример плагина
          if ($modx->event->name == 'OnlikeDislikeSave') {
              $myparams = $modx->event->params;
              if($myparams['resRat'] == 3){
                  //your code
              }
          }

          $myparams - это массив данных перечисленный здесь
            Valentin Rasulov - Industrial design (Hobbies - Web Development)
            Development not standard projects on CMF MODx Revolution.
            Small sample of extensions
            • 39706
            • 34 Posts
            Вызываю сниппет в чанке так:
            [[!LikeDislike? &name=`[[+name]]` &likeId=`[[+id]]` &category=`GalleryItem[[+album_id]]` &tpl=`mini_likedislik` &rating=`type=3,res=[[+id]]`]]

            Сделал плагин:
            if ($modx->event->name == 'OnlikeDislikeSave') {
                $myparams = $modx->event->params;
                if($myparams['typeRat'] == 3){
            								$gal_id = $modx->getObject('galAlbumItem',array('item'=>$myparams['resRat'],'album'=>intval($myparams['category'])));
            								$gal_id->set('rank',$myparams['votes_balance']);
            								$gal_id->save();
                }
            }

            Но почему-то не сохраняет. А если указывать в плагине item, album и rank реальными цифрами, то все сохраняет. Где моя ошибка?
              • 39706
              • 34 Posts
              Залез в твой плагин и сделал так:
              case 3:
              $gal_id = $modx->getObject('galAlbumItem',array('item'=>$idRes));
              $gal_id->set('rank','100');
              $gal_id->save();
              break;

              Но почему-то ломается... А если вместо $idRes ставлю число (например, 61122062), то у этого элемента ставится rank = 100. Но я ведь передаю resRat (в чанке &rating=`type=3,res=[ [ +id ] ]` )
                • 31246 ☆ A M B ☆
                • 428 Posts
                &rating=`type=3,res=[[+id]]`

                параметр res не будет передовать вам значения, посмотри в документации, его там нету.
                Вам нужно просто разобрать имя (name) в плагине и получить ваш id.
                  Valentin Rasulov - Industrial design (Hobbies - Web Development)
                  Development not standard projects on CMF MODx Revolution.
                  Small sample of extensions
                  • 39706
                  • 34 Posts
                  Оказалось, что все мои данные лежат в $params['name'], так что код получился такой:
                  у меня $params['name'] был равен, к примеру, этому "GalleryItem10::91455537::Ювентус"
                  case 3:
                  $ids=explode('::',$params['name']);
                  $gal_id = $modx->getObject('galAlbumItem',array('item'=>intval($ids[1]),'album'=>preg_replace("/[^\d]/i","",$ids[0])));
                  $gal_id->set('rank',$params['votes_balance']);
                  $gal_id->save();
                  break;


                  preg_replace("/[^\d]/i","",$ids[0]) - чтобы оставить только цифры