1

Тема: Как прикрутить модуль «Комментарии» к новостям и брендам?

Подскажите пж-ста как прикрутить модуль «Комментарии» к новостям и брендам?

Повысить оценку Понизить оценку

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Вам для какой темы оформления?

3

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Классическая

Повысить оценку Понизить оценку

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

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

Например Вы можете посмотреть на класс:
/modules/article/model/commenttype/article.inc.php - отвечает за тип комментария к статье.
Соответственно такой класс должен быть и в Вашем модуле, только переделанный под вас.

//Классе который обрабатывает бренды id бренда записывается в следующий роут
$this->router->getCurrentRoute()->brand_id
(Посмотреть можно в файле класса /modules/catalog/front/brand.inc.php)

Соответственно маршрут должен быть catalog-front-brand для вашего класса.

Для собственного модуля почитайте вот эту статью Создаём собственный модуль.
Но по большому счёту Вам надо скопировать и переделать под себя класс типа комментария.

Попробуйте разобраться, если что-то не получится пишите.

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Разобрались?

6

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Александр, спасибо за ответ!

Для статей все получилось. Через конструктор добавил и все заработало.

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

Повысить оценку Понизить оценку

7

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Разобрался, до этого не правильно указал путь маршрутизатору

Повысить оценку Понизить оценку

8 Отредактировано Александр (02.06.2015 19:05:41)

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Ну отлично! Киньте пожалуйста текст с примерами файлов. Может кому пригодится, если не жалко.

9 Отредактировано Amigo (04.06.2015 14:57:53)

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

<?php
/**
* ReadyScript (http://readyscript.ru)
*
* @copyright Copyright (c) ReadyScript lab. (http://readyscript.ru)
* @license http://readyscript.ru/licenseAgreement/
*/
namespace Shoplist\Model\CommentType;

/**
* Тип комментария - коментарий к статье
* @ingroup Article
*/
class Shop extends \Comments\Model\Abstracttype
{
    /**
    * Возвращает тип комментария
    */
    function getTitle()
    {
        return t('Комментарий к магазину');
    }
    
    /**
    * Возвращает ссылку на объект в административной части
    * 
    * @return string
    */
    function getAdminUrl(\Comments\Model\Orm\Comment $comment)
    {
        return \RS\Router\Manager::obj()->getAdminUrl('edit', array('id' => $comment['aid']), 'shop-ctrl');
    }    
    
    /**
    * Возвращает id товара, к которому необходимо привязать комментарий
    * 
    * @return integer
    */
    function getLinkId()
    {
        $route = \RS\Router\Manager::obj()->getCurrentRoute();
        if ($route->getId() == 'shoplist-front-view') {
            if (isset($route->shop_id)) {
                return $route->shop_id;
            }
        }
        return false;
    }
    
        /**
    * Обновляет поле "рейтинг" у статьи
    * Вызывается при добавлении комментария
    */
    function onAdd(\Comments\Model\Orm\Comment $comment)
    {
        if ($comment['rate']) {
            $result = \RS\Orm\Request::make()
                ->select('SUM(rate) sum, COUNT(*) cnt')
                ->from($comment)
                ->where(array('aid' => $comment['aid'], 'type' => $comment['type']))
                ->exec()->fetchRow();
            
            $cnt = isset($result['cnt']) ? $result['cnt'] : 0;
            $rating = round( ($cnt>0) ? (isset($result['sum']) ? $result['sum'] : 0) / $cnt : 0 , 1);
            
            \RS\Orm\Request::make()
                ->update(new \Shoplist\Model\Orm\ShopItem())
                ->set(array(
                    'rating' => $rating,
                    'comments' => $cnt,
                ))
                ->where(array('id' => $comment['aid']))
                ->exec();
        }
        return true;
    }
}

Это код класса /modules/shoplist/model/commenttype/shop.inc.php

Добавил также рейтинг. Для этого класс "сеть магазинов" нужно расширить добавив 2 поля (raiting and comments). А также в ORM описании класса нужно прописать функции подсчета рейтинга.

        /**
    * Возвращает райтинг товара в процентах от 0 до 100
    * 
    * @return integer
    */
    function getRatingPercent()
    {
        return round($this['rating'] / self::MAX_RATING, 1) * 100;
    }

    /**
    * Возвращает средний балл товара
    * 
    * @return float
    */
    function getRatingBall()
    {
        return round(self::MAX_RATING * ($this->getRatingPercent() / 100), 2);
    }

    /**
    * Возвращает максимальное количество баллов, которое можно поставить данному товару
    * 
    * @return integer
    */
    function getMaxBall()
    {
        return self::MAX_RATING;
    }

    /**
    * Возврщает количество комментариев
    * 
    * @return integer
    */
    function getCommentsNum()
    {
        return (int) $this['comments'];
    }

Повысить оценку +2 Понизить оценку

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Большое спасибо!

11

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

тоже +
Спасибо - человеческое.

Повысить оценку Понизить оценку

12

Re: Как прикрутить модуль «Комментарии» к новостям и брендам?

Не за что)

Повысить оценку Понизить оценку