Simpla 2.1: последние комментарии
Дата: 16 Авг ' 12 Автор: mart Рубрики: Программирование
Продолжаем совершенствовать наш движек. Сегодня расскажу как сделать блок последних комментариев для Simpla CMS. сделаем этот код в виде плагина, чтобы можно было выводить в разных местах нашего магазина.
Первым шагом будет написание кода самого плагина. Для этого в файле view/View.php примерно на 92 строке находим комментарий
92 | // Настраиваем плагины для смарти |
И сразу после него активируем наш будущий плагин кодом
92 | $this->design->smarty->registerPlugin("function", "get_comments", array($this, 'get_comments_plugin')); |
Вносим правки в API системы api/Comments.php, чтобы получить цель комментария после
38 | $approved_filter = ''; |
вставляем следующий код
40 41 42 43 44 45 46 47 48 49 50 51 52 53 | $approved_filter = ''; $products_fields = ''; $products_join = ''; if(!empty($filter['type'])) if($filter['type'] == 'product') { $products_fields = ', p.url, p.name product'; $products_join = 'INNER JOIN __products p ON c.object_id=p.id'; } elseif($filter['type'] == 'blog') { $products_fields = ', b.url, b.name product'; $products_join = 'INNER JOIN __blog b ON c.object_id=b.id'; } |
И теперь внесем скорректиректрованные данные в запрос. Ниже в запросе исправим
86 | FROM __comments c WHERE |
на
86 | $products_fields FROM __comments c $products_join WHERE |
Регистрацию плагина сделали, теперь надо написать его тело. Для этого примерно в 118-119 строке перед телом плагина вывода последних новостей
119 | $this->design->smarty->registerPlugin("function", "get_comments", array($this, 'get_comments_plugin')); |
Добавляем наш плагин
119 120 121 122 123 124 125 | public function get_comments_plugin($params, &$smarty) { if(!isset($params['approved'])) $params['approved'] = 1; if(!empty($params['var'])) $smarty->assign($params['var'], $this->comments->get_comments($params)); } |
Ну и теперь непосредственно сам вызов в любом месте шаблона этого плагина
<div class="blog"> {get_comments var=last_comments limit=5 type='product'} <h3><a href="{$config->root_url}/reviews" class="underline" title="Все отзывы">Читать все отзывы</a></h3> <ul role="navigation" class="response"> {foreach $last_comments as $comment} <li> <p><b>{$comment->name}</b> о товаре «<a href="products/{$comment->url}" class="underline">{$comment->product}</a>»: <q>{$comment->text}</q></p> </li> {/foreach} </ul> </div> |
Стоит отметить, что можно использовать разные варианты вывода, например отзывы по конкретному товару
{get_comments var=last_comments limit=5 type='product' object_id=13} |
Отзывы по продуктам
{get_comments var=last_comments limit=5 type='product'} |
Отзывы по новостям
{get_comments var=last_comments limit=5 type='blog'} |
Или же вообще все отзывы на сайте
{get_comments var=last_comments limit=5} |
Вот и все волшебство. Как обычно данные по благодарности справа — заранее благодарен 🙂
28 комментариев
-
Иван
23|Авг|2012 1По какой-то причине {$comment->product} выдает пустое значение. Не подскажете, почему так может быть?
-
23|Авг|2012
2
Варианта 2:
1. либо не конца сделали правки в api/Comments.php
2. либо при вызове плагина не указываете тип комментария (product/blog) -
Иван
23|Авг|2012 3А в api\Comments всего 2 правки, правильно я понял?
1. Добавить этот блок:
$products_join = »;
$products_fields = »;
if(!empty($filter[‘type’]))
if($filter[‘type’] == ‘product’)
{
$products_fields = ‘, p.url, p.name product’;
$products_join = ‘INNER JOIN __products p ON c.object_id=p.id’;
}
elseif($filter[‘type’] == ‘blog’)
{
$products_fields = ‘, b.url, b.name product’;
$products_join = ‘INNER JOIN __blog b ON c.object_id=b.id’;
}2. Изменить запрос FROM:
FROM __comments c $products_join WHERE
-
23|Авг|2012
4
$products_fields FROM __comments c $products_join WHERE
-
Иван
23|Авг|2012 5Все хорошо. Спасибо! Теперь стыдно, что сам не догадался..
-
Леха
27|Янв|2013 6Сделал все суперски работает, но слетела премодерация. То есть комменты отображаются сразу без проверки. Как можно это пофиксить?
-
Дмитрий
18|Июн|2013 7Сделал все по порядку..в итоге белая страница 🙁 т.е. сайт перестает отображаться
-
Дмитрий
18|Июн|2013 8забыл написать…версия 2.2.3
-
dpdp
18|Июн|2013 9А в 2.2.3 эта же конструкция работать должна или нет? Потому что у меня в 2.2.3 не показывает ссылку на товар.
Как быть, подскажите?
-
18|Июн|2013
10
Насчет 2.2.3 не могу утверждать — не ставил. На выходных попробую и если что допишу изменения для данной версии.
-
dpdp
19|Июн|2013 11Жду выходных. Спасибо, что так быстро ответили!
-
Дмитрий
22|Июн|2013 12После этих действий…комменты отображаются сразу без проверки. Помогите решить проблему…делаю откат базы- спасает на пару дней и потом слетает опять..стало происходить после вот этих действий 🙂
-
22|Июн|2013
13
Просто невероятное что-то происходит… Ничего не сохраняя в базе скрипт модифицирует данные.
Смысл откатывать базу, если у Вас не проходят модерацию комментарии. Перед тем как искать ответ — надо разобраться, что делает скрипт комментариев.
Для начала повторные комментарии по логике скрипта не модерируются, а отправляются сразу паблик. Во-вторых, модерированный или немодерированный комментарий — это значение поля 1 или 0 в базе данных, следовательно, если ВСЕ комментарии идут без модерации, значит кто-то пишет в базу это значение 1. Вышеуказанных пример ничего не пишет в эту базу, максимум, что может быть — он не проверяет это поле и выводит все комментарии. -
Дмитрий
22|Июн|2013 14Спасибо! разобрался 🙂
-
dpdp
22|Июн|2013 15В 2.2.3 так и не получилось что-то запустить, чтобы показывались к каким товарам комментарии.
И я правильно понял что вот это
__________public function get_comments_plugin($params, &$smarty)
{
if(!isset($params[‘approved’]))
$params[‘approved’] = 1;
if(!empty($params[‘var’]))
$smarty->assign($params[‘var’], $this->comments->get_comments($params));
}
__________Добавляется в view/View.php?
-
dpdp
12|Июл|2013 16Mart, так и зависла эта проблема. Может поможете? Спасибо огромное!
-
Виталий
20|Апр|2014 17Simpla 2.2.4 все работает, только автор неточно описал процесс вставки кода
файл view/View.php
добавляем после
/**
*
* Плагины для смарти
*
*/public function get_comments_plugin($params, &$smarty)
{
if(!isset($params[‘approved’]))
$params[‘approved’] = 1;
if(!empty($params[‘var’]))
$smarty->assign($params[‘var’], $this->comments->get_comments($params));
} -
Дмитрий
24|Сен|2014 18Добрый день! Этот код будет работать на версии Simpla 2.3.5?
-
26|Мар|2015
19
Возможны изменения в строках. Но в целом на всей второй ветке Симплы будет работать.
-
Vlad
11|Ноя|2014 20подскажите как сделать пагинацию с помощью стандартного pagination.tpl
(2.3.5) -
26|Мар|2015
21
Необходимо расширять модуль по приципу блога для приема параметров страницы. В занной статье этот момент не рассматривался.
-
Айдын
13|Фев|2015 22А что должно происходить при нажатии на «Читать все отзывы»?
Мне выдает — такая страница не найдена -
26|Мар|2015
23
В .htaccess в корне сайта необходимо добавить правило переадресации.
-
Серый
28|Июл|2015 24Спасибо огромное за статью, спасла меня!)
-
DarAmal
25|Авг|2015 25Спасибо за доработку. Один вопрос.
Каким образом можно добавить к отзыву картинку товара, например рядом с загаловком?
Спасибо большое! -
Дмитрий
04|Ноя|2015 26Подскажите, как вывести все комментарии на одной странице?
-
Павел
28|Мар|2017 27на версии 2.3.7 не выводит комментарии, просто пустой блок и кнопка «читать все комментарии»
все сделал четко по инструкции. -
16|Апр|2017
28
К сожалению я уже не слежу за обновлениями Симплы — вам больше смогут помочь на форуме. Извините…