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

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0

1. Дай пример, попробую
2.
Не понял про модули. Если ты имеешь ввиду разную структуру товаров, то можно и в одном файле всё задать. Рзмежёвывать структуры обработчиком
типа (синтаксис не соблюдаю)
Код
Товар
Артикул|Название|Цена товара|Описание|Вес
....товары по этой маске....
Товар
Артикул|Название|Цена товара|Описание|Размер
....товары по этой маске....

Для теста взял пример файлов оратора писавшего выше: http://joomlaforum.ru/index.php/topic,8340.msg87750.html#msg87750
Там в параметрах четко есть Единица измерения. Место под нее уже определено, с родным загрузчиком на 'product_unit' срабатывало. В чем может быть причина?

2. Угу, понял, значит можно все в один файл по очереди записать с разными заголовками. Разъясните пожалуйста, а как привязываются значения параметров к наименованиям товаров. Если я правильно понял, то по тому, в какой строке от заголовка информация расположена? Т.е. если в разделе Товары первым идет "подушка зеленая", то информация о параметрах будет взята из первой строчки после заголовка Параметры?
Благодарю за помощь! ;)
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Да, по умолчанию в самом начале поле Единицы измерения в родном загрузчике тоже не добавлялись. Пришлось сделать в browse.php после

Код
$flypage = $db_browse->sf("category_flypage");

                if (empty($flypage)) {
                        $flypage = FLYPAGE;
                }

это

Код
$product_id = $db_browse->f("product_id");
$sql = "SELECT * FROM `jos_vm_product` WHERE `product_id`='$product_id'";
$res = mysql_query($sql);
$out = mysql_fetch_array($res);
$my_product_unit = $out[product_unit] ;

и после

Код
$product_cell = str_replace( "{product_name}", shopMakeHtmlSafe( $product_name ), $product_cell );

это

Код
$product_cell = str_replace( "{my_product_unit}", $my_product_unit, $product_cell );

Помогло, стло показывать. А выводим эту заглушку в шаблоне оформления browse_*.php - ( {my_product_unit} )
может быть проблема именно в my_product_unit??

*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
убрал везде my_.. Не помогло.  Если просто оставить product_unit, то он в нужном месте вместо шт. пишет {product_unit}. Очень жду помощи! Заранее благодарен!
*

morph

  • Давно я тут
  • 924
  • 105 / 0
AlexanderAndreev,
1)как понял вам нужно загрузить и вывести Еденицу измерения.Но какую?
там где "см." - заноситься в плое базы product_lwh_uom
там где "кг." - заноситься в поле базы  product_weight_uom
там где "шт." - заноситься в поле базы  product_unit
это соответственно поля в загрузке от tug(beta 5):
"Единица измерения размеров" - для "см." (файл ps_simple_csv_aliases сторка 'Единица измерения размеров' => 'product_lwh_uom',)

"Единица измерения веса" - для  "кг." (файл ps_simple_csv_aliases сторка 'Единица измерения веса' => 'product_weight_uom',)
и....

"product_unit" - для "шт." (файл ps_simple_csv_aliases сторка 'product_unit' => 'product_unit',)
тоесть для загрузки "product_unit" - для "шт." - в файле csv пишите "product_unit" или поправьте в файле ps_simple_csv_aliases строку 'product_unit' => 'product_unit', на ,допустим,'Еденица измерения' => 'product_unit', и пишите тогда в csv файле "Еденица измерения"
2) с выводом этих значений в списке товаров или во флаере - другой вопрос.Да,их можно выводить через запрос к базе данных и описанием своей заглушки.-тот пример  писал для product_unit.как обозвать my_product_unit - не имеет разницы - это вами самими вводимая переменная - главное к какому полю вы в базе данных обращаетесь и выводите его значение.
По поводу вывода значений на страницах товара - в соответствующий раздел форума здесь или на forum.virtuemart.ru.
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
morph, спасибо за подробный ответ! Попробую, отпишу результат.
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
morph,
Уфф, заработало :) Ещё раз спасибо огромное за помощь! Два раза уже выручил ;)
Немного затупил в одном месте. Почему-то подумал, что product_unit нужно вставлять в Параметры, а не Товары.. и естественно оно не показывалось, а в пункте Товары сразу всё получилось :)
Копаю дальше, на очереди картинки, несколько цен, ну и по мелочам :)
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Вопрос:
Для подбора по характеристикам нужен параметр "Новинка". Можно наверно сделать для присвоить значение руками, а по истечению времени актуальности, удалять значение. Но вот как бы сделать чтобы это было автоматом, по прошествии определенного кол-ва дней. Имеет ли смысл заморачиваться этим?
« Последнее редактирование: 17.02.2008, 13:31:35 от AlexanderAndreev »
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
И еще вопрос.
Вставляю сразу много позиций в csv. В графе описаний есть большие пробелы между строками. Там где они есть, на той строке ступор:
"Уведомление: Не удалось найти обработчик Древесина бука, хлопок, лен, сизаль..". Хотя это просто сплошной текст, но перед ним влезают пробелы. Убираешь - все нормально. Как бы это все поправить в Open Office?

Привет. а почему на странице простого импорта csv по умолчанию флажок разделителя стоит на ";". Может сделать, чтобы он по умолчанию стоял сразу на "|"? Напишите где и что в РНР коде подправить надо :)

===================
Вопрос: я прописываю в "Цена товара" соотв. цену. после заливки цены нету. пробовал вместо "цена товара" ставить изначальный атрибут, та же ситуация.

Код
Товары||||||
Артикул|Наименование товара|Цена товара|sklad|Путь до родительской категории товара|Полное описание|Большое изображение
1|марка1, 45 мф|4,70000|40,00; 180,00|Конденсаторы/оксидные|Полное описание для этого конденсатора находится тут|
2|марка2, 45 мф 10В|5,20000|52,00; 200,00|Конденсаторы/пленочные||


при добавление это пишется

Инфо: Строка 3
Категория 1 успешно добавлена. 1|Конденсаторы
Категория 2 успешно добавлена. 2|оксидные
Товар успешно добавлен. 1|марка1, 45 мф
Товар успешно обновлен. 1|марка1, 45 мф
Время выполнения: 0.1459 сек.
« Последнее редактирование: 02.03.2008, 02:24:25 от Дельфинка »
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Дельфинка,
1. В administrator\components\com_virtuemart\html\product.simple_csv_upload.php
есть код, который за это отвечает. Ставь, что хочешь
          <td valign="top" width="5%" <?php ( $show_fec ) ? 'colspan="2"' : ''; ?>>
            <input type="radio" name="csv_delimiter" value="," /><span class="sectionname">,</span><br />
            <input type="radio" name="csv_delimiter" checked="checked" value=";" /><span class="sectionname">;</span><br/>
            <input type="radio" name="csv_delimiter" value="other" /><input type="text" name="other_delimiter" size="1" value="|" />
          </td>

2. попробуй цену через точку писать.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
AlexanderAndreev
Цитировать
Для подбора по характеристикам нужен параметр "Новинка". Можно наверно сделать для присвоить значение руками, а по истечению времени актуальности, удалять значение. Но вот как бы сделать чтобы это было автоматом, по прошествии определенного кол-ва дней. Имеет ли смысл заморачиваться этим?
Есть товары по спец.условиям, что можно подать, как новинку. Есть модуль, который выводи несколько последних товаров, но он не имеет смысла при большом прайсе, который импортируется.
Можно добавить тип товара, который будет за это отвечать, но тогда ты никак юзеру не покажешь, где именно новинка, пока он в сам товар не зайдёт и в параметрах не прочтет.
Если использовать товары по спец. условиям, то можно написать скрипт, который будет в зависимости от текущей даты галочку спец. условий убирать. А вставить его можно куда угодно, хтоть отдельным пунктом меню в ВМ добавить. ИМХО, заморачиваться ради красоты не стОит, разве что есть необходимость.

Цитировать
Вставляю сразу много позиций в csv. В графе описаний есть большие пробелы между строками. Там где они есть, на той строке ступор:
"Уведомление: Не удалось найти обработчик Древесина бука, хлопок, лен, сизаль..". Хотя это просто сплошной текст, но перед ним влезают пробелы. Убираешь - все нормально. Как бы это все поправить в Open Office?
При считывании из CSV читается строка. И только так. Перенос строки в тексте описания отделить от нового товара очень сложно. Разве что проверять, после переноса идёт один из возможных обработчиков, или нет. Если нет, то строки соединять. Гм, идея родилась :-)
Но это надо расширение править.
Переносы строк в ОО убрать надо автозаменой, по-моему \n заменить на пробле (попробуй с вкл. и выкл. регулярными выражениями).
В ворде символ абзаца ^p или символ разрыва строки ^l тоже автозаменить на пробел.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

При попытки очистить базу появляется ошибка:

=========
Неправильный
Product type name table has not been removed
=========
Что это такое?

[вложение удалено Администратором]
« Последнее редактирование: 02.03.2008, 17:30:06 от Дельфинка »
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Дельфинка
Цену всё-таки можно указывать и через запятую, и через точку. Попробовал у себя.

Не понял про очистку базы. Каким образом происходит попытка? В какой программе?
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

Дельфинка
Цену всё-таки можно указывать и через запятую, и через точку. Попробовал у себя.
Не понял про очистку базы. Каким образом происходит попытка? В какой программе?
Очистка происходит через стандартный экспорт/импорт csv ( с ключом "очиска базы") - такая ошибка вылетает. я вот заметил что после удаления базы, а затем модуля и компонента виртуемарта осталась эта таблица в бд:

jos_vm_product_type_1

-------------------------
Блин. я уже не знаю что делать. не вставлялась цена - я сносил вирт компонент и ставил модуль - все работало. сейчас сделал то же самое - уже опять цена не вставляеются (((((

Добавляю эту таблицу

Код
Товары				
Артикул Наименование товара Цена товара Путь до родительской категории товара Полное описание
1 con11111 47,5 Конденсаторы/тип1 Описание
2 con22222 36.2 Конденсаторы/тип2
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Дельфинка
Стандартную очистку не пробовал. Да и не относиться это в теме расширения.

Я твой код пробовал, у меня работает.
А товары из админки открой и посмотри, у них там какие-нибудь цены есть?
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

А товары из админки открой и посмотри, у них там какие-нибудь цены есть?

нету, не импортировалось. и точкой ставил. и запятой. в админке ставил разделитель цены  и точку и запятую (хотя при экспорте там все равно точка стоит).

ради интереса решил стандартным модулем экспорт сделать. потом им же сделал импорт - выдало ошибку))))))) не догоняю в чем тут дело. в базе может, аль вирт такой.

у меня Ravenswood + joomla 1.0.12, обновленная до 13 + com_virtuemart_13a + mod_virtuemart_1.0.7 + simple_csv_1_beta_5 с последними изменениями.
« Последнее редактирование: 02.03.2008, 21:15:12 от Дельфинка »
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Ты какое расширению юзаешь? Версия какая?
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

Ты какое расширению юзаешь? Версия какая?

у меня Ravenswood + joomla 1.0.12, обновленная до 13 + com_virtuemart_13a + mod_virtuemart_1.0.7 + simple_csv_1_beta_5 с последними изменениями.
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Не знаю, я в чём может быть проблема. Файлы расширения из архива замени.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

нету импорта. сделаю проще. снесу всю джумлу и поставлю заново. конструктор лего... =)

смеюсь  и плачу)))  в "Информация о магазине" я не выставил "валюта = рубль". выставил - заработало. Правда сайт снес все равно.

Спасибо огромное вам всем, а также создателю Simple CSV  ^-^
« Последнее редактирование: 02.03.2008, 22:56:14 от Дельфинка »

Warning: set_time_limit() has been disabled for security reasons in /home/a7802126/public_html/administrator/components/com_virtuemart/classes/ps_simple_csv.php on line 49

разделение 500 и 25 стояло по умолчанию.

прайс из 1848 строк.
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
А как это отражается на результатах импорта?
Попрообуй другий разделения, поменьше, если проблемы с результатом.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

Код
Параметры									
Тип Наименование в базе Наименование Описание Номер по порядку Тип параметра Возможные значения Множество значений Значение по умолчанию Единица измерения
Компоненты k_sklade Складская стоимость F руб.
Ввожу это в импорте, но не могу найти в базе данных.
Я хочу вывести в shop.browse.php на страничке "browse" мой атрибут k_sklade, а также product_in_stock.
Если дефолтный product_in_stock можно найти  в базе, то атрибут я так и не нашел. где он прописывается (в какой таблице (в атрибутах у меня пусто))... Копался в базе - нету. В экспорте тоже нету. в флайере тоже не видел атрибуты...
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Вот тот код, ты так и импортируешь, как подал?
У тебя там табы, по-моему, на не | разделителями...
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

Люди подскажите как в примере от Tug сделать чтобы в прайс добавлялось кол-во товара?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
IpiS
Попробовал у себя код:
Код
Товары|||||
Артикул|Наименование товара|Цена товара|Путь до родительской категории товара|Полное описание|Количество в продаже
1|con11111|48.2|Конденсаторы/тип1|Описание|10
2|con22222|38.5|Конденсаторы/тип2||20
количество импортируется
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Чтобы связанные товары при импорте не затирались в файле
administrator\components\com_virtuemart\classes\ps_simple_csv.php
ориентировочно в строке (у меня строки из-за правок давно поплыли) 979
После:
Код
        // Присваиваем значения выборке из базы
        foreach( $csv_data as $key => $value ) {
          //if($db_data[$key]) $db_data[$key] = $value;
          $db_data[$key] = $value;
        }
добавил:
Код
		/*##my Додаю для того, аби супутні товари не затирались. Старт ##200802281852*/
$q  = "SELECT related_products FROM #__{vm}_product_relations ";
$q .= " WHERE product_id='".$db_data['product_id']."'";
$db->query($q);
if( $db->num_rows() ) {$db_data_related_products[] = $db->loadResult();}
$db_data["related_products"]=$db_data_related_products;
/* Кінець ##200802281852 */
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?

Вот тот код, ты так и импортируешь, как подал?
У тебя там табы, по-моему, на не | разделителями...
Это так показывается, поидее у меня там все в соотв. столбце

Код
Параметры|||||||
Тип|Наименование в базе|Наименование|Описание|Номер по порядку|Тип параметра|Возможные значения|Множество значений
Компоненты|k_sklade|Складская стоимость|||F||

P.S.: нашел... теперь буду думать, как это все обозначить в shop.browse, но это уже не в этой ветке.



[вложение удалено Администратором]
« Последнее редактирование: 07.03.2008, 16:09:41 от Дельфинка »
*

AlexanderAndreev

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Gruz, благодарю за пояснения. Наверно сделаю просто ещё тип для новинок и этим ограничусь. А то сайт уже "золотой" вышел :)....

Проблема делаю загрузку файла а мне сообщение Веб-узел отклонил запрос на отображение этой веб-страницы
 HTTP 403 
   Возможные причины:
Для доступа к этому веб-узлу требуется выполнить вход.
 
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Хак] Ускорение загрузки магазина (минимум в 10 раз)

Автор ifx

Ответов: 66
Просмотров: 40753
Последний ответ 15.01.2020, 10:38:34
от ChaosHead
Модификация поиска

Автор Александр216

Ответов: 7
Просмотров: 1609
Последний ответ 19.03.2013, 23:54:51
от Александр216
Расширяний вид админки через сайт

Автор ranaza

Ответов: 1
Просмотров: 1343
Последний ответ 25.08.2012, 11:50:30
от ranaza
Модификация browse_listtable.tpl.php

Автор Servelatin

Ответов: 0
Просмотров: 1340
Последний ответ 15.05.2012, 16:23:23
от Servelatin
Без оплаты через сайт, наличными при получении

Автор doroshenkok

Ответов: 0
Просмотров: 1474
Последний ответ 13.03.2012, 10:29:48
от doroshenkok