Новости 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 Пользователей и 2 Гостей просматривают эту тему.
  • 553 Ответов
  • 59951 Просмотров
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Вышло отлично, но куда то пропала форма в материале. Переключил вывод с обьекта на HTML, форма появилась, но в списке материало категории появились крякозябры и вылезло: Fatal error: Class 'MiniCCKCategoryData' not found in C:\OpenServer\domains\sop\templates\allrounder-3\html\com_content\category\default_articles.php on line 139 
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вы можете использовать либо вывод HTML, либо объектом, два сразу использовать нельзя.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Что же делать, нужна и форма для заполнения материалов на сайте, и отражение этой формы в списке материалов..то есть выбор из чекбокса типа работы.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Форма для заполнения материалов на сайте никак не зависит от способа вывода контента.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Нельзя ли вывести контент в статьях в форме вывода объект, а не HTML? Народ, помогите пожалуйста, очень надо.
« Последнее редактирование: 14.08.2016, 15:19:29 от Djaison »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Можно, но и для категории будет такой же способ вывода.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Можно, но и для категории будет такой же способ вывода.
Да пусть будет. Мне главное, чтоб одновременно выводился одинаковый контент, и в статьях одной категории, и в списке статей (материалов) этой же категории. Как это можно сделать?
« Последнее редактирование: 15.08.2016, 07:38:08 от Djaison »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Да как угодно, видимо я не понял вопроса.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Да как угодно, видимо я не понял вопроса.
Объясню поподробнее. С помощью MiniCCK я создал на сайте вот такую форму вывода каждой страницы . Все материалы(статьи) у меня выводятся в виде списка материалов категории. Список материалов выглядит так , жанр и автор берутся из контента самой статьи(материала) при заполнении дополнительной формы в менеджере материалов в Joomla.   Но контент материала появляется на сайте только при выборе поля вывода "HTML", а список материалов(книг) при выборе поля "объект"!  Как можно все сделать в поле вывода "Обьект",  чтобы и список был, и форма вывода на каждой странице сохранялась?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Форму вывода сделайте сами в макете страницы материала, используя данные объекта так же, как и в макете категории.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Форму вывода сделайте сами в макете страницы материала, используя данные объекта так же, как и в макете категории.
А можно немного поподробнее, что и куда прописывать. Мне бы хотя бы направление для одного поля, а дальше я уже сам сделаю..
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
http://argens.ru/dokumentatsiya/16-ispolzovanie-plagina-minicckD категории посмотрите как в макетах вызывается item и вместо $this->item используйте item как он вызывается в соответствующем макете.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
http://argens.ru/dokumentatsiya/16-ispolzovanie-plagina-minicckD категории посмотрите как в макетах вызывается item и вместо $this->item используйте item как он вызывается в соответствующем макете.
В категории я вроде нашел, подскажите как посмотреть как вызывается Item в соответсвующем макете.  

вот содержание категории

Спойлер
[свернуть]
« Последнее редактирование: 22.08.2016, 09:06:34 от Djaison »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Код
 <?php foreach ($this->items as $i => $article) : ?>
Внутри этого цикла это $article.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Код
 <?php foreach ($this->items as $i => $article) : ?>
Внутри этого цикла это $article.
я там прописываю вместо items "->minicck->getArticleType($this->item->id);" но в списке материалов категории выходят какие-то крякозябры.. В статье ничего нет. Что я не так делаю?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Внутри цикла надо писать $article->minicck->getArticleType($article->id);
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Внутри цикла надо писать $article->minicck->getArticleType($article->id);
Прописываю <?php foreach ($this->items as $i => $article->minicck->getArticleType($article->id)): ?> но выходят кряки опять. Пропишите мне пожалуйста эту строку в цикле, как она должна выглядеть. Между чем и чем..
Спойлер
[свернуть]

Имя типа контента, включающего нужные поля у меня content_type_0 Надо чтоб контент с полями отражался в каждой статье-материале
« Последнее редактирование: 23.08.2016, 08:57:50 от Djaison »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
У вас есть цикл
Код
<?php foreach ($this->items as $i => $article) : ?>
.........
<?php endforeach; ?>
Вот внутри него вы можете вызвать $article->minicck->getArticleType($article->id);
Сам цикл переписывать не надо.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
У вас есть цикл
Код
<?php foreach ($this->items as $i => $article) : ?>
.........
<?php endforeach; ?>
Вот внутри него вы можете вызвать $article->minicck->getArticleType($article->id);
Сам цикл переписывать не надо.

Пример вызова можете скинуть?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Тот пример, что в сообщении выше вашего чем не устраивает?
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Как то не получается вызвать в тексте материала необходимые поля, заполненные в плагине
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Код: php
<?php defined('_JEXEC') or die;
$params = &$this->item->params;
$images = json_decode($this->item->images);
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');

$title = $this->escape($this->item->title);
$link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid));
$lang = JFactory::getLanguage()->getTag();

if($lang == "ru-RU"){
    $buyFieldId = 'field_5';
    $buyExtFieldId = 'field_7';
    $downloadFieldId = 'field_3';
    $priceFieldId = 'field_9';
}
else{
    $buyFieldId = 'field_6';
    $buyExtFieldId = 'field_13';
    $downloadFieldId = 'field_4';
    $priceFieldId = 'field_10';
}

$price = trim($this->item->minicck->getFieldValue($this->item->id, $priceFieldId));
$price = empty($price)? 'Free' : $price;

$image = (!empty($images->image_intro)&& $images->image_intro != ' ')? JUri::root().$images->image_intro : '/images/noimage.jpg';
?>
<div class="row border-bottom margin-bottom-20 padding-bottom-20">
    <div class="small-12 medium-3 column">
        <a title="<?php echo $title; ?>" class="product_img_link" href="<?php echo $link; ?>">
            <img
                 alt="<?php echo $title; ?>"
                 src="<?php echo $image; ?>"
                />
        </a>
    </div>
    <div class="small-12 medium-6 column">
        <h3>
            <a class="product_link" href="<?php echo $link; ?>">
                <?php echo $title; ?>
            </a>
        </h3>
        <div class="row">
            <div class="small-3 column"><?php echo $this->item->minicck->getFieldValue($this->item->id, 'field_12'); ?></div>
            <div class="small-9 column text-right"><?php echo $this->item->minicck->getFieldValue($this->item->id, 'field_11'); ?></div>
        </div>

        <div class="product_desc">
            <a class="product_descr" href="<?php echo $link; ?>">
                <?php echo JHtml::_('content.prepare', $this->item->introtext, '', 'com_content.category'); ?>
            </a>
        </div>
    </div>
    <div class="small-12 medium-3 column border-left">
<!--        <div class="price margin-bottom-10">--><?php //echo $price; ?><!--</div>-->
        <?php echo $this->item->minicck->getFieldValue($this->item->id, $buyFieldId); ?>
        <?php echo $this->item->minicck->getFieldValue($this->item->id, $buyExtFieldId); ?>
        <?php echo $this->item->minicck->getFieldValue($this->item->id, $downloadFieldId); ?>
        <br>
        <a class="button radius small" href="<?php echo $link; ?>" title="<?php echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); ?>">
            <?php echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); ?>
        </a>
    </div>
    <?php echo $this->item->event->afterDisplayContent; ?>
</div>
Вот так у меня выглядит макет templates/.../html/com_content/category/blog_item.php
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
А прикрутить тот шаблон, что в плагине к материалу никак не получится?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Почему не получится? Перейдите в режим вывода HTML.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Так я ведь уже писал выше.  В режиме HTML у меня все прекрасно выходит. Но значения, которые я там ввожу должны одновременно отображаться в списке материалов этой категории. Типа "Жанр, Количество страниц" Я прописал <?php $minicck = MiniCCKCategoryData::getInstance()->getObject($this->category->id);
                     echo $minicck->getFieldValue($article->id, 'pole2'); И значения стали выходить, но только в режиме "Объект".  В режиме HTML в списке материалов категории вылезла ошибка    
Fatal error: Call to a member function getFieldset() on a non-object
  Можно как нибудь переделать эту ссылку, чтоб паралелльные значения выходили в списке материалов категории в режиме "HTML"
« Последнее редактирование: 23.08.2016, 15:34:34 от Djaison »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Вот, смотрите http://demoj3.argens.ru/index.php/blog, тут вывод в режиме HTML без всяких переделок внешних и внутренних. Все выводится и в категории и в статье.
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Вот, смотрите http://demoj3.argens.ru/index.php/blog, тут вывод в режиме HTML без всяких переделок внешних и внутренних. Все выводится и в категории и в статье.
Да это я легко то сделал, но тут ведь вывод материалов категории в виде блога, а у меня в виде списка. Список материалов выглядит так , жанр и автор берутся из полей самой статьи (материала) при заполнении формы в менеджере материалов в Joomla.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
И в чем проблемы? Нельзя категории и материалу разные макеты вывода полей задать?
*

Djaison

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
макет категории вообще не выходит нигде..
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Умный поиск Joomla! 4.3.4 Stable не ищет в содержимом SP Page Builder 5.0.8

Автор dmitrypro

Ответов: 4
Просмотров: 2790
Последний ответ 17.10.2023, 13:59:18
от dmitrypro
Поиск аналогичного конструктора контента

Автор TRIGUN

Ответов: 0
Просмотров: 1526
Последний ответ 24.07.2017, 02:12:13
от TRIGUN
MiniCCK - вывод полей в модулях

Автор Nikolay Blinov

Ответов: 1
Просмотров: 1827
Последний ответ 28.06.2016, 02:31:25
от Nikolay Blinov
Как сделать каталог в Joomla?

Автор tao2en

Ответов: 8
Просмотров: 3920
Последний ответ 11.03.2016, 11:14:22
от FitMe
Ребят кто сможет сделать модуль для Joomla 3 с функционалом описанным ниже

Автор foxkirov

Ответов: 4
Просмотров: 1851
Последний ответ 14.01.2016, 21:39:41
от foxkirov