Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #10
Fi1osof
12 января 2016, 10:11
0
Модерацию пакет прошел еще вчера, но пока не опубликован. Сказали публикация готовится. Скорее всего сегодня опубликуют. Вот ссылка modstore.pro/packages/import-and-export/modimporter (пока не рабочая, но как заработает, значит опубликовали :))
Fi1osof
12 января 2016, 09:35
0
Будьте уверены — сможет. С учетом того, на сколько хорошо я знаю MODX, здесь гарантируется максимальная техническая поддержка. К примеру, на сегодня в каталоге наибольшее количество продаж у компонента mSync/mSklad. Читаем кто что здесь пишет по нему. И вот пример. «Обращался в тех. поддержку, мне не смогли помочь».
Я уверен, у нас любые подобные вопросы будут решаемы.
Fi1osof
11 января 2016, 21:49
0
Опубликовал анонс modx.pro/solutions/7559-component-modimporter-import-setting-on-the-website/
Завтра пакет должен уже быть опубликован, модерацию он прошел.
Fi1osof
11 января 2016, 16:51
0
Так может пора уже допилить и опубликовать? :) Работает же.
Fi1osof
10 января 2016, 16:39
+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] =>
)
Fi1osof
09 января 2016, 17:30
0
Он уже обрабатывает данный файл. Это ваш расширяющий процессор. То есть компонент задает общую логику и функционал (а это уже более 1000 строк php + JS-клиент). По мере того, как компонент будет докручиваться, объем кода в подобных расширяющих процессорах будет доходить до нуля. Свои преобразования можно будет выполнять и на уровне плагинов на создание/обновление документов.
Конечно объекты, плагины и т.п. — все это более тяжеловесно, но именно для этого и была поставлена важная задача — пошаговость выполнения. Таким образом и 100 000 товаров можно будет импортировать без особых проблем. Но зато будет полная гибкость в управлении импортом и универсальность под индивидуальные проекты. К примеру, если у вас на создание товаров имеется какой-то плагин (обрезающий картинки или типа того), импорту об этом можно ничего не знать. Он отправляет голые данные на процессор сохранения товара, там уже вызываются все стандартные события и срабатывают ваши плагины.
Fi1osof
09 января 2016, 17:17
+1
Вот ваш файл для импорта: gist.github.com/Fi1osof/05159325add272ef3640
Сами решите сложный он для вас или нет.
Сейчас прописано только чтение категорий и товаров (и из них только основные данные). Добавить чтение остальных полей — дело техники.
Заодно пару логических ошибок у себя поправил и добавил пошаговость при импорте товаров. Вот результат импорта: joxi.ru/LmGVQx0uRJQR3r
Как видите, все ваши категории он прочитал и сохранил в БД за 9 секунд. На то же самое для 1000 товаров уходит ~2 сек.
Итого 562 категории и 19829 товаров.
joxi.ru/a2XVypGuyDE13r
Железо: 2 ядра, 1Гб, SATA. Стандартные настройки.
Fi1osof
09 января 2016, 15:44
0
Да, получил. Щас поиграюсь и отвечу.
Fi1osof
09 января 2016, 15:37
0
Нет, демо-версии не будет, так как вы правильно говорите, что исходные файлы будут разные, и даже если мы дадим пользователям возможность залить свои файлы для теста, не факт, что они корректно распарсятся (хотя ShopModx1C довольно нормально дергал основную информацию, включая картинки, не раз его использовали). Но информационную поддержку в настройке под свои нужды будем гарантировать. А так, в случае с тем же XML, у нас описывается схема для парсинга (будет вынесено в конфиги, где в JSON описать можно будет), например:
$schema = array(
«КоммерческаяИнформация» => array(
«Каталог» => array(
«Товары» => array(
«Товар» => array(
«parse» => true,
),
),
),
),
);
То есть даже если у вас не стандартная разметка, ридер легко адаптируется под нужную структуру.
Fi1osof
09 января 2016, 15:23
0
Создание/обновление документов будет через родные процессоры MODX-а (resource/create | resource/update). Поэтому импортировать можно что угодно во что угодно, в том числе и в минишоп/шопкипер. Вообще мы сейчас ориентируемся именно на универсальность.
Fi1osof
09 января 2016, 15:01
0
P.P.S. ваш вариант тоже скорее всего возьму за основу для отдельного ридера. Спасибо.
Fi1osof
09 января 2016, 15:00
0
Советы других не мусор. Но вот это сложно за совет принять: «Подправить файл csv.php, и будет тебе счастье;-)».
Это из серии «Подправьте чистый MODX, и вы получите крутой сайт».
Вот то, что вы сейчас написали, это больше походит на совет. А если вы это еще и в готовое решение оформите, это будет уже вообще респект. Тем более, что видимо для вас не составит это труда.

На моем импортере свет клином не сошелся. Но, во-первых, в нем не только чтение, но и пошаговость, и готовый Ajax-интерфейс.
Второе — унифицированные таблицы для временных данных.
Третье — несколько тысяч товаров он как запросто кушает. joxi.ru/a2XVypGuyDnW0r
Так что кому-то он сможет больше пригодиться, чем просто совет.

P.S. Чуть позже опубликую релиз. Но вы все равно соберите и выложите свой пакет, он наверняка много кому пригодится.
Fi1osof
09 января 2016, 14:09
0
Вы сколько импортеров из XML написали с нуля? Из csv.php для этих целей можно будет взять буквально одну строчку: $modx->runProcessor(). Остальное в нем — это чтение данных из CSV. Но еще раз: XML — это не CSV. CSV читается построчно, и здесь все очень просто (разве что можно наткнуться на различные разделители и кодировки, но это все решается). И даже гигабайтовый файл можно прочитать, если таймлимиты позволят. А XML — это совсем другая история. Если вы хотя бы 10-тимегабайтовый файл попробуете скушать за раз SimpleXML-ом (который позволяет более просто с этими данными работать), то у вас и 128 метров оперативки на пых вряд ли хватит, скрипт развалится. А приходилось сталкиваться и с файлами гораздо больше. Тут надо поточный XML-парсер использовать, к примеру тот же XMLReader. Но это уже разбор построчный, и это гораздо сложнее.
Если вы понимаете о чем я, то будет вам и понятна моя реакция на вашу «помощь» топикстартеру. Вам ничего не стоит написать одну строчку такого крутейшего совета. А человек пойдет и неделю сейчас без толку убьет.
Хотите мне возразить? Выкатите свой готовый XML-импортер, даже если он платный будет.
Fi1osof
09 января 2016, 13:54
+1
Это был сарказм и ответ не требовался.
Fi1osof
09 января 2016, 13:47
0
Ну да, на это я уже внимание не обратил.
Fi1osof
09 января 2016, 13:42
+5
Скачать
Скоро в пору на modx.pro будет писать рекламу «Скачать бесплатно и без СМС». Вам не стыдно? Все четко пишут «Доступен в магазине» или типа того. Выглядит уже так, как будто клики набиваете.
Fi1osof
09 января 2016, 13:38
0
Если еще не победили эту задачу, на следующей недели опубликую новый пакет. Это довольно универсальный импортер, с довольно приятными плюшками. Там помимо прочего будет и выгрузка из 1С/XML. Будет пакет стоить для начала 1500 рублей. Но вам бонусом могу предложить помощь в настройке именно под ваш проект (чтобы полноценный YML-парсер добавить).
Интрига: joxi.ru/823OeZKC6D13l2
Fi1osof
09 января 2016, 13:35
0
Вы серьезно? По вашему разница между CSV и XML такая ничтожная?
Fi1osof
08 января 2016, 18:45
+1
Считайте, что и я залил шелл. Нет здесь принципиально разницы.