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

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Вот сделал в магазине возможность выгрузить заказ в csv, а оттуда через обработку ЗагрузкаДанныхИзТабличногоДокумента.epf в 1С загнать не проблема. Так же здесь встроен импорт с атрибутами и с картинками.
Для того чтобы все работало надо заменить все ваши файлы файлами из архива и в папку components\com_jshopping\files\importexport\simpleexportutf8\ положить пустой файл order_item.csv.
Ссылка для скачивания http://webfile.ru/5791212
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
У одной папки было неверное название вот новая ссылка http://webfile.ru/5791221
*

Geetler

  • Осваиваюсь на форуме
  • 45
  • 4 / 0
Вот сделал в магазине возможность выгрузить заказ в csv, а оттуда через обработку ЗагрузкаДанныхИзТабличногоДокумента.epf в 1С загнать не проблема. Так же здесь встроен импорт с атрибутами и с картинками.
Для того чтобы все работало надо заменить все ваши файлы файлами из архива и в папку components\com_jshopping\files\importexport\simpleexportutf8\ положить пустой файл order_item.csv.
Ссылка для скачивания http://webfile.ru/5791212

Я вообще не понимаю кто придумал бредовую идею выгрузки через файлы, используйте прямой доступ, обработка сервером десятка тысяч записей идет в 2 секунды:
мое сообщение из соседней ветки:
Цитировать
1С 8.2.14 позволяет напрямую подключать к БД MySQL, тем самым я использую не только прямую выгрузка любых данных необходимых мне, например используя компонент BreezingForms я выгружаю записи, отправленные для регистрации ПО.
С JS я выгружаю покупателей, адреса, заказы, т.е. все необходимые мне поля, которые не нужно переносить руками.
Кто-то считает это неправильно, отчасти я тоже считаю неправильно выгружать с сайта, а не на сайт из 1с, но возможно это правильно если у вас только интернет магазин без реальной продажной точки, плюс ко всему - корректные картинки.
Конечно тут нужно знать программирование 1с, но оно значительно проще для логики чем php

Кусок обрабоки запроса:
Код
//Установить соединение с сайтом
Попытка
ПараметрыСоединенияССайтом = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединенияССайтом.СтрокаСоединения= "
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=*******;
|PORT=********;
|DATABASE=*********;
|UID=************;
|PWD=***************;";
ВнешниеИсточникиДанных.СайтАктивация.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССайтом);
ВнешниеИсточникиДанных.СайтАктивация.УстановитьСоединение();
Запрос = Новый Запрос("ВЫБРАТЬ
                      | jos_facileforms_records.id,
                      | jos_facileforms_records.submitted,
                      | запрос_version.version,
                      | запрос_username.username,
                      | запрос_email.email,
                      | запрос_serial.serial,
                      | запрос_license.license,
                      | запрс_pcid.pcid,
                      | jos_facileforms_records.id КАК new,
                      | jos_facileforms_records.id КАК comment
                      |ИЗ
                      | ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_records КАК jos_facileforms_records
                      | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      | jos_facileforms_subrecords.value КАК pcid,
                      | jos_facileforms_subrecords.record КАК record
                      | ИЗ
                      | ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_subrecords КАК jos_facileforms_subrecords
                      | ГДЕ
                      | jos_facileforms_subrecords.name = ""pcid"") КАК запрс_pcid
                      | ПО jos_facileforms_records.id = запрс_pcid.record
                      | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      | jos_facileforms_subrecords.value КАК serial,
                      | jos_facileforms_subrecords.record КАК record
                      | ИЗ
                      | ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_subrecords КАК jos_facileforms_subrecords
                      | ГДЕ
............. и т.д. таблицы в запросе при подключении внешних источников данных в конфигураторе настраиваются, т.е. можно выбрать для выгрузки только те поля, которые нужны, далее уже с эти записями зная язык 1с вы можете с этими данными делать все что угодно, создавать контрагентов с адресами, проверять на дубли и т.д.
Исключение
Сообщить ("Невозможно установить соединение с сайтом в " +ТекущаяДата());
Конецпопытки;
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Цитировать
/Установить соединение с сайтом
Попытка   
ПараметрыСоединенияССайтом = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединенияССайтом.СтрокаСоединения= "
|DRIVER={MySQL ODBC 5.1 Driver};
|SERVER=*******;
|PORT=********;
|DATABASE=*********;
|UID=************;
|PWD=***************;";
ВнешниеИсточникиДанных.СайтАктивация.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССайтом);
ВнешниеИсточникиДанных.СайтАктивация.УстановитьСоединение();
Запрос = Новый Запрос("ВЫБРАТЬ
                      |   jos_facileforms_records.id,
                      |   jos_facileforms_records.submitted,
                      |   запрос_version.version,
                      |   запрос_username.username,
                      |   запрос_email.email,
                      |   запрос_serial.serial,
                      |   запрос_license.license,
                      |   запрс_pcid.pcid,
                      |   jos_facileforms_records.id КАК new,
                      |   jos_facileforms_records.id КАК comment
                      |ИЗ
                      |   ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_records КАК jos_facileforms_records
                      |      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |         jos_facileforms_subrecords.value КАК pcid,
                      |         jos_facileforms_subrecords.record КАК record
                      |      ИЗ
                      |         ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_subrecords КАК jos_facileforms_subrecords
                      |      ГДЕ
                      |         jos_facileforms_subrecords.name = ""pcid"") КАК запрс_pcid
                      |      ПО jos_facileforms_records.id = запрс_pcid.record
                      |      ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                      |         jos_facileforms_subrecords.value КАК serial,
                      |         jos_facileforms_subrecords.record КАК record
                      |      ИЗ
                      |         ВнешнийИсточникДанных.СайтАктивация.Таблица.jos_facileforms_subrecords КАК jos_facileforms_subrecords
                      |      ГДЕ
............. и т.д. таблицы в запросе при подключении внешних источников данных в конфигураторе настраиваются, т.е. можно выбрать для выгрузки только те поля, которые нужны, далее уже с эти записями зная язык 1с вы можете с этими данными делать все что угодно, создавать контрагентов с адресами, проверять на дубли и т.д.
Исключение
   Сообщить ("Невозможно установить соединение с сайтом в " +ТекущаяДата());
Конецпопытки;

Это как внешнюю обработку в 1с делать?
*

Geetler

  • Осваиваюсь на форуме
  • 45
  • 4 / 0
Да, внешнюю или нет это не важно, но это конечно обработка. У меня еще стоит автоматическое выполнение обработки каждые 600сек.
В общем спрашивайте, я 1с очень даже неплохо знаю

Вот неплохая статья
http://www.miko.ru/blogs/SwordBlog/52/
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Статья интересная, но там  1С 8.2 в которой  есть  Внешние источники данных. а как быть если 1С 8.1 Ут ред 10.3 там такого нет
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Выдает ошибку "Тип не определен (ПараметрыСоединенияВнешнегоИсточникаДанных)
ПараметрыСоединенияССайтом = Новый <<?>>ПараметрыСоединенияВнешнегоИсточникаДанных; "
на строке ПараметрыСоединенияССайтом = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Я так понимаю в 1С 8.1 Ут ред 10.3 нужно использовать функцию
Код
Функция HTTPУстановитьСоединение(СтруктураПараметровСайта) Экспорт

Соединение = НеОпределено;

ИнтернетПрокси = НеОпределено;

Если СтруктураПараметровСайта.ПроксиИспользование Тогда

ИнтернетПрокси = Новый ИнтернетПрокси;
ИнтернетПрокси.Пользователь = СтруктураПараметровСайта.ПроксиИмяПользователя;
ИнтернетПрокси.Пароль = СтруктураПараметровСайта.ПроксиПароль;

Если СтруктураПараметровСайта.ПроксиПорт = 0 Тогда
ИнтернетПрокси.Установить("HTTP", СтруктураПараметровСайта.ПроксиСервер);
Иначе
ИнтернетПрокси.Установить("HTTP", СтруктураПараметровСайта.ПроксиСервер, СтруктураПараметровСайта.ПроксиПорт);
КонецЕсли;

КонецЕсли;

Порт = ?(ЗначениеЗаполнено(СтруктураПараметровСайта.Порт), СтруктураПараметровСайта.Порт, 80);
Попытка

Соединение = Новый HTTPСоединение(СтруктураПараметровСайта.Сервер, Порт, СтруктураПараметровСайта.ИмяПользователя, СтруктураПараметровСайта.Пароль, ИнтернетПрокси);

Исключение

ОбщегоНазначения.СообщитьОбОшибке("Не удалось установить соединение с сервером " + СтруктураПараметровСайта.Сервер + ":" + Строка(СтруктураПараметровСайта.Порт) + ".
|Проверьте правильность адреса сервера, порт, имя пользователя и пароль.");

Соединение = Неопределено;

Конецпопытки;

Возврат Соединение;

КонецФункции
Только пока до конца не понял как. Буду разбираться
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Кой что получилось на следующей неделе выложу
*

FiNsvoy

  • Захожу иногда
  • 79
  • 0 / 0
  • За хороший совет могу заплатить.
А в 1с версии 7.7 есть возможность реализовать такую автоматическую загрузку данных на сайт в интернет-магазин?
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Можно переделать мою обработку, но пока такого в планах не было
*

Crazyperson

  • Новичок
  • 2
  • 0 / 0
xDD добрый день, а не могли бы вы ссылку из первых постов обновить?! А то не работает.

*

Sni10

  • Захожу иногда
  • 110
  • 5 / 0
  • I am a law abiding citizen . . .
А в 1с версии 7.7 есть возможность реализовать такую автоматическую загрузку данных на сайт в интернет-магазин?

Присоединяюсь к вопрошающему. Интересует версия экспорта под семерку. Да и JS уже троечка стоит.

Да и ссыли в обоих постах мертвы (

#"А если за бабки?" (с) не помню кто )
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Присоединяюсь к вопрошающему. Интересует версия экспорта под семерку. Да и JS уже троечка стоит.

Да и ссыли в обоих постах мертвы (

#"А если за бабки?" (с) не помню кто )

Могу написать данную выгрузку под заказ. Люди уже интересовались, трудоемкость обозначал не устроило
*

xDD

  • Захожу иногда
  • 300
  • 4 / 0
Трудоемкость зависит от варианта исполнения.
Можно пойти двумя путями.
Первый вариант  делать выгрузку из интернет магазина заказов в формате XML, а потом обработку загрузки их в 7.7.
Второй вариант делать напрямую подключение из 7.7 к интернет магазину и запросами вытягивать информацию.
*

guffy

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Модераторы, подскажите пожалуйста, вошел в ступор, не понимаю что делать дальше, переношу сайт с другого движка на Joomla 2.5. - на сайте 15 000 фотографий (вместе с дополнительными) все фотографии имеют Уникальное название в формате "000000.jpg" - основное, "000000-1.jpg" - первое доп. фото, в Базе товаров помимо артикула и наименования, есть доп. поле, совпадающее с Номером фото, как и что можно придумать, на мой взгляд все ДОП. Фото жолжны быть в отдельной папке, Основные - в отдельной, превьюшки - отдельной, где нужно прописать, чтоб Joomla искала фото не в ...com_jshopping/images а в указанных папках (превью, доп., основное).
 Написал в эту ветку, т.к. ОБМЕН данными, планируется делать через прямой коннект 1С к MySQL, спасибо, заранее благодарен, можно связаться, для обсуждения деталей, бонусов, благодарствования ;)
*

nevigen

  • Moderator
  • 10449
  • 863 / 25
  • http://n*****n.com
1 ни один импорт не тянет картинки из файлов.
если есть хлс файл то можно воcпользоваться импортом COMIEL  (платным)но картинки должны быть загружены на сайт, предварительно, в папку.
папка изображений в ЖШ одна для всех и малых и средних и больших.
если синхронизация непосредственно 1С-ЖШ, то коммерческий импорт/экспорт есть.
там вы уже отпостились насколько я помню.
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Синхронизация Интернет-магазинов и 1с

Автор MiksRUS

Ответов: 5
Просмотров: 1622
Последний ответ 17.09.2014, 20:16:19
от dmitry_stas
Импорт областей из одного магазина в другой

Автор buto

Ответов: 0
Просмотров: 1044
Последний ответ 17.05.2014, 20:41:42
от buto