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

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
Если я удалю в шаблоне файл maincategory.php тем самым возможно у меня не будут выводиться категории на главной странице магазина, не поломает ли это шаблон и магазин?
*

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
к сожалению получил ошибку 500, может кто скажет что именно вырезать в этом коде?
Спойлер
[свернуть]
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
нужно не вырезать файл, а скрывать позицию component  в шаблоне, по условию на главную
как это сделать - зависит уже от шаблона.
в некоторых случаях просто задаётся отдельный лайаут для главной, в котором нет компонента, в некоторых фрймворках есть опции на отключение вывода компонента.
для простых шаблонов
Различные условия в шаблонах Joomla 3.0 и 2.5
*

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
в некоторых фрймворках есть опции на отключение вывода компонента.
для простых шаблонов
Различные условия в шаблонах Joomla 3.0 и 2.5
некоторых фрймворках есть опции на отключение вывода компонента.
Фреймворк сайта имеет возможность скрыть выводимую информацию, скорей всего это будет лучшим решением (взять в блок и скрыть), но я совершенно не знаю php и что нужно скрыть, поэтому опубликовал код в спойлере. В магазине есть раздел, статическая страница, которую я могу оформить как лендос и мне совершенно не нужен вывод категорий на главной с их названием и 1001 вложенностью) Я понимаю, что пора бы начать учить php и углубиться в css, но время как вода)
« Последнее редактирование: 25.01.2020, 18:07:23 от Evgenii_web »
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
я писал про настройки шаблона.
это не относится к php и смотрится в настройках шаблона (расширения-шаблоны)

но раз и это сложно, то можете просто удалить код, начиная
Код
print $this->_tmp_maincategory_html_start;
и до конца. просто в шаблоне у вас может пустой блок образоваться. но пробуйте
*

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
я писал про настройки шаблона.
это не относится к php и смотрится в настройках шаблона (расширения-шаблоны)

но раз и это сложно, то можете просто удалить код, начиная
Код
print $this->_tmp_maincategory_html_start;
и до конца. просто в шаблоне у вас может пустой блок образоваться. но пробуйте
я писал про настройки шаблона.
это не относится к php и смотрится в настройках шаблона (расширения-шаблоны)

но раз и это сложно, то можете просто удалить код, начиная
Код
print $this->_tmp_maincategory_html_start;
и до конца. просто в шаблоне у вас может пустой блок образоваться. но пробуйте
Думаю это слишком много резать, он же еще статическую страницу выводит, сейчас эксперементом может найду)
*

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
в некоторых фрймворках есть опции на отключение вывода компонента.
для простых шаблонов
Различные условия в шаблонах Joomla 3.0 и 2.5
Гениальная идея, скрыл блоком (вырезал из потока документов - иначе остается пустой блок) начиная от <div class="jshop_list_category" id="comjshop"> и закрыл до <?php } ?>
   <?php print $this->_tmp_maincategory_html_end;?>
</div>
*

kit2m2

  • Живу я здесь
  • 3360
  • 276 / 0
  • Беру сайты на полное сопровождение
Не проще ли CSS-стилями скрыть блок (display: none;):

Код
<div class="jshop_list_category">
   ...
</div>

Ну или закомментировать код в шаблоне:

Код
<?php /*?>
<div class="jshop_list_category">
    <?php if (count($this->categories)) : ?>
   
        <?php foreach ($this->categories as $k => $category) : ?>
            <?php if ($k % $this->count_category_to_row == 0) : ?>
                <div class = "row-fluid">
            <?php endif; ?>
       
            <div class = "sblock<?php echo $this->count_category_to_row;?> jshop_categ category">
                <div class="sblock2 image">
                    <a href = "<?php print $category->category_link;?>">
                        <img class = "jshop_img" src = "<?php print $this->image_category_path;?>/<?php if ($category->category_image) print $category->category_image; else print $this->noimage;?>" alt="<?php print htmlspecialchars($category->name);?>" title="<?php print htmlspecialchars($category->name);?>" />
                    </a>
                </div>
                <div class="sblock2">
                    <div class="category_name">
                        <a class = "product_link" href = "<?php print $category->category_link?>">
                            <?php print $category->name?>
                        </a>
                    </div>
                    <p class = "category_short_description">
                        <?php print $category->short_description?>
                    </p>
                </div>
            </div>
           
            <?php if ($k % $this->count_category_to_row == $this->count_category_to_row - 1) : ?>
                <div class = "clearfix"></div>
                </div>
            <?php endif; ?>
        <?php endforeach;?>
       
        <?php if ($k % $this->count_category_to_row != $this->count_category_to_row - 1) : ?>
            <div class = "clearfix"></div>
            </div>
        <?php endif; ?>
       
    <?php endif; ?>
    </div>
<?php */?>
Расширения для JoomShopping | Ссылка на Телеграм-канал | Сайты и магазины под ключ: Дизайн, Верстка, Программирование (расширения на заказ), СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ (5+) и JoomShopping 5+
*

Evgenii_web

  • Захожу иногда
  • 137
  • 1 / 1
display: none;
Не проще ли CSS-стилями скрыть блок (display: none;):

Код
<div class="jshop_list_category">
   ...
</div>

Ну или закомментировать код в шаблоне:

Код
<?php /*?>
<div class="jshop_list_category">
    <?php if (count($this->categories)) : ?>
   
        <?php foreach ($this->categories as $k => $category) : ?>
            <?php if ($k % $this->count_category_to_row == 0) : ?>
                <div class = "row-fluid">
            <?php endif; ?>
       
            <div class = "sblock<?php echo $this->count_category_to_row;?> jshop_categ category">
                <div class="sblock2 image">
                    <a href = "<?php print $category->category_link;?>">
                        <img class = "jshop_img" src = "<?php print $this->image_category_path;?>/<?php if ($category->category_image) print $category->category_image; else print $this->noimage;?>" alt="<?php print htmlspecialchars($category->name);?>" title="<?php print htmlspecialchars($category->name);?>" />
                    </a>
                </div>
                <div class="sblock2">
                    <div class="category_name">
                        <a class = "product_link" href = "<?php print $category->category_link?>">
                            <?php print $category->name?>
                        </a>
                    </div>
                    <p class = "category_short_description">
                        <?php print $category->short_description?>
                    </p>
                </div>
            </div>
           
            <?php if ($k % $this->count_category_to_row == $this->count_category_to_row - 1) : ?>
                <div class = "clearfix"></div>
                </div>
            <?php endif; ?>
        <?php endforeach;?>
       
        <?php if ($k % $this->count_category_to_row != $this->count_category_to_row - 1) : ?>
            <div class = "clearfix"></div>
            </div>
        <?php endif; ?>
       
    <?php endif; ?>
    </div>
<?php */?>
Ну я в CSS не силен знаю только основы и куда копать, (когда мне он нужен то я открываю толстый справочник по css) типо так <div class="jshop_list_category" style="display: none;"> просто далекие в коде как я вас сразу не поймут))) Это вдруг кому нибудь нужно будет и фреймворка под рукой не будет , как у меня например)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Вывод 3-х первых картинок в списке товаров категории

Автор rudoy24

Ответов: 30
Просмотров: 11988
Последний ответ 19.07.2024, 11:41:28
от juleczka
Разные шаблоны для отдельных категорий и товаров

Автор dmitry.pr

Ответов: 118
Просмотров: 37236
Последний ответ 15.12.2022, 08:57:44
от nevigen
Вывод товаров из всех подкатегорий на странице категории

Автор Faina

Ответов: 351
Просмотров: 67195
Последний ответ 09.09.2022, 10:12:52
от kit2m2
Вырезать вывод картинок с категориями и названиями в category_default.php

Автор Evgenii_web

Ответов: 5
Просмотров: 880
Последний ответ 26.01.2020, 15:27:14
от Evgenii_web
Вывод категорий

Автор helpmeplz

Ответов: 3
Просмотров: 991
Последний ответ 15.05.2019, 11:12:27
от helpmeplz