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

alpeichik

  • Захожу иногда
  • 55
  • 1 / 0
  • Alpei
Здравствуйте форумчане, подскажите пожалуйста как при выводе материалов (кратко и полностью) категории, сделать чередование цветов фона у самих материалов. Система как у досок объявлений  - типа: 1-й материал (белый), 2-й материал (серый), 3-й материал ( белый), 4-й (серый) и т.д.
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Редактируйте шаблон категории - вставляйте в цикл счётчик и назначайте дополнительный класс по признаку чётный/нечётный (принцип можете посмотреть на примере дополнительных полей).
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Редактируйте шаблон категории - вставляйте в цикл счётчик и назначайте дополнительный класс по признаку чётный/нечётный (принцип можете посмотреть на примере дополнительных полей).
А как тогда определить четность в полном представлении материала? Там то считать нечего.

А в категории все можно сделать через css:

Код: css
.material{
    background: #fff;
}
.material:nth-child(odd){
    background: #999;
}

вместо .material - реальный селектор блока материала.

не работает в ie8 ( про ие7 молчу )
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Можно и без css3, то, что предложил SDKiller.
Открываете темлейт блога (нет К2 под рукой, хз как там). Ищите блок вроде такого:
Код: php
foreach ($items as $item) {
    echo '<div class="item">';
        echo $this->loadTemplate('item');
    echo '</div>';
}
И дописываете условие:
Код: php
$x=0; // это будет щёчег
foreach ($items as $item) {
//ниже условие кратности:
    if ($x % 2 == 0) {
       $zebra='even';
    } else {
       $zebra='odd';
    }
    echo '<div class="item '.$zebra.'">';
        echo $this->loadTemplate('item');
    echo '</div>';
    $x++; //тут приращиваем.
}
*

alpeichik

  • Захожу иногда
  • 55
  • 1 / 0
  • Alpei
Спасибо за быстрый ответ, но в PHP, я не оч. Если без полочек, я не пойму. Думаю решение многим пригодится ведь чередование по цветам модная дизайнерская фишка.
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Уже прекрасно разложили на абстрактном примере.

Если конкретнее:

components\com_k2\templates\default\category.php
(или, если у вас переопределяется шаблон K2, этот же файл там где он есть - например в папке html/com_k2 вашего шаблона)

Три группы материалов - leading, primary, secondary

Для вывода каждой группы цикл вида:

Код
<?php foreach($this->leading as $key=>$item): ?>
...
<div class="itemContainer<?php echo $lastContainer; ?>"...

....

<?php endforeach; ?>


Соотнося с примером выше:
- перед <?php foreach($this->leading as $key=>$item): ?> вставьте
Код
<?php $x=0;?>
- после него -
Код
    
<?php if ($x % 2 == 0) {
       $zebra='even';
    } else {
       $zebra='odd';
    }?>

- далее - приводим к виду:
Код
<div class="itemContainer<?php echo $lastContainer.' '.$zebra; ?>"

- перед
Код
<?php endforeach; ?>

вставьте
Код
<?php $x++;?>

В следующих блоках - по аналогии.

В CSS задайте стиль для div.itemContainer.odd и div.itemContainer.even
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А если без php ковыряний, и плюнуть на ie8- то так:
div.itemContainer{
    background: #fff;
}
div.itemContainer:nth-child(odd){
    background: #ccc;
}

В ие7-8 все будет белым. Да и ладно, подумаешь. Доля этих старых ишаков падает довольно быстро.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

alpeichik

  • Захожу иногда
  • 55
  • 1 / 0
  • Alpei
Спасибо, сделаю без PHP ковыряний, при помощи CSS (плюну на 7, 8 старые версии).
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
А если без php ковыряний, и плюнуть на ie8- то так:

Совсем отучаешь людей думать)
Даже примитивный цикл, который человеку разжевали, отговорил сделать.
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
А почему это решить задачу на php - это "думать" а решить ее же на CSS - это "отучить думать"?
Внешнее оформление контента - это CSS, а не php, разве нет?
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

staticlight

  • Moderator
  • 1086
  • 65 / 0
  • Staticlight
Вы оба правы. Человек, который хочет совершенствовать свои знания - попробует оба способа.
Но нам же не выгодно насильно заставлять учиться других, как говориться, чем меньше другие знают, тем лучше и ценнее мы, как специалисты.
Руководитель отдела сервисного обслуживания систем безопасности.
Устали от com_content - поставьте com_k2.
TRIPLE "F" POWER: Firefox+FireShot+Firebug. Chrome + Ctrl+Shift+I
*

Shustry

  • Гуру
  • 6434
  • 745 / 3
Да вариантов решения полно. Вот на JS, например (кроссбраузерно):
MooTools:
Код: javascript
window.addEvent('domready', function() {
$$(".itemContainer:even").addClass("zebranah");
});
JQuery:
Код: javascript
$(document).ready(function(){
$(".itemContainer:even").addClass("zebranah");
});
Задача-то тривиальная.
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
Вот на php - самое кроссбраузерно :)

Вдруг в браузере отключён яваскрипт?
*

SDKiller

  • Moderator
  • 2705
  • 329 / 5
  • ...ergo sum
А почему это решить задачу на php - это "думать" а решить ее же на CSS - это "отучить думать"?

Я не говорю что решить задачу средствами CSS - не думать.

Я говорю, что человек взял готовое решение, пусть и не универсальное, но в котором меньше строчек, вместо того чтобы проявить немного самостоятельности (цикл ему хоть и разжевали, но всё же немного работы для зубов оставили).
*

alpeichik

  • Захожу иногда
  • 55
  • 1 / 0
  • Alpei
Спасибо, сделаю оба способа на локалке, для самообразования. Вы все правы учиться нужно, тем более с такой поддержкой.
*

alpeichik

  • Захожу иногда
  • 55
  • 1 / 0
  • Alpei
Ну всё, потянуло на знания. Может вопрос не в тему. Подскажите пожалуйста материалы для изучения PHP новичку. Попова мильком смотрел, но там процедурный подход, а современность и Joomla требуют ООП. Погуглить я умею, но изучение PHP должно быть интересным и с самых первых уроков цеплять, много читал о том что люди сидят и зубрят вроде бы хороший материал, но научиться не могут, потому что то сухой проф. язык, а думать на языке программирования научить может только правильный материал.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отображение материалов к2 со статусом &quot;опубликовано, но срок истек&quot;

Автор grizlik

Ответов: 0
Просмотров: 2705
Последний ответ 03.04.2019, 07:31:21
от grizlik
Как назначить категории отдельный K2.css?

Автор a_newbie

Ответов: 128
Просмотров: 44376
Последний ответ 26.10.2017, 15:53:21
от Dusk09
Изображение с тела новости в категории К2

Автор DmWagner

Ответов: 2
Просмотров: 3540
Последний ответ 27.04.2015, 03:25:25
от DmWagner
Как отключить к2? (чтобы работал вывод материалов через стандартный контент Joomla)?

Автор Dmitrii.Obrazcov

Ответов: 1
Просмотров: 4338
Последний ответ 24.03.2015, 17:08:04
от anoorik
Как поменять размер картинки по высоте в категории?

Автор surgeonleks

Ответов: 0
Просмотров: 3443
Последний ответ 23.03.2015, 13:50:27
от surgeonleks