Новости 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 Гость просматривают эту тему.
  • 14 Ответов
  • 2664 Просмотров
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Подскажите пожалуйста решение для K2+J2.5.
Компонент К2 генерирует одни и те же заголовки в категориях. Т.е. тайтл "Новости" будет как на первой так и на второй странице.
Необходимо на страницах отличных от первой получить "Новости стр.2" и тд.
Проблема уже решалась для j1.5 здесь http://joomlaforum.ru/index.php/topic,191429.0.html и была удачно решена.
Но все те методы не подходят, ума не приложу как прикрутить.

Предполагаю что добавление кода должно быть в components\com_k2\views\item\view.html.php в этом месте
Код:

Код
// Set page title
$menus = &JSite::getMenu();
$menu = $menus->getActive();
if (is_object($menu) && isset($menu->query['view']) && $menu->query['view'] == 'item' && isset($menu->query['id']) && $menu->query['id'] == $item->id) {
$menu_params = new JParameter($menu->params);
if (!$menu_params->get('page_title')) {
$params->set('page_title', $item->cleanTitle);
}
} else {
$params->set('page_title', $item->cleanTitle);
}

if(K2_JVERSION == '16') {
if ($mainframe->getCfg('sitename_pagetitles', 0) == 1) {
$title = JText::sprintf('JPAGETITLE', $mainframe->getCfg('sitename'), $params->get('page_title'));
$params->set('page_title', $title);
}
elseif ($mainframe->getCfg('sitename_pagetitles', 0) == 2) {
$title = JText::sprintf('JPAGETITLE', $params->get('page_title'), $mainframe->getCfg('sitename'));
$params->set('page_title', $title);
}
}
$document->setTitle($params->get('page_title'));

Спасибо
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
совершенно верно. есть папка itemlist. но манипуляции в не ни к чему не приводят.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
в принципе не важно, можно все на уровне шаблона сделать. Напиши(скопируй) ссылки какие у тебя выходят (limit или start покажи)
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Скорее всего $limit.
Я извиняюсь, пытаюсь учиться. Код вывода категории
Код
<?php
/**
 * @version $Id: category.php 1273 2011-10-27 16:12:32Z lefteris.kavadas $
 * @package K2
 * @author JoomlaWorks http://www.joomlaworks.gr
 * @copyright Copyright (c) 2006 - 2011 JoomlaWorks Ltd. All rights reserved.
 * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
 */

// no direct access
defined('_JEXEC') or die('Restricted access');

?>

<!-- Start K2 Category Layout -->
<div id="k2Container" class="itemListView<?php if($this->params->get('pageclass_sfx')) echo ' '.$this->params->get('pageclass_sfx'); ?>">

<?php if($this->params->get('show_page_title')): ?>
<!-- Page title -->
<div class="componentheading<?php echo $this->params->get('pageclass_sfx')?>">
<?php echo $this->escape($this->params->get('page_title')); ?>
</div>
<?php endif; ?>


<?php if($this->params->get('catImage') && $this->category->image): ?>
<!-- Category image -->
<img width="100" height="100" alt="<?php echo K2HelperUtilities::cleanHtml($this->category->name); ?>" src="<?php echo $this->category->image; ?>" style="width:<?php echo $this->params->get('catImageWidth'); ?>px; float:left; padding:0px 18px 0px 0px; height:auto;" />
<?php endif; ?>

<?php if($this->params->get('catTitle')): ?>
<!-- Category title -->
<h1 style="font-size: 16pt;"><?php echo $this->category->name; ?><?php if($this->params->get('catTitleItemCounter')) echo ' ('.$this->pagination->total.')'; ?></h1>
<?php endif; ?>





<?php if(isset($this->category) || ( $this->params->get('subCategories') && isset($this->subCategories) && count($this->subCategories) )): ?>
<!-- Blocks for current category and subcategories -->
<div class="itemListCategoriesBlock">

<?php if(isset($this->category) && ( $this->params->get('catImage') || $this->params->get('catTitle') || $this->params->get('catDescription') || $this->category->event->K2CategoryDisplay )): ?>
<!-- Category block -->




<!-- K2 Plugins: K2CategoryDisplay -->
<?php echo $this->category->event->K2CategoryDisplay; ?>

<div class="clr"></div>

<?php endif; ?>

<?php if($this->params->get('subCategories') && isset($this->subCategories) && count($this->subCategories)): ?>
<!-- Subcategories -->
<div class="itemListSubCategories">


<?php foreach($this->subCategories as $key=>$subCategory): ?>

<?php
// Define a CSS class for the last container on each row
if( (($key+1)%($this->params->get('subCatColumns'))==0) || count($this->subCategories)<$this->params->get('subCatColumns') )
$lastContainer= ' subCategoryContainerLast';
else
$lastContainer='';
?>






<?php if($this->params->get('subCatTitle')): ?>
<!-- Subcategory title -->







{tip <?php echo $subCategory->name; ?>::





<?php if($this->params->get('subCatDescription')): ?>
<!-- Subcategory description -->
<p><?php echo K2HelperUtilities::wordLimit($subCategory->description,30); ?></p>

<?php endif; ?>


Перейти в раздел.




<?php if($this->params->get('subCatTitleItemCounter')) echo ' ('.$subCategory->numOfItems.')'; ?>


<?php endif; ?>



}
 
 
 
 <div class="subCategoryContainer<?php echo $lastContainer; ?>"<?php echo (count($this->subCategories)==1)? '' : ' style="width:'.number_format(100/$this->params->get('subCatColumns'), 1).'%;"'; ?>>
<div class="subCategory">
<?php if($this->params->get('subCatImage') && $subCategory->image): ?>
<!-- Subcategory image -->
<a rel="nofollow" class="subCategoryImage" href="<?php echo $subCategory->link; ?>">
<img alt="<?php echo K2HelperUtilities::cleanHtml($subCategory->name); ?>" src="<?php echo $subCategory->image; ?>" />
</a>
<?php endif; ?>



{/tip}








<div class="clr"></div>
</div>
</div>





<?php if(($key+1)%($this->params->get('subCatColumns'))==0): ?>
<div class="clr"></div>
<?php endif; ?>
<?php endforeach; ?>

<div class="clr"></div>
</div>
<?php endif; ?>

</div>
<?php endif; ?>






<?php if((isset($this->leading) || isset($this->primary) || isset($this->secondary) || isset($this->links)) && (count($this->leading) || count($this->primary) || count($this->secondary) || count($this->links))): ?>
<!-- Item list -->
<div class="itemList">

<?php if(isset($this->leading) && count($this->leading)): ?>
<!-- Leading items -->
<div id="itemListLeading">
<?php foreach($this->leading as $key=>$item): ?>

<?php
// Define a CSS class for the last container on each row
if( (($key+1)%($this->params->get('num_leading_columns'))==0) || count($this->leading)<$this->params->get('num_leading_columns') )
$lastContainer= ' itemContainerLast';
else
$lastContainer='';
?>

<div class="itemContainer<?php echo $lastContainer; ?>"<?php echo (count($this->leading)==1)? '' : ' style="width:'.number_format(100/$this->params->get('num_leading_columns'), 1).'%;"'; ?>>
<?php
// Load category_item.php by default
$this->item=$item;
echo $this->loadTemplate('item');
?>
</div>
<?php if(($key+1)%($this->params->get('num_leading_columns'))==0): ?>
<div class="clr"></div>
<?php endif; ?>
<?php endforeach; ?>
<div class="clr"></div>
</div>
<?php endif; ?>

<?php if(isset($this->primary) && count($this->primary)): ?>
<!-- Primary items -->
<div id="itemListPrimary">
<?php foreach($this->primary as $key=>$item): ?>

<?php
// Define a CSS class for the last container on each row
if( (($key+1)%($this->params->get('num_primary_columns'))==0) || count($this->primary)<$this->params->get('num_primary_columns') )
$lastContainer= ' itemContainerLast';
else
$lastContainer='';
?>

<div class="itemContainer<?php echo $lastContainer; ?>"<?php echo (count($this->primary)==1)? '' : ' style="width:'.number_format(100/$this->params->get('num_primary_columns'), 1).'%;"'; ?>>
<?php
// Load category_item.php by default
$this->item=$item;
echo $this->loadTemplate('item');
?>
</div>
<?php if(($key+1)%($this->params->get('num_primary_columns'))==0): ?>
<div class="clr"></div>
<?php endif; ?>
<?php endforeach; ?>
<div class="clr"></div>
</div>
<?php endif; ?>

<?php if(isset($this->secondary) && count($this->secondary)): ?>
<!-- Secondary items -->
<div id="itemListSecondary">
<?php foreach($this->secondary as $key=>$item): ?>

<?php
// Define a CSS class for the last container on each row
if( (($key+1)%($this->params->get('num_secondary_columns'))==0) || count($this->secondary)<$this->params->get('num_secondary_columns') )
$lastContainer= ' itemContainerLast';
else
$lastContainer='';
?>

<div class="itemContainer<?php echo $lastContainer; ?>"<?php echo (count($this->secondary)==1)? '' : ' style="width:'.number_format(100/$this->params->get('num_secondary_columns'), 1).'%;"'; ?>>
<?php
// Load category_item.php by default
$this->item=$item;
echo $this->loadTemplate('item');
?>
</div>
<?php if(($key+1)%($this->params->get('num_secondary_columns'))==0): ?>
<div class="clr"></div>
<?php endif; ?>
<?php endforeach; ?>
<div class="clr"></div>
</div>
<?php endif; ?>

<?php if(isset($this->links) && count($this->links)): ?>
<!-- Link items -->
<div id="itemListLinks">
<h4><?php echo JText::_('K2_MORE'); ?></h4>
<?php foreach($this->links as $key=>$item): ?>

<?php
// Define a CSS class for the last container on each row
if( (($key+1)%($this->params->get('num_links_columns'))==0) || count($this->links)<$this->params->get('num_links_columns') )
$lastContainer= ' itemContainerLast';
else
$lastContainer='';
?>

<div class="itemContainer<?php echo $lastContainer; ?>"<?php echo (count($this->links)==1)? '' : ' style="width:'.number_format(100/$this->params->get('num_links_columns'), 1).'%;"'; ?>>
<?php
// Load category_item_links.php by default
$this->item=$item;
echo $this->loadTemplate('item_links');
?>
</div>
<?php if(($key+1)%($this->params->get('num_links_columns'))==0): ?>
<div class="clr"></div>
<?php endif; ?>
<?php endforeach; ?>
<div class="clr"></div>
</div>
<?php endif; ?>

</div>

<!-- Pagination -->
<?php if(count($this->pagination->getPagesLinks())): ?>
<div class="k2Pagination">
<?php if($this->params->get('catPagination')) echo $this->pagination->getPagesLinks(); ?>
<div class="clr"></div>
<?php if($this->params->get('catPaginationResults')) echo $this->pagination->getPagesCounter(); ?>
</div>
<?php endif; ?>

<?php endif; ?>
</div>

<?php if(isset($this->addLink)): ?>
<!-- Item add link -->
<span class="catItemAddLink">
<a class="modal" rel="{handler:'iframe',size:{x:990,y:650}}" href="<?php echo $this->addLink; ?>">
<?php echo JText::_('K2_ADD_A_NEW_ITEM_IN_THIS_CATEGORY'); ?>
</a>
</span>
<?php endif; ?>



<?php
$start = JRequest::getInt('limitstart',0);
$option = JRequest::getVar('option','');
 if(!$start && $option == 'com_k2'){ ?>


<p><?php echo $this->category->description; ?></p>
<?php } ?>
<!-- End K2 Category Layout -->

Если это имелось ввиду
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
novosti.html
novosti/page-2.html
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
<?php
$app = JFactory::getApplication();
$doc = JFactory::getDocument();
if ($app->input->getInt('limitstart',0))
 {
    $meTitle = $doc->getTitle().' / '.$this->pagination->getPagesCounter();
    $doc->setTitle($meTitle);
 }
?>
Вставь код в приведенный тобой выше в конец файла
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Не выводит( ВЫВОДИТ! <title>Новости / Страница 3 из 44</title>
Очистил кеш. Poznakomlus  Снимаю шляпу :D

PS
А общее число страниц как убрать?
« Последнее редактирование: 19.01.2013, 05:43:45 от waterfly »
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Туплю... Ночь...Разобрался. Спасибо.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Код: php-brief
<?php
if($pageNum = preg_filter('/.*page\-([0-9]+)\.html$/uis', '<?php
if($pageNum = preg_filter('/.*page\-([0-9]+)\.html$/uis', '$1', JURI::getInstance()->toString()))
{
    $doc = JFactory::getDocument();
    $doc->setTitle($doc->getTitle().' Страница №'.$pageNum);
}?>', JURI::getInstance()->toString()))
{
    $doc = JFactory::getDocument();
    $doc->setTitle($doc->getTitle().' Страница №'.$pageNum);
}?>
Это ответ зачем мне нужны были ссылки адресной строки. yes!
Код обрабатывает ссылки вида *page-2.html...*page-999.html...
Данный код можно вставлять прямо в шаблон сайта. Будет обрабатывать также другие компоненты с ссылками приведенными выше вида
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Цитировать
Данный код можно вставлять прямо в шаблон сайта. Будет обрабатывать также другие компоненты
Так же, великолепно работает.
*

waterfly

  • Захожу иногда
  • 83
  • 0 / 0
Цитировать
<?php
if($pageNum = preg_filter('/.*page\-([0-9]+)\.html$/uis', '$1', JURI::getInstance()->toString()))
{
    $doc = JFactory::getDocument();
    $doc->setTitle($doc->getTitle().' Страница №'.$pageNum);
}?>
Этот код на локалхосте выдает Fatal error:  Call to undefined function  preg_filter
Копать в сторону денвера?
*

sheru

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Код: php-brief
<?php
if($pageNum = preg_filter('/.*page\-([0-9]+)\.html$/uis', '<?php
if($pageNum = preg_filter('/.*page\-([0-9]+)\.html$/uis', '$1', JURI::getInstance()->toString()))
{
    $doc = JFactory::getDocument();
    $doc->setTitle($doc->getTitle().' Страница №'.$pageNum);
}?>', JURI::getInstance()->toString()))
{
    $doc = JFactory::getDocument();
    $doc->setTitle($doc->getTitle().' Страница №'.$pageNum);
}?>
Это ответ зачем мне нужны были ссылки адресной строки. yes!
Код обрабатывает ссылки вида *page-2.html...*page-999.html...
Данный код можно вставлять прямо в шаблон сайта. Будет обрабатывать также другие компоненты с ссылками приведенными выше вида
Подскажите, пожалуйста, а если страницы в адресной строке выводятся как ?start=nn , то как это сделать. Вставил в шаблон ваш код, заменил page на start  Не работает.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение материалов в категориях k2

Автор chertov

Ответов: 0
Просмотров: 934
Последний ответ 12.05.2018, 08:08:44
от chertov
Интеграция JComments в категориях K2

Автор kisBoss

Ответов: 3
Просмотров: 935
Последний ответ 19.09.2017, 20:05:30
от kisBoss
Сломался вывод материалов в категориях

Автор sergspb

Ответов: 1
Просмотров: 956
Последний ответ 30.04.2017, 10:10:42
от sergspb
Фигасе. K2 запрещает одинаковые псевдонимы материалов в разных категориях. Так ли это?

Автор cvasilyev

Ответов: 13
Просмотров: 1167
Последний ответ 12.12.2016, 12:45:39
от Septdir
Дубли. Один материал в нескольких категориях, как решить проблему?

Автор h.vitaly

Ответов: 4
Просмотров: 1156
Последний ответ 25.06.2015, 20:18:31
от h.vitaly