Разработчикам |
Введение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; 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
|