Новости Joomla

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 11486 Просмотров
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Здравствуйте!
Нужно, чтобы над комментариями отображалось их количество.
Использую макет Tree.
Ничего в шаблоне похожего не нашел...

*

FitMe

  • Захожу иногда
  • 310
  • 10 / 2
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Почитайте, есть руководство тут

http://www.joomlatune.ru/jcomments-developers-manual.html#jcomments_get_comments_count

Да я видел эту инструкцию.
Но там нужно вызывать функцию в любом внешнем документе.
А мне нужно вывыести с самом шаблоне Jcomments.
А в нем переменные типа $count уже заняты.
А $id материала непонятно, как получить.

Должен быть какой-то нативный способ, более простой.
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Я нашел способ как вывести количество комментариев в шаблоне.

Просто вставить echo $count; прямо в функцию.


Код
<?php
/**
 * JComments - Joomla Comment System
 *
 * @version 3.0
 * @package JComments
 * @author Sergey M. Litvinov (smart@joomlatune.ru)
 * @copyright (C) 2006-2013 by Sergey M. Litvinov (http://www.joomlatune.ru)
 * @license GNU/GPL: http://www.gnu.org/copyleft/gpl.html
 */

defined('_JEXEC') or die;

/**
 * Threaded comments list template
 *
 */
class jtt_tpl_tree extends JoomlaTuneTemplate
{
function render()
{
$comments = $this->getVar('comments-items');

if (isset($comments)) {
$this->getHeader();
?>
<div class="comments-list" id="comments-list-0">
<?php
$i = 0;

$count = count($comments);
$currentLevel = 0;
echo $count;
foreach($comments as $id => $comment) {
if ($currentLevel < $comment->level) {
?>
</div>
<div class="comments-list" id="comments-list-<?php echo $comment->parent; ?>">
<?php
} else {
$j = 0;

if ($currentLevel >= $comment->level) {
$j = $currentLevel - $comment->level;
} else if ($comment->level > 0 && $i == $count - 1) {
$j = $comment->level;
}

while($j > 0) {
?>
</div>
<?php
$j--;
}
}
?>
<div class="<?php echo ($i%2 ? 'odd' : 'even'); ?>" id="comment-item-<?php echo $id; ?>">
<?php
echo $comment->html;

if ($comment->children == 0) {
?>
</div>
<?php
}

if ($comment->level > 0 && $i == $count - 1) {
$j = $comment->level;
}

while($j > 0) {
?>
</div>
<?php $j--;
}

$i++;
$currentLevel = $comment->level;
}
?>
</div>
<div id="comments-list-footer"><?php echo $this->getFooter();?></div>
<?php
} else {
// display single comment item (works when new comment is added)
$comment = $this->getVar('comment-item');

if (isset($comment)) {
$i = $this->getVar('comment-modulo');
$id = $this->getVar('comment-id');
?>
<div class="<?php echo ($i%2 ? 'odd' : 'even'); ?>" id="comment-item-<?php echo $id; ?>"><?php echo $comment; ?></div>
<?php
} else {
?>
<div class="comments-list" id="comments-list-0"></div>
<?php
}
}

}

/*
*
* Display comments header and small buttons: RSS and refresh
*
*/
function getHeader()
{
$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$btnRSS = '';
$btnRefresh = '';

if ($this->getVar('comments-refresh', 1) == 1) {
$btnRefresh = '<a class="refresh" href="#" title="'.JText::_('BUTTON_REFRESH').'" onclick="jcomments.showPage('.$object_id.',\''. $object_group . '\',0);return false;">&nbsp;</a>';
}

if ($this->getVar('comments-rss') == 1) {
$link = $this->getVar('rssurl');
if (!empty($link)) {
$btnRSS = '<a class="rss" href="'.$link.'" title="'.JText::_('BUTTON_RSS').'" target="_blank">&nbsp;</a>';
}
}
?>




<h4 id="comments"><?php echo JText::_('COMMENTS_LIST_HEADER');?> <?php echo $btnRSS; ?><?php echo $btnRefresh; ?></h4>
<?php
}

/*
*
* Display RSS feed and/or Refresh buttons after comments list
*
*/
function getFooter()
{
$footer = '';

$object_id = $this->getVar('comment-object_id');
$object_group = $this->getVar('comment-object_group');

$lines = array();

if ($this->getVar('comments-refresh', 1) == 1) {
$lines[] = '<a class="refresh" href="#" title="'.JText::_('BUTTON_REFRESH').'" onclick="jcomments.showPage('.$object_id.',\''. $object_group . '\',0);return false;">'.JText::_('BUTTON_REFRESH').'</a>';
}

if ($this->getVar('comments-rss', 1) == 1) {
$link = $this->getVar('rssurl');
if (!empty($link)) {
$lines[] = '<a class="rss" href="'.$link.'" title="'.JText::_('BUTTON_RSS').'" target="_blank">'.JText::_('BUTTON_RSS').'</a>';
}
}

if ($this->getVar('comments-can-subscribe', 0) == 1) {
$isSubscribed = $this->getVar('comments-user-subscribed', 0);

$text = $isSubscribed ? JText::_('BUTTON_UNSUBSCRIBE') : JText::_('BUTTON_SUBSCRIBE');
$func = $isSubscribed ? 'unsubscribe' : 'subscribe';

$lines[] = '<a id="comments-subscription" class="subscribe" href="#" title="' . $text . '" onclick="jcomments.' . $func . '('.$object_id.',\''. $object_group . '\');return false;">'. $text .'</a>';
}

if (count($lines)) {
$footer = implode('<br />', $lines);
}

return $footer;
}
}

Но мне надо, что их количество выводилось внутри заголовка H4.

Но, когда я туда вставляю - ничего не выводится.

Код
<h4 id="comments"><?php echo JText::_('COMMENTS_LIST_HEADER').' '.$count;?> <?php echo $btnRSS; ?><?php echo $btnRefresh; ?></h4>

Нужно как-то передать значение переменной из функции...
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Вот так можно вывести


Цитировать
<?php $commentsAPI = JPATH_SITE . '/components/com_jcomments/jcomments.php';
    $object_id = $this->getVar('comment-object_id');
if (file_exists($commentsAPI)) {
require_once($commentsAPI);
$count = JComments::getCommentsCount($object_id, 'com_easyblog');
echo '('. $count . ')';
}

?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не отправляются комментарии из JComments 3.0.7.9

Автор akteon25

Ответов: 1
Просмотров: 1066
Последний ответ 21.02.2025, 12:41:06
от NewUsers
152-ФЗ jcomments электронная почта комментатора

Автор basn

Ответов: 1
Просмотров: 1045
Последний ответ 12.02.2025, 12:01:20
от basn
Как отключить капчу в jcomments 4?

Автор Алено4ка

Ответов: 1
Просмотров: 2066
Последний ответ 02.08.2024, 20:53:02
от ProtectYourSite
Вышла новая версия JComments Fork 4.0.16

Автор ProtectYourSite

Ответов: 79
Просмотров: 27430
Последний ответ 05.02.2024, 23:50:16
от ProtectYourSite
У Jcomments есть аналоги?

Автор ruslan13

Ответов: 10
Просмотров: 4177
Последний ответ 07.12.2023, 20:08:31
от Missile