Пример добавления лайков/дизлайков для товара.

Модератор
#
Пример добавления лайков/дизлайков для товара.
В версии 6.1.1 появилась возможность ставить лайк/дизлайк за товар, информационный элемент и комментарии. Пример добавления для товара.

1. В XSL-шаблоне добавляется:

<xsl:if test="rate/node()">
   <span id="shop_item_id_{@id}" class="thumbs">
      <xsl:choose>
         <xsl:when test="/shop/siteuser_id > 0">
            <xsl:choose>
               <xsl:when test="vote/value = 1">
                  <xsl:attribute name="class">thumbs up</xsl:attribute>
               </xsl:when>
               <xsl:when test="vote/value = -1">
                  <xsl:attribute name="class">thumbs down</xsl:attribute>
               </xsl:when>
            </xsl:choose>
            <span id="shop_item_likes_{@id}"><xsl:value-of select="rate/@likes" /></span>
            <span class="inner_thumbs">
               <a onclick="return $.sendVote({@id}, 1, 'shop_item')" href="{/shop/url}?id={@id}&amp;vote=1&amp;entity_type=shop_item" alt="Нравится"></a>
               <span class="rate" id="shop_item_rate_{@id}"><xsl:value-of select="rate" /></span>
               <a onclick="return $.sendVote({@id}, 0, 'shop_item')" href="{/shop/url}?id={@id}&amp;vote=0&amp;entity_type=shop_item" alt="Не нравится"></a>
            </span>
            <span id="shop_item_dislikes_{@id}"><xsl:value-of select="rate/@dislikes" /></span>
         </xsl:when>
         <xsl:otherwise>
            <xsl:attribute name="class">thumbs inactive</xsl:attribute>
            <span id="shop_item_likes_{@id}"><xsl:value-of select="rate/@likes" /></span>
            <span class="inner_thumbs">
               <a alt="Нравится"></a>
               <span class="rate" id="shop_item_rate_{@id}"><xsl:value-of select="rate" /></span>
               <a alt="Не нравится"></a>
            </span>
            <span id="shop_item_dislikes_{@id}"><xsl:value-of select="rate/@dislikes" /></span>
         </xsl:otherwise>
      </xsl:choose>
   </span>
</xsl:if>


2. В код настроек типовой динамической страницы магазина добавляется блок:

if (!is_null(Core_Array::getGet('vote')))
{
   $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
   $entity_id = intval(Core_Array::getGet('id'));

   if ($entity_id && !is_null($oSiteuser))
   {
      $entity_type = strval(Core_Array::getGet('entity_type'));
      $vote = intval(Core_Array::getGet('vote'));

      $oObject = Vote_Controller::instance()->getVotedObject($entity_type, $entity_id);

      if (!is_null($oObject))
      {
         $oVote = $oObject->Votes->getBySiteuser_Id($oSiteuser->id);

         $vote_value = $vote ? 1 : -1;

         $deleteVote = 0;
         // Пользователь не голосовал ранее
         if (is_null($oVote))
         {
            $oVote = Core_Entity::factory('Vote');
            $oVote->siteuser_id = $oSiteuser->id;
            $oVote->value = $vote_value;

            $oObject->add($oVote);
         }
         // Пользователь голосовал ранее, но поставил противоположную оценку
         elseif ($oVote->value != $vote_value)
         {
            $oVote->value = $vote_value;
            $oVote->save();
         }
         // Пользователь голосовал ранее и поставил такую же оценку как и ранее, обнуляем его голосование, как будто он вообще не голосовал
         else
         {
            $deleteVote = 1;
            $oVote->delete();
         }

         $aVotingStatistic = Vote_Controller::instance()->getRate($entity_type, $entity_id);

         Core_Page::instance()->response
         ->body(
            json_encode(array('value' => $oVote->value, 'item' => $oObject->id, 'entity_type' => $entity_type,
               'likes' => $aVotingStatistic['likes'], 'dislikes' => $aVotingStatistic['dislikes'],
               'rate' => $aVotingStatistic['rate'], 'delete_vote' => $deleteVote)
            )
         );
      }
   }

   Core_Page::instance()->response
         ->status(200)
         ->header('Pragma', "no-cache")
         ->header('Cache-Control', "private, no-cache")
         ->header('Vary', "Accept")
         ->header('Last-Modified', gmdate('D, d M Y H:i:s', time()) . ' GMT')
         ->header('X-Powered-By', 'HostCMS')
         ->header('Content-Disposition', 'inline; filename="files.json"');

   if (strpos(Core_Array::get($_SERVER, 'HTTP_ACCEPT', ''), 'application/json') !== FALSE)
   {
      Core_Page::instance()->response->header('Content-type', 'application/json; charset=utf-8');
   }
   else
   {
      Core_Page::instance()->response
         ->header('X-Content-Type-Options', 'nosniff')
         ->header('Content-type', 'text/plain; charset=utf-8');
   }

   if(Core_Array::getRequest('_'))
   {
      Core_Page::instance()->response
         ->sendHeaders()
         ->showBody();
      exit();
   }
}


3. Стили для макета:

.thumbs, .lock {
    display: inline-block;
   /* margin-right: 5px;*/
}

span.thumbs{
    /*padding-right: 0px;*/
   font-size: 8pt;
}

.thumbs a {
    display: inline-block;
    height: 10px;
    margin-bottom: -1px;
    width: 11px;
}

.thumbs  .inner_thumbs a:first-child {
    background-image: url("/images/thumbs_gray_up.png");
}
.thumbs .inner_thumbs a:first-child  + .rate + a {
    background-image: url("/images/thumbs_gray_down.png");
}
.thumbs.up .inner_thumbs a:first-child {
    background-image: url("/images/thumbs_red_up.png");
    /*cursor: default;*/
}
.thumbs.down .inner_thumbs a:first-child  + .rate + a {
    background-image: url("/images/thumbs_red_down.png");
    /*cursor: default;*/
}
.thumbs.inactive a{
   cursor: default;
}

.thumbs span{
    padding-right: 0px;
}

span.rate{
   display: inline-block;
    font-weight: bold;
    margin: 0 10px;
   padding: 0;
}
span.inner_thumbs{
   padding: 0 5px 0 3px;
}
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Пример добавления лайков/дизлайков для товара.
А где взять эту версию 6.1.1? Для скачки доступна только 6.1.0
Email: roman.fov@gmail.com Skype: roman-fov
Модератор
#
Re: Пример добавления лайков/дизлайков для товара.
6.1.1 в бете пока: http://www.hostcms.ru/support/updates/

Для установки β-обновления необходимо создать активную константу INSTALL_BETA_UPDATE со значением true и запросить обновления в разделе "Обновления".
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Пример добавления лайков/дизлайков для товара.
alexander.egorov писал(а):
            <span class="inner_thumbs">
               <a onclick="return $.sendVote({@id}, 1, 'shop_item')" href="{/shop/url}?id={@id}&vote=1&entity_type=shop_item" alt="Нравится"></a>
               <span class="rate" id="shop_item_rate_{@id}"><xsl:value-of select="rate" /></span>
               <a onclick="return $.sendVote({@id}, 0, 'shop_item')" href="{/shop/url}?id={@id}&vote=0&entity_type=shop_item" alt="Не нравится"></a>
            </span>


Александр, а разве не нужно в этих строчках символ & заменить на &amp; - иначе система ругаться начинает...
yestravel
Модератор
#
Re: Пример добавления лайков/дизлайков для товара.
yestravel писал(а):
а разве не нужно в этих строчках символ & заменить на &amp; - иначе система ругаться начинает...

Никто ругаться не должен.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Пример добавления лайков/дизлайков для товара.
alexander.egorov писал(а):
Никто ругаться не должен.

Может и не должен, но у меня ругается, примерно так:
Предупреждение: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: EntityRef: expecting ';' in Entity, line: 84 в файле /var/www/mysite.ru/modules/xsl/processor/xslt.php (строка 39)Предупреждение: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: EntityRef: expecting ';' in Entity, line: 84 в файле /var/www/mysite.ru/modules/xsl/processor/xslt.php (строка 39)Предупреждение: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: EntityRef: expecting ';' in Entity, line: 86 в файле /var/www/mysite.ru/modules/xsl/processor/xslt.php (строка 39)Предупреждение: DOMDocument::loadXML() [<a href='domdocument.loadxml'>domdocument.loadxml</a>]: EntityRef: expecting ';' in Entity, line: 86 в файле /var/www/mysite.ru/modules/xsl/processor/xslt.php (строка 39)


Да и CSS-стили для <span> не помешали бы... Большое спасибо!
yestravel
Модератор
#
Re: Пример добавления лайков/дизлайков для товара.
Честно говоря у меня такой беды не возникает локально. Напишите в поддержку. Посмотрю.

Стили добавил.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Пример добавления лайков/дизлайков для товара.
Здравствуйте, у меня так же проблема при установке скрипта:

Предупреждение: XSLTProcessor::importStylesheet() [<a href='xsltprocessor.importstylesheet'>xsltprocessor.importstylesheet</a>]: compilation error: file /home/k/kubanrealt/info.quatrox.ru/public_html/ line 507 element if в файле /home/k/kubanrealt/info.quatrox.ru/public_html/modules/xsl/processor/xslt.php (строка 49)Предупреждение: XSLTProcessor::importStylesheet() [<a href='xsltprocessor.importstylesheet'>xsltprocessor.importstylesheet</a>]: element if only allowed within a template, variable or param в файле /home/k/kubanrealt/info.quatrox.ru/public_html/modules/xsl/processor/xslt.php (строка 49

Помогите, пожалуйста, решить.
#
Re: Пример добавления лайков/дизлайков для товара.
простите но имеем В версию 6.1.4
однако никаких лайков у нас на сайте не появилось. помогите почему их нет?
#
Re: Пример добавления лайков/дизлайков для товара.
Здравствуйте! Где необходимо изменить код, чтобы применить его к комментариям? Хочется, чтобы лайки к комментам можно было ставить. Должен ли быт пользователь авторизован, чтобы ставить лайк?
romankarkachev
Авторизация