Finar.ru
web.finar.ru
video.finar.ru
Темы для BootstrapNew!

Рейтинг статьи в виде звездочек для NetCat

Автор: Люди, дата: 2011-02-08, просмотров 10380
Тэги

Версия NetCat: любая, рекомендуется с поддержкой шаблонов компонентов, редакция любая
Статус: стабильный
Стоимость внедрения 4000 руб.

Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.

Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.

Welcome!

Дата обновления 2011-02-09

Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!

К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.

Источники: www.fyneworks.com 
Внедрения

Лицензия и политика использования

Разработчикам сайтов:

Рецепт распространяется под лицензией Creative Commons Share Alike (BY-SA) .

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

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

Если вам понравился наш рецепт и вы хотите поблагодарить нас, вы можете сделать это следующими способами:

  1. доработать и улучшить рецепт и выслать нам обновление;
  2. прислать нам на web@finar.ru ссылку на внедрение (возможно, она появится в списке внедрений);
  3. на странице вашего сайта поставить ссылку на эту страницу;
  4. поблагодарить нас рублем, переслав любую сумму на наши электронные счета.

Есть идеи по сотрудничеству? Пишите: web@finar.ru

Владельцам сайтов:

Этот рецепт можно установить и на ваш сайт. Внедрение производится после 100% предоплаты. Указана стоимость без учета работ по дизайну, каких-либо индивидуальных доработок и при оплате электронными деньгами. Работоспособность гарантирована. Если по каким-либо причинам рецепт не удается установить на ваш сайт, мы возвращаем все деньги.

Быстрее всего заказать внедрение, отправив нам на web@finar.ru письмо с указанием данных произведенного по реквизитам платежа, адреса целевого сайта и доступов в админку и на FTP. Более медленные способы начинаются с письма в свободной форме или с телефонного звонка.

Welcome!


Внимание: описание и код рецепта на этой странице могут быть актуальнее архива для скачивания!

К сожалению, пока мы не имеем возможности поддерживать актуальные версии готовых к установке архивов рецептов. Архивы обновляются "при случае", т.е. при существенных доработках, дата обновления прописана в имени архива.

Скачать:

ФайлОписание
NetCat-StarRating_2011-02-09.zip (скачиваний: 269)первая версия от студии Ph&Ph. Официальная, на ней основан рецепт
AlterFall-jqueryRating_2011-12-10.rar
(скачиваний 9)
AlterFall-jqueryRating_2012-01-07.rar (скачиваний: 322)
версия Александра Панасина  отличается подсчетом среднего арифметического значения и работой в актуальных версиях NetCat. Инструкции по установке внутри архива.

Этот рецепт описывает интеграцию jQuery Star Rating  в NetCat. В результате к статье (объекту) будут прикручены звездочки, вот такие: , причем в листинге объектов они будут исключительно информативными (отражать текущий рейтинг статьи), а в полном отображении объекта - динамичными. Авторизованный пользователь получит возможность проголосовать один раз, просто наведя мышь и кликнув на звездочку.

Установка и использование

Скачайте архив и закачайте директорию "phph-StarRating" в /images/ инсталляции NetCat на вашем хостинге. Альтернативно, можете скачать актуальную версию плагина с официального сайта.

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

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>
<!-- phph-star-rating -->
<script src='/images/phph-StarRating/jquery.rating.js' type='text/javascript' language='javascript'></script>
<link href='/images/phph-StarRating/jquery.rating.css' type='text/css' rel='stylesheet'/>
<!-- /phph-star-rating -->

Обратите внимание, что основная библиотека jQuery берется с googleapis.com, а не из архива со скриптом. Это сделано для совместимости с другими jQuery-скриптами, которые могут использоваться на сайте. Та версия, плагина, которую можно скачать у нас, работает с данной версией jQuery - проверено.

Также обратите внимание, что вызов собственно jquery.rating.js происходит сразу после вызова библиотеки jQuery. Если вслед за этим в вашем коде будет произведен еще один вызов библиотеки jQuery, плагин не сработает.

Теперь импортируйте компонент, создайте на сайте скрытый раздел "Рейтинг объектов", прикрепите к нему компонент.

Теперь рейтинг можно вызывать из "объекта в списке" или "полного отображения объекта" компонента с комментируемым контентом примерно следующим кодом:

<!--Вызов рейтинга в листинге объектов. Рейтинг выводится в режиме "только чтение"-->
".s_list_class(102, 164, "&nc_ctpl=117&scID=$f_Sub_Class_ID&objID=$f_RowID&userID=$f_UserID&backlink=".urlencode(htmlspecialchars($GLOBALS[client_url]))."", true)."

Здесь 102 - номер скрытого раздела сайта с компонентом Голосование; 164 - номер его компонента, 117 - номер шаблона представления компонента "Только результаты".

<!--Вызов рейтинга в полном выводе объекта. Визуализируется текущий рейтинг материала, авторизованный пользователь имеет возможность проголосовать, но только один раз. -->
".( $AUTH_USER_ID && listQuery("SELECT Message_ID FROM Message111 WHERE Object_ID=$f_RowID AND Object_Sub_Class_ID=$cc AND User_ID=".$current_user['User_ID']."","\$data[Message_ID]")==0 ?
"

".s_list_class(102, 164, "&scID=$cc&objID=$f_RowID&userID=$f_UserID&backlink=".urlencode(htmlspecialchars($GLOBALS[client_url]))."", true)." "
:
"

".s_list_class(102, 164, "&nc_ctpl=117&scID=$cc&objID=$f_RowID&userID=$f_UserID&backlink=".urlencode(htmlspecialchars($GLOBALS[client_url]))."", true)."
"
)."

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

Полезные куски кода (раскладка компонента):

Создайте новый компонент, взяв за основу Рейтинг объектов . Подключение рейтинга осуществляется примерно следующими модификациями:

Шаблон представления компонента, "Только результаты":

<input class='star' type='radio' name='Rating-$scID-$objID' value='1' disabled='disabled' ".((int)$rating == "1" ? "checked='checked'" :"") ."/>
<input class='star' type='radio' name='Rating-$scID-$objID' value='2' disabled='disabled' ".((int)$rating == "2" ? "checked='checked'" :"") ."/>
<input class='star' type='radio' name='Rating-$scID-$objID' value='3' disabled='disabled' ".((int)$rating == "3" ? "checked='checked'" :"") ."/>
<input class='star' type='radio' name='Rating-$scID-$objID' value='4' disabled='disabled' ".((int)$rating == "4" ? "checked='checked'" :"") ."/>
<input class='star' type='radio' name='Rating-$scID-$objID' value='5' disabled='disabled' ".((int)$rating == "5" ? "checked='checked'" :"") ."/>
".((int)$rating == "0" ? "<span class='small gray'>нет оценок</span>" :"") ."

Сам компонент:

".($showUserWeight ? $user_rating :
  ($showWeight ? $rating :
    ($cc_settings['Rating']=="on" ? "
      <form name='adminForm' enctype='multipart/form-data' method='post' action='".$SUB_FOLDER.$HTTP_ROOT_PATH."add.php'>
        <script>
            $(function(){
             $('.auto-submit-star').rating({
              callback: function(value, link){
               // 'this' is the hidden form element holding the current value
               // 'value' is the value selected
               // 'element' points to the link element that received the click.
               // alert(\"The value selected was\");

               // To submit the form automatically:
               this.form.submit();

               // To submit the form via ajax:
               // $(this.form).ajaxSubmit();
              }
             });
            });
        </script>
      <input name='cc' value='$cc' type='hidden'>
      <input name='sub' value='$sub' type='hidden'>
      <input name='catalogue' value='$catalogue' type='hidden'>
      <input name='posting' value='1' type='hidden'>
      <input name='f_BackLink' value='$backlink' type='hidden'>
      <input name='f_Object_Sub_Class_ID' value='$scID' type='hidden'>
      <input name='f_Object_ID' value='$objID' type='hidden'>
      <input name='f_Object_Author_ID' value='$userID' type='hidden'>
      <input name='f_Object_voter_ID' value='".$current_user['User_ID']."' type='hidden'>      

      ".($current_user['User_ID'] ? "
        <input class='auto-submit-star' type='radio' name='Rating1' value='1' ".((int)$rating == "1" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='2' ".((int)$rating == "2" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='3' ".((int)$rating == "3" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='4' ".((int)$rating == "4" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='5' ".((int)$rating == "5" ? "checked='checked'" :"") ."/>
        ".((int)$rating == "0" ? "<span class='small gray'>нет оценок</span>" :"") ."

      </form>"
      : "
        <input class='auto-submit-star' type='radio' name='Rating1' value='1' disabled='disabled' ".((int)$rating == "1" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='2' disabled='disabled' ".((int)$rating == "2" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='3' disabled='disabled' ".((int)$rating == "3" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='4' disabled='disabled' ".((int)$rating == "4" ? "checked='checked'" :"") ."/>
        <input class='auto-submit-star' type='radio' name='Rating1' value='5' disabled='disabled' ".((int)$rating == "5" ? "checked='checked'" :"") ."/>
      "
      ).""
    : "")
  )
)."
".($inside_admin? "
<br><br>
$f_AdminButtons
Рейтинг: $f_Rating<br>
Номер компонента: $f_Object_Sub_Class_ID<br>
ID объекта за который голосовали: $f_Object_ID<br>
Идентификатор автора сообщений за которое голосовали: $f_Object_Author_ID<br><br>
<hr>
" : "")."
# если не нужно учитывать мнениеавтора, следует добавить к условию:
# $current_user['User_ID']!=$f_Object_Author_ID

if($current_user['User_ID']) {

  # зависимость рейтинга от типа пользователя по классу $perm
 #if($perm->isDirector() || $perm->isSupervisor) $kRating = 3;
 # if($perm->isManager()) $kRating = 2;
  # if(!$kRating) $kRating = 1;

  # зависимость рейтинга от типа пользователя по группам
    $kRating = 1;


  # проверим чтобы не голосовал до этого
  $voted = $db->get_var("SELECT Message_ID FROM Message$classID WHERE Object_ID=".(int)$f_Object_ID." AND Object_Sub_Class_ID=".(int)$f_Object_Sub_Class_ID." AND User_ID=".$current_user['User_ID']."");
 if(!$voted) {
if($Rating1 == "1") $f_Rating = $kRating * 1;
if($Rating1 == "2") $f_Rating = $kRating * 2;
if($Rating1 == "3") $f_Rating = $kRating * 3;
if($Rating1 == "4") $f_Rating = $kRating * 4;
if($Rating1 == "5") $f_Rating = $kRating * 5;
  }
  else {
    ob_end_clean();
    if($_POST[f_BackLink]) $goBackLink = $f_BackLink;
    else $goBackLink = "/";
    header("Location: $goBackLink");
    die();
  }
}
else {
  ob_end_clean();
  if($_POST[f_BackLink]) $goBackLink = $f_BackLink;
  else $goBackLink = "/";
  header("Location: $goBackLink");
  die();
}
В этом блоке от дефолта изменены только условия вида if($Rating1) -> if($Rating1 == "1")

Компонент готов.

Заметки

  • если вы хотите, как мы, избавиться от совершенно не нужного минуса перед звездочками, скачивайте наш архив, а не релиз с официального сайта. Там это как-то немного коряво, но действенно вырезано;
  • если вы хотите вернуть совершенно не нужный минус перед звездочками, скачивайте релиз с официального сайта, или поправьте файл jquery.rating.js из нашего архива поиском по "Finar".



Руслан — 2011-07-08, 16:52

а как сделать на аяксе? иам вроде заккоментена строка: // To submit the form automatically:

                // this.form.submit();

                // To submit the form via ajax:
                 $(this.form).ajaxSubmit();

переносим слеши вниз, и казаолсь будет работать ajax , но нет)

Ajax'ом, мы, к сожалению, не занимались. Хотя это, безусловно, желательный функционал.

Finar

Владимир — 2011-07-17, 20:55

Доброго времени суток! В NetCat я новичок, и много еще не понимаю. Подскажите пожалуйста, куда вставлять или что за "Шаблон представления компонента, "Только результаты""

Шаблон представления компонента "Только результаты" - это вариант вывода компонента Голосования - Рейтинг объектов, в котором звезды выводятся статично, без возможности голосования:

Finar

Владимир — 2011-07-19, 10:51

Спасибо, с шаблонами теперь все понятно, и звездочки стали выводится. Но теперь возник вопрос, как пользователь может проголосовать. На сайте в полном выводе объекта, появились radiobutton, при выборе нужного голос не фиксируется.

Боюсь, сложно что-то конкретное подсказать. Для начала убедитесь, что просто компонент "Рейтинг объекта" работает, а потом уже поэтапно дорабатывайте его по инструкциям.

Finar

Александр — 2011-10-16, 20:25

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

К сожалению сейчас в связи с катастрофической нехваткой времени, мы занимаемся чем-либо только на коммерческой основе. Вот расширим штат - и снова пустимся во все тяжкие Open Source :)

Finar.

Алексей — 2014-07-17, 11:18

Здравствуйте! Подскажите пожалуйста... почему тут "Префикс списка объектов - динамика с возможностью голосования:" для ratio name='Rating1', а не name='f_Rating'? или все правильно, я что-то не понимаю?

Добрый день! Сейчас уже сложно, конечно, вспомнить, как там все устроено, но судя по количеству просмотров данной страницы, в коде все должно быть ОК :)

Finar.

Оставить комментарий 


Ваше имя:
->