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

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
*

buslle

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Я извиняюсь за количество вопросов, многое ещё вообще не понимаю.
в файле vm_ext_search_helper.php пытаюсь заменить

Код
$q .= "ORDER BY #__{vm}_product.product_id DESC "; 

на

Код
$q .= "ORDER BY #__{vm}_product.product_price "; 

и  у меня выходит сообщение, что поиск не дал результатов.

Подскажите пожалуйста, что я делаю не так. Уже всю голову сломала  >:(
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Поля product_price нет в таблице #__{vm}_product, оно в другой таблице.
*

buslle

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Спасибо большое за подсказки. Опытным путём все получилось! yes!
*

Niko1

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Большое спасибо за модуль. Очень полезная штука!
Если не тяжело, подскажите, пожалуйста. Вот когда заходишь в категорию. В селекте активной стает сразу та, в которую вошел. Как это сделать, когда заходишь в производителя? То есть зашел на производителя и в селекте данный производитель стоял активным?
*

checker

  • Осваиваюсь на форуме
  • 40
  • 1 / 0
делаю выбор категории через кнопки сайта
столкнулся с проблемой не знания аякса а именно:
echo '<input type="hidden" name="catid[]" value="7" />';
в данном конкретно случае значение записано жестко, однако мне необходимо его привязать к результату работы getCat():
function getCat()
{
var temp= new Array();
temp = document.URL.split('/');
switch (temp[7]){
case 'billboards':
return '7';
break;
case 'super-sites':
return '8';
break;
case 'city-format':
return '9';
break;
default:
alert ('error');
break;
}
}
как я понял необходимо отправить переменную catid в POST
а потом получить её перед использованием как то так:
$catid[] = $_POST['catid[]'];
однако я это не умею.
Помогите пожалуйста
*

Arkadiy

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

Niko1

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Большое спасибо за модуль. Очень полезная штука!
Если не тяжело, подскажите, пожалуйста. Вот когда заходишь в категорию. В селекте активной стает сразу та, в которую вошел. Как это сделать, когда заходишь в производителя? То есть зашел на производителя и в селекте данный производитель стоял активным?
Аркадий, помогите пожалуйста. Я готов купить платный модуль. 500 рублей за такой продукт - это смешные деньги. Но мне нужна гарантия, что выше описана штука будет в нем работать. Там вроде несложная задача для программиста... Если подскажите как  реализовать данную фичу в платном. Покупаю сегодня же:)
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
500 руб. платится за изделие в таком состоянии, какое есть, если что-то не устраивает, то это отдельные деньги, и уже не такие небольшие. Задачи на заказ стоят на порядок больше чем стандарт.
*

Niko1

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Все. Проблему решил самостоятельно. Может кому пригодится:
Заходим в файл components\com_vm_ext_search_free\files\unisearch.php
Функцию(в районе 170 строки):
Цитировать
function list_manufacturer($data, $mf_id, $vid = '', $prefix='') {
        print '<label for="mf_id[]" class="catf_label">производитель </label>';
        print '<select class = "filter" name="mf_id[]" onchange="'.$prefix.'mfChangeMulti()">';
        print '<option value="">все</option>';
        foreach ($data as $item) {
            $selected = '';
            if (!empty($mf_id) && in_array($item->manufacturer_id, $mf_id)) $selected = 'selected="selected"';
            print '<option value="'.$item->manufacturer_id.'" '.$selected.' >'.$item->mf_name.'</option>';
        }
        print '</select>';
    }
заменяем на:
Цитировать
    function list_manufacturer($data, $manuf_id, $mf_id, $vid = '', $prefix='') {
      $manuf_id = JRequest::getVar('manufacturer_id', null);
        print '<label for="mf_id[]" class="catf_label">производитель </label>';
        print '<select class = "filter" name="mf_id[]" onchange="'.$prefix.'mfChangeMulti()">';
        print '<option value="">все</option>';
        foreach ($data as $item) {
            $selected = '';
            if ($manuf_id == $item->manufacturer_id) $selected = 'selected="selected"';
            print '<option value="'.$item->manufacturer_id.'" '.$selected.' >'.$item->mf_name.'</option>';      
        }
        print '</select>';
    }

$manuf_id = JRequest::getVar('manufacturer_id', null); - это конечно лишний запрос, но что уж поделать...
Еще остается сделать:
Цитировать
1)Как можно добавить выбор количества товаров в результатах поиска?
2)Как можно не переходить в корзину при нажатии кнопки купить, а только передавать туда выбранный товар?
Но, как утверждает автор, это реализовано в платном модуле.
Прежде чем покупать, хотел еще спросить. Как я писал выше, мне надо что бы при входе в категорию, была выбрана в селекте та категория, в которой мы находимся. Здесь это реализовано. Реализовано ли это в платном модуле и используется ли там функция, которую я правил выше, то есть я смогу сделать автоматический выбор производителя в зависимости от того, в каком производителе мы находимся?
Спасибо.
« Последнее редактирование: 25.11.2011, 21:29:08 от Niko1 »
*

Niko1

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Купил полный компонент. Все пока устраивает. Выше описанные задачи решил. Есть, правда еще один вопрос. Но его задам в теме с компонентом.
*

checker

  • Осваиваюсь на форуме
  • 40
  • 1 / 0
Можно ли каким-нибудь образом отключить фильтрование вариантов для выбора?
Т.е. чтобы все. предоставленные варианты отображались в любом случае, если поиск не принёс результатов - вывести " Поиск не дал результатов."
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Можно, если разбираешься в php, алгоритм придется переделывать, а это не две строчки ковырнуть. Либо подыскать другой более подходящий модуль.
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
в index.php используемого шаблона дивом. в итоге должно получиться так:
Код
<div id="main_search">
         <jdoc:include type="component" />
</div>
Тогда этот див будет присутствовать на любой странице, а результаты поиска будут заменять выводимое содержимое.

Не могу понять как его вставлять в index.php
При вставке, ломается весь шаблон и результаты поиска "разлетаются" по всей странице.
Если не вставлять, кнопка "поиск" не выводит результаты, но модуль присутствует на всех страницах. Может это из-за того что март 1.1.13?
Кто-нибудь, подскажите пожалуйста где ковырять.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Нет, это скорее всего из-за криво сверстанного шаблона.
*

Dimass-91

  • Новичок
  • 5
  • 0 / 0
Arkadiy, а так же форумчане , вечер добрый.
Помогите с настройкой модуля чтоб связать с базой и параметрами товаров.
Связка есть только с производителем и типов товара, а остальные поля пустые, и при выборе производителя выдает ошибку.
Joomla 1.5.11 Вирта 1.1.9 stable 
Буду очень благодарен. Оч нужна помощь....
« Последнее редактирование: 06.12.2011, 20:59:37 от Dimass-91 »
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
Шаблон стандартный Ja_purity... вроде почти ничего не переделывал  :(
Спойлер
[свернуть]
Спасибо, буду искать ошибки.
*

Dimass-91

  • Новичок
  • 5
  • 0 / 0
Так вроде разобрался, просто не было цены у товара , сайт в виде каталога , добавил цену , и скрыл, стали отображаться товары .
*

Dimass-91

  • Новичок
  • 5
  • 0 / 0
Как заместо поиска по артиклю сделать поиск по названию товара!
Подскажите пожалуйста...
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
Как заместо поиска по артиклю сделать поиск по названию товара!
Так в Joomla есть же стандартный поиск, он и есть по названию.
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
Нет, это скорее всего из-за криво сверстанного шаблона.
Спасибо, разобрался... Верстка ни при чем, мозг медленно включался ;D. Работает! Супер! Спасибо!
*

Dimass-91

  • Новичок
  • 5
  • 0 / 0
Так в Joomla есть же стандартный поиск, он и есть по названию.

Эт то понятно.
Хотелось бы в одном модуле реализовать.
*

Dimass-91

  • Новичок
  • 5
  • 0 / 0
Цитировать
$mf_name=$ps_product->get_mf_name($db->f("product_id"))

Здесь что-т о есть http://joomlaforum.ru/index.php/topic,69642.msg509259/topicseen.html#msg509259 , но не реализовал..=(((
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
Поюзал... много глюков  >:( переделать страницу вывода поиска в табличную не смог, мозга не хватает  crazy! Однако, нарыл на просторах нечто похожее: Allancer's VirtueMart Advanced Search Module. Сделано хорошо, с полем обычного поиска (как спрашивал Dimass-91). Выводит найденное в browse по умолчанию магазина. Ставится тоже компонент с модулем в паре. И все бы хорошо, но одна беда! Ссылки на товар прописаны неверно, при переходе по ссылке открывает 404 ошибку.
Просьба огромная! Пожалуйста, кто-нибудь, скажите где ее поменять. Не могу найти  !
Посмотреть можно тут:
Спойлер
[свернуть]
___________________
Написал разработчику в support, но они пока молчат. Ссылка показывает неверный путь: "www.site.domen/www.site.domen=?page=shop...." а должно быть "www.site.domen/index.php?page=shop...." Не могу нигде найти как изменить.  !  >:(
___________________
Ау, есть тут кто. Неужели никто не поможет  ! На всякий случай прикладываю www.opt-light.ru/mod_alc_vm_search_unzip_first.zip модуль.
« Последнее редактирование: 11.12.2011, 12:24:51 от Romaha »
*

Romaha

  • Захожу иногда
  • 56
  • 1 / 0
*

zzaj

  • Осваиваюсь на форуме
  • 47
  • 0 / 0
Спасибо вам за проделанную работу!

Решил установить компонент себе на сайт, но столкнулся с проблемой:

модуль отображается, только криво, +нет строки для ввода, а при выборе ктегории окошко поиска становится серым (как  будто неактивным), при нажатии на "поиск" ни чего не происходит.

еще 1 вопрос: можно сделать так, чтом он искал исключительно Точные значения запроса? Например при запросе 666555, чтоб в результатах не было 555, 666, 5556 и т.п. ( Ответ нашел здесь) - не помогло

Да, и вот еще. возможно реализовать поиск только по описанию, только по артикулу + по типу для всех ?
« Последнее редактирование: 21.12.2011, 19:37:52 от zzaj »
*

Sedoy

  • Давно я тут
  • 897
  • 87 / 10
  • Интересно,в какой кодировке пишут врачи?
вопрос такого порядка:
в шаблонах где <jdoc:include type="component" /> находиться в index.php все отрабатывает нормально
но в шаблонах (проверял на трех) где <jdoc:include type="component" /> сидит в component.php и шаблоны на фреймфорке модуль не отрабатывает, т.е. конструкция:

<div id="main_search">
         <jdoc:include type="component" />
</div>

не срабатывает - вывода нет

а вот если искать через компонент - все отлично работает

никто не сталкивался с таким и как это решить?

шаблон фришный, выложить не могу размер не позволяет, ссыла http://www.youjoomla.com/free-joomla-downloads-95.html
Joomla 1,5
Ver 1.9
Что б правильно задать вопрос - нужно знать на него ответ!
FAQ по Joomla!
Где скачать шаблоны Joomla Статьи и обзоры Желаю Вам здоровья в личной жизни - живите долго и часто :)
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
В темплейте вхождения <jdoc:include type="component" /> встречаются в файлах
\layouts\layout1.php
\layouts\layout2.php
\layouts\layout3.php
\layouts\mobile\yjsg_handheld.php
\layouts\mobile\yjsg_iphone.php
\component.php

(пути относительно каталога шаблона), из них не надо делать обрамление только в \component.php, в остальных надо.
*

Sedoy

  • Давно я тут
  • 897
  • 87 / 10
  • Интересно,в какой кодировке пишут врачи?
сенкс...
я то искал по <jdoc:include type="component" />, а в тех файлах "component"  / на пробел больше и ТС мне их не показывал... во мля...
еще раз сенкс
Что б правильно задать вопрос - нужно знать на него ответ!
FAQ по Joomla!
Где скачать шаблоны Joomla Статьи и обзоры Желаю Вам здоровья в личной жизни - живите долго и часто :)
*

isay777

  • Захожу иногда
  • 54
  • 0 / 0
И еще ошибка при попытке поиска:

Notice: Undefined index: product_ids in Z:\home\site\www\components\com_vm_ext_search_free\files\vm_ext_search_helper.php on line 40

Это только у меня такой винегрет?!
Ребят, прошу, очень прошу (умоляю >:() - выложите рабочую версию.





Была эта же ошибка решил проблему так.

Заменил строку №40
на

$product_ids = vmGet($_REQUEST, 'product_ids', '');

Вроде все заработало




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

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 23290
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10376
Последний ответ 14.01.2021, 00:09:53
от gartes
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53916
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 28016
Последний ответ 25.10.2016, 15:03:07
от Igoritaly
Поиск для магазина автозапчастей как на Exist.ru!

Автор zzaj

Ответов: 21
Просмотров: 8831
Последний ответ 11.05.2016, 13:50:02
от Pahom72