Fi1osof

Fi1osof

Был в сети 15 февраля 2026, 22:30
Заказы не принимаю
0
0
+2
Он не только выглядит приятней, но и тот же юзер-агент сразу подставляет. github.com/modxcms/revolution/blob/2.x/core/model/modx/rest/modrestcurlclient.class.php#L123
Можно в консоли такое выполнить:
$client = $modx->getService('rest.modRestCurlClient');
print $client->config[modRestClient::OPT_USERAGENT];
Собственно, можно и свой клиент передавать.
$client = $modx->getService('client', 'rest.modRestCurlClient');
$result = $client->request('https://ya.ru', '/', 'POST', $params = array('foo'  => 'foo'), array(
    "curlopt_useragent" => "my-user-agent",
));
Это будет юзер-агент для каждого запроса индивидуально. А можно при инициализации клиента задать базовый.
$client = $modx->getService('client', 'rest.modRestCurlClient', null, array(
    "userAgent" => "user-agent",
));
print $client->config[modRestClient::OPT_USERAGENT];
Вообще имеет смысл исходный код класса почитать. Кто с курлом работает, поймет, что там все необходимое есть.

UPD: Вот так даже наглядней
$client = $modx->getService('client', 'rest.modRestCurlClient', null, array(
    "userAgent" => "user-agent",
));
unset($client->modx);
print_r($client);
Ответ:
modRestCurlClient Object
(
[config] => Array
(
[port] => 80
[timeout] => 30
[path] => /
[userAgent] => user-agent
)

[conn] =>
[response] =>
[responseType] => xml
[host] =>
)
0
Он уже обрабатывает данный файл. Это ваш расширяющий процессор. То есть компонент задает общую логику и функционал (а это уже более 1000 строк php + JS-клиент). По мере того, как компонент будет докручиваться, объем кода в подобных расширяющих процессорах будет доходить до нуля. Свои преобразования можно будет выполнять и на уровне плагинов на создание/обновление документов.
Конечно объекты, плагины и т.п. — все это более тяжеловесно, но именно для этого и была поставлена важная задача — пошаговость выполнения. Таким образом и 100 000 товаров можно будет импортировать без особых проблем. Но зато будет полная гибкость в управлении импортом и универсальность под индивидуальные проекты. К примеру, если у вас на создание товаров имеется какой-то плагин (обрезающий картинки или типа того), импорту об этом можно ничего не знать. Он отправляет голые данные на процессор сохранения товара, там уже вызываются все стандартные события и срабатывают ваши плагины.
+1
Вот ваш файл для импорта: gist.github.com/Fi1osof/05159325add272ef3640
Сами решите сложный он для вас или нет.
Сейчас прописано только чтение категорий и товаров (и из них только основные данные). Добавить чтение остальных полей — дело техники.
Заодно пару логических ошибок у себя поправил и добавил пошаговость при импорте товаров. Вот результат импорта: joxi.ru/LmGVQx0uRJQR3r
Как видите, все ваши категории он прочитал и сохранил в БД за 9 секунд. На то же самое для 1000 товаров уходит ~2 сек.
Итого 562 категории и 19829 товаров.
joxi.ru/a2XVypGuyDE13r
Железо: 2 ядра, 1Гб, SATA. Стандартные настройки.
0
Нет, демо-версии не будет, так как вы правильно говорите, что исходные файлы будут разные, и даже если мы дадим пользователям возможность залить свои файлы для теста, не факт, что они корректно распарсятся (хотя ShopModx1C довольно нормально дергал основную информацию, включая картинки, не раз его использовали). Но информационную поддержку в настройке под свои нужды будем гарантировать. А так, в случае с тем же XML, у нас описывается схема для парсинга (будет вынесено в конфиги, где в JSON описать можно будет), например:
$schema = array(
«КоммерческаяИнформация» => array(
«Каталог» => array(
«Товары» => array(
«Товар» => array(
«parse» => true,
),
),
),
),
);
То есть даже если у вас не стандартная разметка, ридер легко адаптируется под нужную структуру.
0
Создание/обновление документов будет через родные процессоры MODX-а (resource/create | resource/update). Поэтому импортировать можно что угодно во что угодно, в том числе и в минишоп/шопкипер. Вообще мы сейчас ориентируемся именно на универсальность.
0
0
Вы сколько импортеров из XML написали с нуля? Из csv.php для этих целей можно будет взять буквально одну строчку: $modx->runProcessor(). Остальное в нем — это чтение данных из CSV. Но еще раз: XML — это не CSV. CSV читается построчно, и здесь все очень просто (разве что можно наткнуться на различные разделители и кодировки, но это все решается). И даже гигабайтовый файл можно прочитать, если таймлимиты позволят. А XML — это совсем другая история. Если вы хотя бы 10-тимегабайтовый файл попробуете скушать за раз SimpleXML-ом (который позволяет более просто с этими данными работать), то у вас и 128 метров оперативки на пых вряд ли хватит, скрипт развалится. А приходилось сталкиваться и с файлами гораздо больше. Тут надо поточный XML-парсер использовать, к примеру тот же XMLReader. Но это уже разбор построчный, и это гораздо сложнее.
Если вы понимаете о чем я, то будет вам и понятна моя реакция на вашу «помощь» топикстартеру. Вам ничего не стоит написать одну строчку такого крутейшего совета. А человек пойдет и неделю сейчас без толку убьет.
Хотите мне возразить? Выкатите свой готовый XML-импортер, даже если он платный будет.
+5
Скачать
Скоро в пору на modx.pro будет писать рекламу «Скачать бесплатно и без СМС». Вам не стыдно? Все четко пишут «Доступен в магазине» или типа того. Выглядит уже так, как будто клики набиваете.
0