Система комменитрования для вашего компонента
Сегодня я расскажу как подключить система комментирования к своему компоненту. Я не буду рассказывать весь процесс создания компонента для 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 } ?>