JComments

Разработчикам

Введение

JComments — компонент который может быть легко интегрирован с любыми сторонними компонентами. Для этого требуется добавить всего несколько строк кода и написать простой плагин для JComments.

Плагины используются компонентом для получения информации о комментируемом объекте (имя объекта или прямая ссылка). Это необходимо потому, что сам компонент комментариев ничего не знает о комментируемых объектах и о их структуре данных. Поэтому, такие задачи, как построение ссылки на объект и получение его названия возлагаются на разработчика расширения.

Создание плагина для поддержки интеграции сторонних расширений с JComments

Плагин для JComments это обычный php-файл, содержащий класс-наследник базового класса для всех плагинов JCommentsPlugin в котором определены три метода:

  • getObjectTitle($id) — возвращает имя комментируемого объекта по ID объекта.
  • getObjectLink($id) — возвращает ссылку на комментируемый объект по ID объекта.
  • getObjectOwner($id) — возвращает идентификатор пользователя, который является автором указанного объекта.

Имя данного класса должно состоять из префикса jc_ и имени компонента, для которого этот плагин написан. Например, если плагин написан для компонента com_mycomp, класс будет называться: jc_com_mycomp.

Имя файла с плагином состоит из двух частей: первая содержит название компонента, а вторая часть имени постоянна — .plugin.php. Например, если плагин написан для компонента com_mycomp, файл плагин должен называться следующим образом: com_mycomp.plugin.php.

После того, как плагин создан его необходимо поместить в директорию плагинов JComments. В будущих версиях планируется создание небольшого инсталлятора плагинов, но в текущей версии возможна лишь ручная установка, т.е необходимо скопировать по FTP или другим способом файл с плагином в директорию: /components/com_jcomments/plugins/

Пример простейшего плагина (другие примеры можно найти в директории plugins дистрибутива компонента):

<?php
(defined('_VALID_MOS') OR defined('_JEXEC')) or die;
 
class jc_com_mycomp extends JCommentsPlugin {
 
  function getObjectTitle( $id ) {
    
    $db = & JFactory::getDBO();
    // Загрузка из базы данных имени по заданному id 
    $db->setQuery( "SELECT title FROM #__mycomp WHERE id='$id'");
    return $db->loadResult();
  }
 
  function getObjectLink( $id ) {
 
    // Значение Itemid для нашего компонента
    $_Itemid = JCommentsPlugin::getItemid( 'com_mycomp' );
 
    // создание ссылки для данного объекта по id 
    $link = JRoute::_( 'index.php?option=com_mycomp&task=view&id='. $id .'&Itemid='. $_Itemid );
    return $link;
  }
 
  function getObjectOwner( $id ) {
    
    $db = & JFactory::getDBO();
    $db->setQuery( "SELECT created_by FROM #__mycomp WHERE id='$id'");
    return $db->loadResult();
  }
}
?>

Как показать комментарии для заданного объекта

Для этого необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JComments::show. Этот метод поддерживает три обязательных параметра: ID объекта, имя компонента, и имя объекта.

  $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    echo JComments::show($id, 'com_mycomp', $title);
  }

Где $id — это идентификатор комментируемого, com_mycomp — имя компонента и $title — имя объекта.

Дополнительные примеры можно найти в разделе «Руководство по интеграции JComments в сторонние компоненты».


Как отобразить количество комментариев

Если требуется отобразить количество комментариев для любого объекта (например, в списке анонсов или краткого описания объекта), необходимо включить посредством функции include/require основной файл JComments и вызвать статический метод JCommentsModel::getCommentsCount. Этот метод поддерживает один обязательный параметр: массив условий для получения списка комментариев.

  $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    $options = array();
    $options['object_id'] = $id;
    $options['object_group'] = 'com_mycomp';
    $options['published'] = 1;
    $count = JCommentsModel::getCommentsCount($options);
    echo $count ? ('Комментарии ('. $count . ')') : 'Добавить комментарий';
  }

Где $id — это идентификатор комментируемого и com_mycomp — имя компонента. Этот код отобразит 'Комментарии (5)' в случае если 5 комментариев было опубликовано для данного объекта или надпись 'Добавить комментарий' в случае, если ни один комментарий не был опубликован.


Как отобразить последний комментарий объекта

Если требуется отобразить последний комментарий объекта, необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JCommentsModel::getLastComment. Этот метод поддерживает два обязательных параметра: ID объекта и имя компонента.

  $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    $comment = JCommentsModel::getLastComment($id, 'com_mycomp');
    echo 'Пользователь "' . $comment->name 
      . '" написал "' . $comment->comment 
      . '" ('
      . JCommentsText::formatDate($comment->date, '%d.%m.%y %H:%M')
      . ')';
  }

где $id — это идентификатор комментируемого объекта и com_mycomp — имя компонента. Этот код отобразит 'Пользователь "Администратор" написал "Это тестовый комментарий" (2007-02-07 16:52:53)'.


Как удалить все комментарии для заданного объекта

Для удаления всех комментариев заданного объекта (например, при удалении самого объекта комментирования) необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JCommentsModel::deleteComments. Этот метод поддерживает два обязательных параметра: ID объекта и имя компонента.

  $comments = JPATH_SITE . '/components/com_jcomments/jcomments.php';
  if (file_exists($comments)) {
    require_once($comments);
    JCommentsModel::deleteComments($id, 'com_mycomp');
  }

где $id — это идентификатор комментируемого объекта и com_mycomp — имя компонента. После вызова данного метода, все комментарии для указанного объекта будут удалены.


Список поддерживаемых событий для плагинов JComments

Событие Описание Параметры
onJCommentsCommentBeforeAdd Вызывается перед сохранением комментария в БД. Если обработчик события возвращает значение false, операция сохранения будет прервана. Параметр $comment содержит объект комментария.
onJCommentsCommentAfterAdd Вызывается после сохранения комментария в БД. Параметр $comment содержит объект комментария.
onJCommentsCommentBeforeDelete Вызывается перед удалением комментария из БД. Если обработчик события возвращает значение false, операция удаления будет прервана. Параметр $comment содержит объект комментария.
onJCommentsCommentAfterDelete Вызывается после удаления комментария из БД. Параметр $comment содержит объект удаленного комментария.
onJCommentsCommentBeforePublish Вызывается перед изменением статуса публикации комментария. Если обработчик события возвращает значение false, операция изменения статуса публикации будет прервана. Параметр $comment содержит объект комментария с уже инвертированым статусом публикации.
onJCommentsCommentAfterPublish Вызывается после изменения статуса публикации комментария. Параметр $comment содержит объект комментария после выполнения операции по смене статуса публикации.
onJCommentsCommentBeforeChange Вызывается перед изменением комментария. Если обработчик события возвращает значение false, операция изменения будет прервана. Параметр $comment содержит измененный объект комментария.
onJCommentsCommentAfterChange Вызывается после сохранения изменений комментария. Параметр $comment содержит объект комментария после сохранения изменений.
onJCommentsCommentBeforeVote Вызывается перед сохранением оценки комментария. Если обработчик события возвращает значение false, операция оценки комментария будет прервана. Параметр $comment содержит объект комментария, параметр $value - оценка комментария.
onJCommentsCommentAfterVote Вызывается после сохранения оценки комментария. Параметр $comment содержит объект комментария, параметр $value - сохраненное значение оценки.
onJCommentsCommentBeforeReport Вызывается перед сохранением жалобы модератору на комментарий. Если обработчик события возвращает значение false, операция отправки жалобы будет прервана. Параметр $comment содержит объект комментария, параметр $report - объект жалобы.
onJCommentsCommentAfterReport Вызывается после сохранения жалобы модератору на комментарий. Параметр $comment содержит объект комментария, параметр $report - объект жалобы.
onJCommentsUserBeforeBan Вызывается перед блокировкой пользователя. Если обработчик события возвращает значение false, операция блокировки будет прервана. Параметр $comment содержит объект комментария, параметр $options - объект информации о блокируемом IP.
onJCommentsUserAfterBan Вызывается после блокировки пользователя. Параметр $comment содержит объект комментария, параметр $options - объект информации о блокируемом IP.
onJCommentsCommentsPrepare Вызывается перед отображением списка комментариев. Параметр $rows содержит массив с объектами комментариев.
onJCommentsCommentBeforePrepare Вызывается перед подготовкой комментария к отображению. Параметр $comment содержит объект комментария.
onJCommentsCommentAfterPrepare Вызывается после подготовки комментария к отображению. Параметр $comment содержит объект комментария.
 
JoomlaTune