Сегодня я расскажу как подключить система комментирования к своему компоненту. Я не буду рассказывать весь процесс создания компонента для InstantCMS 2, для этого вы можете посмотреть видео или прочитать документацию

Система комменитрования для вашего компонента

Сегодня я расскажу как подключить система комментирования к своему компоненту. Я не буду рассказывать весь процесс создания компонента для InstantCMS 2, для этого вы можете посмотреть видео или прочитать документацию. Этот пост для тех кто уже создал свой компонент и теперь хочет подключить систему комментирование.

Итак, вы создали свой компонент и у вас уже имеется файл model.php и frontend.php или же в папку actions создали файлы с экшенами, мне лично удобно использовать файл frontend.php

Допустим вы создали компонент shop (магазин) и там есть экшен view (для просмотр конкретного товара) на этой странице нужно выводить систему комментирования.

Для начало в frontend.php или в actoins/view.php подключим виджет комментарий:

$comments_controller = cmsCore::getController('comments', new cmsRequest(array(
    'target_controller' => $this->name, //это имя контроллера, т.е. shop
    'target_subject' => $this->name, // тоже пишем shop так как это для типов контента
    'target_id' => $id // ID товара, нужен что бы найти комменты данного товара
), cmsRequest::CTX_INTERNAL));
$comments_widget = $comments_controller->getWidget();

Так как вы поняли, $this->name - это имя компонента, в нашем случаи shop а $id - это ID данного товара, допустим мы зашли по адресу: http://site.ru/shop/view/14

Здесь SQL запрос для получение комментов будет таким

SELECT * FROM cms_comments WHERE 
'target_controller' = 'shop' 
AND 'target_subject' = 'shop' 
AND 'target_id' = 14

Надеюсь SQL запрос помог вам понять, что мы пытались сделать в коде, который я написал выше. Идем дальше...

Теперь когда мы получили в переменную $comments_widget виджет комментария, нам надо передать ее в шаблон с помощью $template->render

$template->render('view', array(
    'items' => $items, //данные из БД, имя переменной у вас может быть другая
    'comments_widget' => $comments_widget
));

Далее в model.php создаем две функции, которые вернет заголовок и URL комментируемой страницы, а второй обновляет количество коммента.

Первая функция нужна, что бы обновить количество комментарий в записи, который комментируется. Для этого вы должны создать поле comments в своем таблице.

После того как создали поле в своем таблице, откроем файл model.php и добавляем код:

public function updateCommentsCount($ctype_name, $id, $comments_count){
    return $this->update('ИМЯ ВАШЕ ТАБЛИЦЫ', $id, array('comments' => $comments_count));
}

Тут нечего не стоить изменить, кроме ИМЯ ВАШЕ ТАБЛИЦЫ, остальное система сама сделает, определить количество комментарии в записи и обновить.

Вторая функция должна вернуть Заголовок и URL записи, для этого вставьте код в model.php

public function getTargetItemInfo($ctype_name, $id){
    if (!$id){ return false; }
    $item = $this->getItemById('ВАША_ТАБЛИЦА', $id);
    return array(
        'url' => '/shop/view/'.$id,
        'title' => $item['title'],
        'is_private' => 0 //для версии выше 2.2.0 необходимо
    );
}

Здесь мы получаем данные из БД по ID а потом в массив, записываем URL и Заголовок, это необходима что бы в виджетах или на странице Комментарий выводилась заголовок, а при нажатии мы переходили на страницу записи.

Теперь всё готово и нам надо просто подключить Систему комментирование к шаблону, своего компонента. Для этого откроем файл в котором должна выводиться комментарий и форма, например: /template/controllers/Ваш-компонент/view.tpl.php и в самом внизу добавим:

<?php if (!empty($comments_widget)){ ?><?php echo $comments_widget; ?><?php } ?>
Нравится
Не нравится
RSS
Нет комментариев. Ваш будет первым!
Загрузка...

Новые комментарии

Без доработки кода не получиться это сделать
АлександрЛента событий 2 дня назад
Добрый день! Не подскажите как сделать Чтоб по умолчанию событие "Постить в стену" было включено т....
Обновите шаблон до 2.7
Здравствуйте! После установки шаблона проблема с биллингом - не выводятся системные сообщения "вам ...
Здравствуйте, на 2.9 еще не тестировал, чуть позже отвечу
Здравствуйте, сейчас при получение подарка, можно выводить в виде стикера на аватарке, на несколько ...
Возможно ли использование компонента, в виде выдачи наград: VIP-пользователь и т.п.? То есть чтобы п...
ИльяМультиязычность для InstanCMS 2.5 6 дней назад
2.9.0 что то не работает, идет прогрузка содержимого, во всех разделах и так ничего и не находит
ЮрийБесплатный шаблон для InstantCMS2 7 дней назад
Спасибо за ответ! Проблема решилась сама собой. Видимо, кэш мешал. Теперь проблема с добавлением фо...
Здравствуйте, не должна пропадать, можно ссылку на сайт?

Кошелек для оплаты

WebMoney: R380642925354 | Z170841179282

Яндекс деньги: 410012099984285

Qiwi: +79269354436

Счет сбербанк: 40817810640001679889

* если после оплаты товар не получили, проверьте папку Спам