We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 593
    • 56 Posts
    Рейтинг без перезагрузки. Никто не занимался данным вопросом? может быть есть наработки?
      • 16955
      • 59 Posts
      Очень понравился вот этот - http://widgets.rabidlabs.net/ratings/v1.4/

      Только есть одна ошибка в описании вместо
      <?php require_once("ratings.php"; $rr = new RabidRatings(); ?>
      надо писать
      <?php require_once("ratings.php"); $rr = new RabidRatings(); ?>
      , т.е. не закрыта одна скобка.

      Из минусов - не работает в ИЕ6

      Пробовал и другие, описанные в ветке http://modxcms.com/forums/index.php/topic,5489.0.html

      В итоге - оставил вторую версию CSS Star
        • 593
        • 56 Posts
        Немного пошаманил и получил следующее решение для реализации голосования через star_rating.
        у меня версия 2beta.

        для начала нужно на странице где будет голосование подключить библиотеку mootools для этого где-нибудь d теге <head></head> нужно вставить строчку:
        <script type="text/javascript" src="http://www.domain.ru/manager/media/script/mootools/mootools.js"></script>

        и файл с функцией, предварительно исправив url до страницы с вызовом сниппета (о ней пойдет речь ниже) и путь до изображения, которое будет появляться во время выполнения запроса и оповещать пользователя о том, что выполняется запрос, собсно:
        <script type="text/javascript" src="/star.js"></script>

        Файл star.js:
        function aj_test(par1, par2, par3){
        
        new Fx.Style(''+ par2, 'opacity').set(0);
        $(par2 + '_spinner').setStyle('background',  'url(http://www.domain.ru/images/spinner.gif) no-repeat 60px center');
        
        new Ajax(' http://www.domain.ru/14',
        {
                     method: 'get',
                     update: '' + par2, data: 'vote=' + par1 + '& pid=' + par2 + '& tv=' + par3,
                     onComplete: function()
                                  {
        
        		                       new Fx.Style(''+ par2, 'opacity').set(1);
                                   $(par2 + '_spinner').setStyle('background',  'none');
        
        }
        
                             }).request();
        
        }
        


        1) в шаболне или чанке где вызывается сниппет star_rating нужно заключить этот вызов в два дива с уникальными id (нужно для ajax скрипта)
        у меня так:
        <div id="[+id+]_spinner" >
        <div id="[+id+]">
        [[star_rating? &docID=`[+id+]` &useCookies=`true` &onevote=`true` &starTpl=`starTPL`]]
        </div>
        </div>
        

        2) создал документ в дереве док-в с пар-ми "не отображать в меню", шаблон "blank". В контентной части этого дока вызываем сам сниппет [[star_rating? &docID=`@EVAL return $_GET[’pid’];` &useCookies=`true` &onevote=`true` &starTpl=`starTPL`]]

        Эта конструкция будет использоваться, когда мы нажмем на звездочку чтоб проголосовать, js функция отправит get запрос этому документу, он вызовет скрипт, скрипт отработает и вернет рез-т, который мы подставим в страницу

        3) в файле /assets/snippets/star_rating/rating.class.php

        комментим три строчки (у меня они 125-128)
        //unset ($_GET);
        //$curURL = $modx->makeUrl($this->redirect);
        //$modx->sendRedirect($curURL);

        и меняем содержимое плэйсхолдера starRating (в районе строки 143)

        вместо этого:
        <div class='rating-bg'><ul class='star-rating'>
        																						<li class='current-rating' style='width:" . $this->imgWidth * $this->_templateVarMeta['average'] . "px;'>" . $this->_lang['current_1'] . round($this->_templateVarMeta['average'], 1) . $this->_lang['current_2'] . "</li>
        																						<li><!---<a href='" . $modx->makeUrl($modx->documentObject['id'], '', 'vote=1&pid=' . $this->documentId . '&tv=' . $this->_tvId) . "' title='" . $this->_lang['one_star'] . "' class='one-star'>--->1<!---</a>---></li>
        																						<li><!---<a href='" . $modx->makeUrl($modx->documentObject['id'], '', 'vote=2&pid=' . $this->documentId . '&tv=' . $this->_tvId) . "' title='" . $this->_lang['two_stars'] . "' class='two-stars'>--->2<!---</a>---></li>
        																						<li><!---<a href='" . $modx->makeUrl($modx->documentObject['id'], '', 'vote=3&pid=' . $this->documentId . '&tv=' . $this->_tvId) . "' title='" . $this->_lang['three_stars'] . "' class='three-stars'>--->3<!---</a>---></li>
        																						<li><!---<a href='" . $modx->makeUrl($modx->documentObject['id'], '', 'vote=4&pid=' . $this->documentId . '&tv=' . $this->_tvId) . "' title='" . $this->_lang['four_stars'] . "' class='four-stars'>--->4<!---</a>---></li>
        																						<li><!---<a href='" . $modx->makeUrl($modx->documentObject['id'], '', 'vote=5&pid=' . $this->documentId . '&tv=' . $this->_tvId) . "' title='" . $this->_lang['five_stars'] . "' class='five-stars'>--->5<!---</a>---></li>
        																						</ul></div>
        


        вставить вот это:
        <div class='rating-bg'><ul class='star-rating'>
        																						<li class='current-rating' style='width:" . $this->imgWidth * $this->_templateVarMeta['average'] . "px;'>" . $this->_lang['current_1'] . round($this->_templateVarMeta['average'], 1) . $this->_lang['current_2'] . "</li>
        																						<li><!---<a href=\"javascript:void(0)\" onclick='aj_test(1,$this->documentId,$this->_tvId)'  title='" . $this->_lang['one_star'] . "' class='one-star'>--->1<!---</a>---></li>
        																						<li><!---<a href=\"javascript:void(0)\" onclick='aj_test(2,$this->documentId,$this->_tvId)' title='" . $this->_lang['two_stars'] . "' class='two-stars'>--->2<!---</a>---></li>
        																						<li><!---<a href=\"javascript:void(0)\" onclick='aj_test(3,$this->documentId,$this->_tvId)' title='" . $this->_lang['three_stars'] . "' class='three-stars'>--->3<!---</a>---></li>
        																						<li><!---<a href=\"javascript:void(0)\" onclick='aj_test(4,$this->documentId,$this->_tvId)' title='" . $this->_lang['four_stars'] . "' class='four-stars'>--->4<!---</a>---></li>
        																						<li><!---<a href=\"javascript:void(0)\" onclick='aj_test(5,$this->documentId,$this->_tvId)' title='" . $this->_lang['five_stars'] . "' class='five-stars'>--->5<!---</a>---></li>
        																						</ul></div>
        


        Вот вроде и все. Я не программист и больше чем уверен, что это решение кривое, но у меня оно работает и мне этого пока достаточно smiley


          • 16955
          • 59 Posts
          Quote from: afizikov at Mar 20, 2008, 06:10 AM

          Немного пошаманил и получил следующее решение для реализации голосования через star_rating.
          у меня версия 2beta.
          Вот вроде и все. Я не программист и больше чем уверен, что это решение кривое, но у меня оно работает и мне этого пока достаточно smiley

          Если не секрет - покажите в работе...