Разработчикам |
ВведениеJComments — компонент который может быть легко интегрирован с любыми сторонними компонентами. Для этого требуется добавить всего несколько строк кода и написать простой плагин для JComments. Плагины используются компонентом для получения информации о комментируемом объекте (имя объекта или прямая ссылка). Это необходимо потому, что сам компонент комментариев ничего не знает о комментируемых объектах и о их структуре данных. Поэтому, такие задачи, как построение ссылки на объект и получение его названия возлагаются на разработчика расширения. Создание плагина для JCommentsПлагин для JComments это обычный php-файл, содержащий класс-наследник базового класса для всех плагинов JCommentsPlugin в котором определены три метода:
Имя данного класса должно состоять из префикса 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('Direct Access to this location is not allowed.'); class jc_com_mycomp extends JCommentsPlugin { function getObjectTitle( $id ) { $db = & JCommentsFactory::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 = JoomlaTuneRoute::_( 'index.php?option=com_mycomp&task=view&id='. $id .'&Itemid='. $_Itemid ); return $link; } function getObjectOwner( $id ) { $db = & JCommentsFactory::getDBO(); $db->setQuery( "SELECT created_by FROM #__mycomp WHERE id='$id'"); return $db->loadResult(); } } ?> Как показать комментарии для заданного объектаДля этого необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JComments::showComments. Этот метод поддерживает три обязательных параметра: ID объекта, имя компонента, и имя объекта. global $mainframe; $comments = $mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; if (file_exists($comments)) { require_once($comments); echo JComments::showComments($id, 'com_mycomp', $title); } Где $id — это идентификатор комментируемого, com_mycomp — имя компонента и $title — имя объекта. Дополнительные примеры можно найти в разделе «Руководство по интеграции JComments в сторонние компоненты». Как отобразить количество комментариевЕсли требуется отобразить количество комментариев для любого объекта (например, в списке анонсов или краткого описания объекта), необходимо включить посредством функции include/require основной файл JComments и вызвать статический метод JComments::getCommentsCount. Этот метод поддерживает два обязательных параметра: ID объекта и имя компонента. global $mainframe; $comments = $mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; if (file_exists($comments)) { require_once($comments); $count = JComments::getCommentsCount($id, 'com_mycomp'); echo $count ? ('Комментарии ('. $count . ')') : 'Добавить комментарий'; } Где $id — это идентификатор комментируемого и com_mycomp — имя компонента. Этот код отобразит 'Комментарии (5)' в случае если 5 комментариев было опубликовано для данного объекта или надпись 'Добавить комментарий' в случае, если ни один комментарий не был опубликован. Как отобразить последний комментарий объектаЕсли требуется отобразить последний комментарий объекта, необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JComments::getLastComment. Этот метод поддерживает два обязательных параметра: ID объекта и имя компонента. global $mainframe; $comments = $mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; if (file_exists($comments)) { require_once($comments); $comment = JComments::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 и вызвать статический метод JComments::deleteComments. Этот метод поддерживает два обязательных параметра: ID объекта и имя компонента. global $mainframe; $comments = $mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; if (file_exists($comments)) { require_once($comments); JComments::deleteComments($id, 'com_mycomp'); } где $id — это идентификатор комментируемого объекта и com_mycomp — имя компонента. После вызова данного метода, все комментарии для указанного объекта будут удалены. Как удалить все комментарии для заданного компонентаДля удаления всех комментариев для какого-либо компонента (например, при удалении самого компонента с сайта) необходимо подключить посредством функции include/require основной файл JComments и вызвать статический метод JComments::deleteAllComments. Этот метод поддерживает один обязательный параметр: имя компонента. global $mainframe; $comments = $mainframe->getCfg('absolute_path') . '/components/com_jcomments/jcomments.php'; if (file_exists($comments)) { require_once($comments); JComments::deleteAllComments('com_mycomp'); } После вызова данного метода, все комментарии для объектов указанного компонента будут удалены. |


