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

kot488

  • Захожу иногда
  • 53
  • 0 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1080 : 05.11.2013, 13:26:43 »
Если помог, принято ставить плюс!Видимо да, я пользуюсь полной выгрузкой.

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

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1081 : 05.11.2013, 13:29:21 »
не хочется сразу в код вывода лезть(
Тут вы правы, я у себя в шаблоне изменял.
*

kot488

  • Захожу иногда
  • 53
  • 0 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1082 : 05.11.2013, 14:38:02 »
Тут вы правы, я у себя в шаблоне изменял.

Подскажите пожалуйста а когда планируете новую версию выложить?
*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1083 : 05.11.2013, 14:54:18 »
Понял.
Я конечно понимаю что не в тему но может подскажите, под каждым изображением показывается его описание, может подскажите где скрыть это, заколупался уже искать, не хочется сразу в код вывода лезть(
В файле components/com_virtuemart/assets/css/vmsite-ltr.css указать

.vm-img-desc {
display: none;
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1084 : 05.11.2013, 14:59:33 »
Подскажите пожалуйста а когда планируете новую версию выложить?
Новую версию обещал Amatoravg
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1085 : 05.11.2013, 18:09:02 »
А как поставить плюс?
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1086 : 06.11.2013, 09:01:04 »
У того, кому хотите поставить, есть значки + и -.
Если вы их не видите, возможно у вас ещё мало сообщений.
*

vadim_m

  • Новичок
  • 2
  • 0 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1087 : 06.11.2013, 16:49:04 »
У меня Joomla Версия 1.5.23 VirtueMart 1.1.9 stable 1С8.2 Управление торговлей, редакция 11.0 (11.0.9.15)
обновили 1С до версии 11.1(11.1.2.8) перестал выгружать информацию на сайт.
Стал разбираться новая версия CommerceML была 2.04 сейчас 2.05.
Будет выгрузка работать или нужно "переписывать скрипт" под CommerceML 2.05?
« Последнее редактирование: 06.11.2013, 20:15:23 от vadim_m »
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1088 : 08.11.2013, 19:34:56 »
Да и еще картинки выгружаются в images/stories/virtuemart/product/import_files/ и там остаются, а в /images/stories/virtuemart/category/ и /images/stories/virtuemart/product пусто, из за этого ошибка в медиа файлах(vmError: Couldnt create thumb, file not found), выгружал 2000 товаров, все выгрузились без ошибок.

Тоже столкнулся с такой проблемой при выгрузке большого числа товаров. Удалось ли победить эту проблему?
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1089 : 08.11.2013, 20:07:33 »
Снес папку import_files, проблема решилась сама собой, файлы начали в корень снова записываться   yes!
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1090 : 09.11.2013, 13:44:05 »
Господа, как и обещал, выкладываю свою сборку с новыми возможностями.


НОВЫЕ ВОЗМОЖНОСТИ И ИЗМЕНЕНИЯ В ВЕРСИИ 2.1.1.Amator


1) Исправлена проблема с дробным весом - изначально вес загружался как целое число, отсекалась дробная часть.

2) Добавлен перенос свойств - свойства должны иметь простой тип (строка, число), так как для хранения сложных типов в VM нет отдельной таблицы. Поддерживается выгрузка неограниченного количества доп. свойств!

3) Нормальная выгрузка производителя - производитель заводится так же как доп. свойство, и должен иметь тип Справочник! (Контрагенты, Значения свойств объектов и т. п.). Свойство должно называться "производитель", если хотите по-другому, нужно запустить на вашем сайте vmshop_1c.php и отредактировать параметр VM_MANUFACTURE.

4) Выгрузка двойных картинок поправлена - Неправильно подставлялись пути к каталогу.

5) Выгрузка цен поправлена - менялись названия реквизитов в таблицах VM, начиная с версии 2.0.14.

6) Добавлен перенос габаритов товара - для загрузки габаритов (Длина, Ширина, Высота) в стандартные реквизиты товара VM, а не как доп. свойства, нужно добавить эти реквизиты аналогично весу в справочник Единицы измерения, и внести дополнения в код модуля обработки ОбменССайтом: (функция РИ_ЗаполнитьСписокЗначенийРеквизитовТовара):

Код
Если ЗначениеЗаполнено(ВыборкаНоменклатуры.Вес) Тогда

ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Вес", мКоэффициентПересчетаВесаТоваровВГраммыДляОбменаССайтом * ВыборкаНоменклатуры.Вес);
КонецЕсли;
//+Аматор
Если ЗначениеЗаполнено(ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Длина) Тогда
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Длина", ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Длина);
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Ширина) Тогда
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Ширина", ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Ширина);
КонецЕсли;
Если ЗначениеЗаполнено(ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Высота) Тогда
ДобавитьЗначениеРеквизитаВСписок(СписокЗначенийCML, "Высота", ВыборкаНоменклатуры.ЕдиницаХраненияОстатков.Высота);
КонецЕсли;
//-Аматор

 

7) Реализована выгрузка скидок номенклатуры (установленных документом "Установка скидок номенклатуры"). Сам процент скидки не хранится, Цена со скидкой расчитывается при загрузке и записывается в поле product_override_price.

8 ) При загрузке заказов в 1с в номер теперь подставляется Номер, а не Ид заказа, как было раньше.

9) Реализована выгрузка описаний для категорий (поле Комментарий, его необходимо сделать доступным не только для элементов, но и для групп номенклатуры в 1С). В процедуру ВыгрузитьОсновныеРеквизитыГруппыДляКлассификатора необходимо добавить:

Код
//+Аматор
ДобавитьУзелCML(БуферCML, "Комментарий", ФорматНаименованияДляCML(Группа.НоменклатураСсылка.Комментарий));
//-Аматор



Данная версия скрипта будет работать только с VM2, последних версий (думаю, начиная с 14й). VM1 - не поддерживается. Так же скорее всего не будет работать выгрузка характеристик номенклатуры. Тестировал обмен с УТ 10.3.24 - VM 2.0.24 (JM 2.5). Не исключено, что будет работать и с УПП, и УТ 11, но не проверял.

Скачать сие творение можно отсюда:
http://infostart.ru/public/236338/
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1091 : 09.11.2013, 14:04:59 »
А выложить сюда религия не позволяет?
Тот сайт для программистов. Этот для всех.
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1092 : 10.11.2013, 00:27:29 »
А тут что, разве не программисты тусуются?
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1093 : 10.11.2013, 10:12:49 »
Тут 90% людей далеких от программирования, пытающихся что то сделать своими руками и получить помощь, если что то не получается.
И меньше 1% людей пытающихся заработать на том, что получили даром. Как правило такие очень быстро отсюда исчезают.
Если хотели помочь сообществу выкладывайте сюда, если нет - проходите мимо.
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1094 : 10.11.2013, 14:02:32 »
Заработать? Какбе денег я за нее не прошу.
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1095 : 10.11.2013, 14:03:56 »
В чем проблема выложить сюда?
Здесь люди и протестируют и подскажут что изменить или добавить.
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1096 : 10.11.2013, 14:07:41 »
Мне нужны публикации на инфостарте. Думаю, скачать бесплатно с инфостарта - нормальное вознаграждение за несколько дней работы над допиливанием этой штуки. А беплатного доступа на инфостарт в наше время нет только у лентяя ИМХО. А так да, если покопаться в интернетах, можно увидеть, что на основании этих скриптов многие ребята делают платные решения и толкают их за реальные деньги.
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1097 : 10.11.2013, 14:15:56 »
Ну нет так нет.
Если вам там очки нужны, так чего вы здесь то делаете?
Отсюда исходники берете, ещё и решения других за свои выдаете.
А беплатного доступа на инфостарт в наше время нет только у лентяя ИМХО.
Вы же меня не знаете, а грубите. Ну не нравится мне тот ресурс, совсем не нравится.
*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1098 : 10.11.2013, 21:49:47 »
версия скрипта 2.0.9
заметил, что в конце ссылок категорий и товаров появились _cid_№категории  и _pid_№продукта
они добавляются при выгрузке. Как я понимаю они прописываются в category.php и product.php. Но что там подправить не могу сообразить.

Подскажите, как избавиться от _cid_№категории  и _pid_№продукта в ссылках?
« Последнее редактирование: 10.11.2013, 22:45:45 от Alex2 »
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1099 : 11.11.2013, 07:04:43 »
версия скрипта 2.0.9
заметил, что в конце ссылок категорий и товаров появились _cid_№категории  и _pid_№продукта
они добавляются при выгрузке. Как я понимаю они прописываются в category.php и product.php. Но что там подправить не могу сообразить.

Подскажите, как избавиться от _cid_№категории  и _pid_№продукта в ссылках?

Я бы не советовал избавляться :) эта штука помогает в том случае, когда у вас одинаковое название у некоторых товаров, чтобы slug после транслитерации не дублировался. Более того, вчера столкнулся с ошибкой у автора, когда при обновлении базы товаров (VM_DB = нет)  _pid_№продукта не подставляется, и команда UPGRADE выдавала ошибку как раз именно из за дублирующихся наименований. Я исправил эту ошибку у себя в версии 2.1.2_А. Если вам все же нужно убрать это, думаю, несложно, замените в файле product.php такие вещи:
 $slug = $data['slug']."_pid_".$produkt_id;

 на

$slug = $data['slug'];
*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1100 : 11.11.2013, 07:25:46 »
У меня одинаковых наименований быть не должно, а id в ссылках очень раздражает.
Спасибо за подсказку.
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1101 : 11.11.2013, 10:08:25 »
Цитировать
Я бы не советовал избавляться :)
Избавиться нужно обязательно ВСЕМ!
Особенно тем кто только начинает пользоваться данным скриптом.
Исправить нужно в двух файлах: product.php убрать pid, и в файле category убрать cid.
Да это создает некоторые неудобства: нужно следить чтоб не было одинаковых наименований продуктов и категорий.
Но это в дальнейшем избавит вас от кучи ошибок 404.
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1102 : 11.11.2013, 15:40:13 »
Просвятите, а откуда могут появиться такие ошибки? Мое предположение - это только то, что при обновлении pid пропадает (пропадал до исправления этой ошибки), получается действительно битая ссылка. А следить за тем, чтобы наименование было всегда уникальным... ну простите, это же не код, УИН или артикул... если в прайсе поставщика несоклько тысяч позиций, и он постоянно обновляется, зачем себе ставить такие ограничения?

p.s. Как собсно я исправил ошибку в product.php:

заменил

$update['slug'] = "`slug`='".(string)$data['slug']."'";

на

$update_ln['slug'] = "`slug`='".(string)$data['slug']."_pid_".$rows->virtuemart_product_id."'";
« Последнее редактирование: 11.11.2013, 15:54:18 от Amatoravg »
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1103 : 11.11.2013, 15:45:23 »
Просвящать охота пропала, лучше дать ссылку на какой нить платный ресурс :)
Если серьёзно, скоро поймете сами.
*

Amatoravg

  • Осваиваюсь на форуме
  • 20
  • 1 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1104 : 11.11.2013, 15:55:52 »
Как исправить ошибку - написал выше. Насчет горячо нелюбимого вами инфостарта - напишите там один пост, и получите бесплатно доступ. Делов то?
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1105 : 11.11.2013, 16:05:23 »
Избавиться нужно обязательно ВСЕМ!
Написал я это не просто так, и потратил времени на это наверно больше чем вы, т.к. не программист.
Как исправить ошибку - написал выше.
У себя исправил давно.
По поводу горячо любимого вами сайта, мои убеждения менять наверно уже поздно.
Лучше напишу несколько десятков постов здесь, чем один там.
*

vadim_m

  • Новичок
  • 2
  • 0 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1106 : 12.11.2013, 17:02:16 »
В УТ 10.3, 11.0 выгрузка работает с версии УТ11.1 CommerceML 2.05
добавилась выгрузка производителя
Пример выгрузки двух товаров "Товар 1" и "Товар 2" производителя "ХХХ":
<Изготовитель>
      <Ид>8622269c-5ffe-11e2-ba78-f46d049e3b98</Ид>
      <Наименование>XXX</Наименование>
                <ОфициальноеНаименование>XXX</ОфициальноеНаименование>
</Изготовитель>
Выгружается только один товар производителя "XXX"
2013-11-12<---->11:15:31<------>-<----->192.168.168.1>-<----->Этап 4.1.2) Создаем категорию  12345
2013-11-12<---->11:15:31<------>-<----->192.168.168.1>-<-----> 4.1.2) Категория и все ее подкатегории созданы
2013-11-12<---->11:15:31<------>-<----->192.168.168.1>-<----->--------------Добавляем товар: XXX--------------
2013-11-12<---->11:15:31<------>-<----->192.168.168.1>-<----->Этап 4.1.3) Товар - XXX добавлен
2013-11-12<---->11:15:31<------>-<----->192.168.168.1>-<----->Этап 4.1.3) Обновляем товар id - 1, наименование - XXX
Все последующие товары производителя "ХХХ" только обновляются, не добавляются.

Если у товаров не указан производитель то выгрузка работает нормально.
Подскажите есть у кого опыт в решении этой проблемы?
*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1107 : 12.11.2013, 23:34:11 »
Joomla! 2.5.16
VM 2.0.24
скрипт 2.0.9

1. Не выгружает остаток по товарам.
2. При выгрузке изменений, к обновляемым товарам, добавляется дополнительная цена, а должна просто обновляться.
При каждом обновлении, цен у товара становится все больше.


Вопрос снят, разобрался.
« Последнее редактирование: 13.11.2013, 09:21:31 от Alex2 »
*

Autocom

  • Захожу иногда
  • 306
  • 3 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1108 : 13.11.2013, 09:59:48 »
2. При выгрузке изменений, к обновляемым товарам, добавляется дополнительная цена, а должна просто обновляться.
При каждом обновлении, цен у товара становится все больше.
Вопрос снят, разобрался.
Где, что изменяли? Наверняка пригодится многим.
*

Alex2

  • Захожу иногда
  • 113
  • 6 / 0
Re: 1C УТ 8.x <-> VirtueMart по протоколу CommerceML
« Ответ #1109 : 13.11.2013, 10:32:31 »
Где, что изменяли? Наверняка пригодится многим.
1. В 1С, в настройке обмена, убрал галочку "Выгружать остатки по складам". У меня несколько складов, видимо подгружал нулевой остаток с последнего склада.
2. В файле offers.php после кода
            $ins->product_price = (string)$price;
            $ins->product_currency = (string)$val;
            $ins->product_price_publish_up = "0";   
            $ins->product_price_publish_down = "0";
            $ins->price_quantity_start = "0";
            $ins->price_quantity_end = "0";
добавил
$query = 'DELETE FROM #__' . $dba['product_price_db'] . ' WHERE virtuemart_product_id = \''. (int)$product_id . '\'';
                                $db->setQuery($query);
                                $result = $db->query();
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как импортировать файл XML в Joomla VirtueMart?

Автор Кот Смюлан

Ответов: 2
Просмотров: 5185
Последний ответ 14.07.2016, 18:40:24
от Berzerker
Обсуждение бесплатного компонента импорта-экспорта товаров VirtueMart "CSV Improved 1.9"

Автор danklassik

Ответов: 14
Просмотров: 17297
Последний ответ 18.02.2016, 10:21:33
от Storm
Перенос товаров с сайта на сайт (оба на joomla+virtuemart)

Автор fedorkit

Ответов: 8
Просмотров: 14311
Последний ответ 31.01.2016, 22:09:30
от Messir
VirtueMart 1.1.3 stable - выгрузка товаров в яндекс.маркет

Автор zufar

Ответов: 690
Просмотров: 172811
Последний ответ 05.02.2015, 16:39:22
от newjey
Описание полей таблиц в базе данных VirtueMart

Автор EmDmAl

Ответов: 39
Просмотров: 39805
Последний ответ 30.01.2015, 16:15:38
от nick71