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

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