Продолжаем совершенствовать наш движек. Сегодня расскажу как сделать блок последних комментариев для 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> о товаре &laquo;<a href="products/{$comment->url}" class="underline">{$comment->product}</a>&raquo;:
                            <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}

Вот и все волшебство. Как обычно данные по благодарности справа — заранее благодарен 🙂

Опубликовать в Яндекс
Опубликовать в Facebook
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в LiveJournal
Опубликовать в Google Plus
Опубликовать в Google Buzz