Тема: Как прикрутить модуль «Комментарии» к новостям и брендам?
Подскажите пж-ста как прикрутить модуль «Комментарии» к новостям и брендам?
Форум ReadyScript Вопросы по разработке модулей и API системы Как прикрутить модуль «Комментарии» к новостям и брендам?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Подскажите пж-ста как прикрутить модуль «Комментарии» к новостям и брендам?
Вам для какой темы оформления?
Классическая тема адаптивная, поэтому для страницы просмотра товара, вы можете через "Веб-сайт" -> "Конструктор сайта" добавить блок с отображением комментариев к статьям, выбрав в этом блоке в настройках нужный тип комментария.. Для привязки комментариев используется свой тип комментария. Для этого нужно сделать свой модуль в котором будет класс определяющий тип комментария для брендов.
Например Вы можете посмотреть на класс:
/modules/article/model/commenttype/article.inc.php - отвечает за тип комментария к статье.
Соответственно такой класс должен быть и в Вашем модуле, только переделанный под вас.
//Классе который обрабатывает бренды id бренда записывается в следующий роут
$this->router->getCurrentRoute()->brand_id
(Посмотреть можно в файле класса /modules/catalog/front/brand.inc.php)
Соответственно маршрут должен быть catalog-front-brand для вашего класса.
Для собственного модуля почитайте вот эту статью Создаём собственный модуль.
Но по большому счёту Вам надо скопировать и переделать под себя класс типа комментария.
Попробуйте разобраться, если что-то не получится пишите.
Александр, спасибо за ответ!
Для статей все получилось. Через конструктор добавил и все заработало.
Для своего модуля как вы и описали создал класс комментарии и привязал его к модулю. В конструкторе сайта появился новый тип комментария, его можно выбрать и все корректно сохраняет. Однако блок комментариев не появляется на странице, в чем может быть дело?
Разобрался, до этого не правильно указал путь маршрутизатору
Ну отлично! Киньте пожалуйста текст с примерами файлов. Может кому пригодится, если не жалко.
<?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'];
}
Большое спасибо!
тоже +
Спасибо - человеческое.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форум ReadyScript Вопросы по разработке модулей и API системы Как прикрутить модуль «Комментарии» к новостям и брендам?