Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: появился новый модуль по правке цен через XML
osCommerce по-русски. Форум. > Дизайн и программирование > Базы данных, Easy Populate
stepby
исходник -http://www.oscommerce.com/community/contributions,3318

Этот модуль позволяет обновлять следующие поля: products_name (в соответствии с текущим языком), products_quantity, products_price (в соответствии с валютой по-умолчанию), products_date_available, products_status
Редактировать XML-файла возможно с помощью любого XML-редактора, например XML Marker (http://xmlmarker.com).
Домашняя страница этого модуля http://MetaShop.ru



Кто уже поставил из продвинутых - скажите ламеру ваше мнение.
Спасибо!
Kurt
Что-то я сомниваюсь что Виталий стал свою разработку бесплатно раздовать.

Да, stepby, причем тут раздел XT-COMMERCE ?
a_berezin
Тоже не понял при чём здесь ХТ, а модуль мне понравился. Очень.
makcw
Модуль хороший.
Только что-то с кодировкой....
makcw
В XML Marker нужно было выбрать кирилический набор символов wink.gif
a_berezin
Да классный модуль! Я всё своё выбросил! И уже под дзен завёл!
P.S. Может быть модераторы тему передвинут?
Kurt
a_berezin, xaoc2 и Farmer - не частые наши гостиsad.gif
makcw
Тема точно не помешает...
Модуль не кушает некоторые символы, к примеру "&"...
И неплохо бы пару полей добавить и чтобы после успешного "Upload" было что-то типа "Все хорошо,стоко дабавлено,стоко-то обновлено"...
gkj
Отличный модуль!!! Спасибо автору.
Подскажите пожалуйста, как в него добавить поля "описание" и "картинка товара"?
Незнама
смотрю на него сейчас
скрипт сейчас обрабатывает секции

<products_id>1</products_id>

а как его научить понимать атрибуты

<offer id="1">

или может уже есть скрипт импорта yml-файла?
magvis
Цитата(a_berezin @ 4.7.2005, 19:59) *
Тоже не понял при чём здесь ХТ, а модуль мне понравился. Очень.


Хотелось бы тоже посмотреть но в контрибутах ничего уже не лежит.
Где еще можно его качнуть?
Незнама
см. первый пост!
magvis
Цитата(Незнама @ 15.1.2006, 20:22) *
см. первый пост!


Спасибо! Уже нашел.
Незнама
нашел документацию к <phpXML/>, но из нее так и не понял, как добраться до атрибута
http://www.phpclasses.org/browse/package/180.html
Незнама
кому интересно http://www.zvon.org/xxl/XPathTutorial/Outp...s/example5.html
Незнама
научил этот скрипт импортировать yml в магазин + импорт картинок и нарезка на popup_images, thumbnail_images, info_images.

вопрос к программистам. как в скрипте во время импорта сделать паузу? например, имеем файл с 30.000 товаров (offer). после импорта 200 товаров скрипт должен сделать паузу, скажем на 20 секунд и затем продолжить работу.
a_berezin
sleep
Незнама
так и думал. (: только не пойму, как его применить в моем случае.
надо посчитать сколько отработано и уснуть. так?
a_berezin
Цитата(Незнама @ 19.1.2006, 15:15) *
так и думал. (: только не пойму, как его применить в моем случае.
надо посчитать сколько отработано и уснуть

"Забыться, умереть, уснуть и видеть сны, быть может..." (с)

Разумеется. Примерно так:
Код
define('XML_UPLOAD_STEP', 200);
define('XML_UPLOAD_SLEEP', 20);
...
$upload_count = 0;
<цикл>
  ...
  if($upload_count == XML_UPLOAD_STEP) {
    sleep(XML_UPLOAD_SLEEP);
    $upload_count = 0;
  }
  $upload_count++;
</цикл>
Константы можно через админ.
Незнама
Спасибо, Андрей!
и Гамлету тоже (:
a_berezin
smile.gif
dabserver
никто не подскажет - сабж спасет при задаче обновить 8-10 тысяч товаров? или с такими количествами кроме phpadmin ничего не поможет?
Незнама
> сабж спасет при задаче обновить 8-10 тысяч товаров

по собств. опыту ДА!
VaM
Так и easypopulate тоже спасёт, также по собственному опыту.
Разве что если у товаров большие описания, наверное придётся разделить на несколько кусков общий файл.
Но EP это сам делает, т.е. делит файлы на куски.
dabserver
Vam
я наверно криворукий ламер или не хватает понимания и знаний или хостера выбрал не ахти (хоть и нахваливаю его тут , не называя при этом адреса) -
EP в идеале мне приходится делить на файлы с не больше чем 900 продуктов! тогда спасает! длинных описаний нет! (в одной части я точно ламер - у меня нет офлайн копии магазина - всё меняю онлайн (апдейтю через phpmyadmin) - разные каталоги движков, одна база (слава богу лишние поля не вредят дефолтному или рабчему osc))
Незнама
спасибо за ответ - заранее извиняй - буду пробовать, и 99% обращаться с вопросами! (правда когда пробовать начну не знаю - я щас себе "рисую" контрибут - Продажа упаковками по простейшей идее - юзер ввел кол-во упоковок, а я получил заказ в штуках (и в корзину юзера разумеется кол-во попало в штуках!, такого в контрибтах нет!)) smile.gif часть с выводом и реализацией этого в product_listing и order_products закончил (правда с учетом наличия multi products (1129 если не ошибаюсь) ), и пока юзер может нарушить упаковку при персчете корзины, но я к тому же еще и csv с заказом получаю, который поднимаю в офлайн систему (не osc) которая в свою очередь может окрулять кол-во до упаковки ) ... ну да ладно, отвлекся уже smile.gif
dabserver
нету что то модуля по указанному адресу, нашел только osCommerce.XML 0.6 (Easy Populatealte alternative)

3604 номер у этого, не оно?
dabserver
отвечу сам себе - это оно.

наконец то добрался - посмотрел.
первое впечатление - быстро и просто...,

НО - наткнулся на какую то точку не срабатывания! смешно даже!

1094 позиций товаров (не строк файла - а именно кол-во продуктов) обработать может, а 1095 - уже нет!
причем дело не в размере файла (сокращал названия элементов, выигрывал до 60% размера xml файла, но не помогло), пробовал скачать группу и не меняя файл вообще скормить обратно - опять то же самое, не зависимо от размера файла - обрабатывает не больше 1094, если больше - ничего не происходит - вылетаю на обычное невозможно загрузить страницу, либо бесконечное открытие страницы ...
размеры файла при этом - до 300 кб, ограничение на аплоад хостером - 2 мб.

никто не подскажет в какую сторону копать?
(на хостере mtw - php 4.3 , mysql 3.23)
Незнама
скорее всего ограничение хостинга, но точно не скрипта
dabserver
Незнама

т.е. модуль за раз всё таки может например запросто съесть ~8500 продуктов ~1,5 меговым файлом и все обновить?
если так -
нет ли мыслей какое у меня может быть ограничение на хостинге? хостер позволяет поменять большинство параметров, да и смотрел сами настройки - не увидел каких либо серьезных ограничений.

с ЕР наталкивался на похожие проблемы - где то до 900-1000 продуктов обновляет, больше никак. может какие тайм ауты надо где то поменять? (и где - в php настройках, в sql или может в апаче?) или дело в версии sql ...

и еще вопросик - с чем была связана необходимость в sleep ? в моем случае не поможет? (хотя я так и не понял как и куда вкрутить sleep) ....

буду рад любым советам!

p.s. - как я понял модуль освоили многие, однако в контрибутах никаких обновлений...., политика партии или просто нет времени?
Я к тому что был бы рад посмотреть (да и не один я наверно) на версию модуля с поддержкой выгрузки и обновления групп товаров, (ЕР например при изменении группы разводит дубли, а не товар перемещает в другую группу) ...
или описаний продуктов (вдруг кто уже решал задачку - если вдруг в описании встретятся перевод строки или "<br>" - конвертнуть в "&lt;br&gt;" ) ...
или например поддерживающего обновление ставки налога (насколько я понял - проверка и обновление налога (а они меняются достаточно часто!) тоже задача не простая, т.к. с одной и тойже ставкой может быть несколько налогов для разных зон, как и с налоги с одним и тем же названием могут иметь разные ставки) ...
и т.п. и т.д.
a_berezin
Цитата(dabserver @ 16.2.2006, 18:46) *
как я понял модуль освоили многие
На счёт "многих" очень сомневаюсь. Мне кажется, что оценили единицы.
Цитата
ЕР например при изменении группы разводит дубли, а не товар перемещает в другую группу) ...
И правильно делает. Откуда он знает, что с этими товарами делать? copy или move?
Цитата
описаний продуктов (вдруг кто уже решал задачку - если вдруг в описании встретятся перевод строки или "<br>" - конвертнуть в "&lt;br&gt;" ) ...
А что за проблема?
Цитата
или например поддерживающего обновление ставки налога (насколько я понял - проверка и обновление налога (а они меняются достаточно часто!) тоже задача не простая, т.к. с одной и тойже ставкой может быть несколько налогов для разных зон, как и с налоги с одним и тем же названием могут иметь разные ставки) ...
и т.п. и т.д.
Первый раз такое слышу. Ставки налогов достаточно стабильны. Может быть я что-то пропустил?Можно поподробнее?
dabserver
1. осмелюсь высказать предположение - базовый модуль версии 0.6 обновляет только если изменилась цена! плохо! понятно что поправимо, но думаю все замечают некие особенности английского форума - люди даже по наипростейшим вопросам иногда готовы запостить чуть ли не код всей системы smile.gif - наверняка многие посмотрели модуль, не поняли метода обновления, не оценили возможности из за поддержки малого кол-ва полей и добавление товаров у которых потом надо проверить ставки налога, внести описание, привязать к группе - здесь ЕР впереди.

Имхо если выложить версию 0.7 добавив пару тройку полей и сократив названия элементов данных (очень уж здоровенные xml файлы выходят при большом ассортименте) - получим приток новых буржуйских пользователей модуля, а это всем гуд!

2. опять же имхо о таком дублировании надо транспарантами предупреждать. не думаю что в масштабах возможностей ЕР сложно было сразу организовать выбор copy move, тем более что move проще и быстрей сделать, чем copy.

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

4. пример на кормах для животных - по моему до конца 2004 года были неясности в порядке начисления НДС, что то примерно так - российские товары 10%, западные 18%, мясные продукты 10%. Мясные - чьи - наши или их или все? внесли поправки - все! На выходе - каждый более менее не ленивый импортер кормов для животных спохватился (и продолжают спохватываться до сих периодически) и стал переводить консервы для собак и кошек с НДС 18 на НДС 10, при этом разумеется якобы поднимая базовую безналоговую цену - мол западный производитель её умудрился поднять так, что изменив НДС с 18 на 10 на выходе цена с НДС будет такой же как и раньше.
А это проблема для бухгалтерии и менеджмента! Как правильно по бухгалтерии - надо распродать запасы с НДС 18 и потом уже торговать с НДС 10, по крайней мере в отчетности надо вытащить это отдельно, в идеале для бухгалтеров товар с изменившимся НДС - это новый товар, ну а менеджменту понятно совсем не удобно дублировать прайс новыми позициями не отличающимися от старых, поэтому бухгалтера выкручиваются сами, а в прайсе ничего не меняется, за исключением того, что в документах всё уже должно обсчитываться с новым НДС.

так что возможность сменить ставку важна. к тому же есть официальные планы государства по снижению налогового бремени - НДС будет регулироваться еще не раз! да и при добавлении новых удобней указать сразу где какой НДС, коли уж импортируем, а не потом ручками в онлайне ковырять.

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

кстати - забыл еще про производителя - тоже интересный момент - ЕР и тут идет по пути copy и размножения данных, а хорошо бы отдельным циклом дистинктивно сравнить список производителей в фале с апдейтом, добавить недостающих, и только потом уже сверить потоварно и пере привязать... (производителя надо обновлять по смешным причинам - то ошибка закралась, то манагеры считают что там имя поставщика реального надо указать, то не поставщика, а брэнд и т.п. и т.д. smile.gif ....)

p.s. возможности и гибкости решений репликации с применением xml мне стали понятней и очевидней, но всё равно что то я пока остаюсь приверженцем так называемого "процедурного" обмена данных. (хотя сейчас вообще ни каким не располагаю, ну да и не в этом цель...)

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

p.p.s. причину своей точки не возврата - не возможности обновить за раз более ~1000 продуктов (что XML что ЕР) - я так и не нашел, как нынче говорится - я открыт для ваших идей, советов и помощи! smile.gif
a_berezin
1. Базовый код есть. Есть с чего начинать страждущим. Хотя выгрузку и вообще формат лучше взять из yml. Поддержка малого количества полей -- ну это ведь и дураку ясно, что где 5 полей, там и 50, только добавляй обработку. А если не ясно, то значит ни к чему ему этим заниматься. Кстати, добавление новых полей в ЕР почему-то не вызывает затруднений.

Сокращения названий полей -- не знаю стоит-ли, это копейки. А так наглядно получается. Можно конечно извратиться и в начале файла передавать словарь полей smile.gif Стоит-ли овчинка выделки? Можно ведь упакованные файлы гонять.

Отличия англоязычного форума от нашего обоюдны. Там действительно отношение другое. И к спрашивающим и к отвечающим. Да и сама постановка вопроса там другая -- никто не требует чтобы за него решили его проблемы. Так что претензии не принимаются.

В чём и для кого гуд "приток новых буржуйских пользователей модуля" я не понял.

2. Надо было. Сделай свой вклад в развитие ЕР -- нарисуй транспарант smile.gif Мне ЕР как-то совсем не нравится с тех пор, как я осознал что такое xml. Я даже не слежу за ним.

3. Странно. Посмотрел ЕР в Сашиной сборке -- все теги на месте. И конец строки на месте.

4. Ну бывают заморочки с НДС. Но это ведь редко. Частный случай. Устаканится. Не писать же под это системы. Товар всё равно продаётся по одной цене, просто в бухгалтерии списание идёт по разному. Нет, это частный случай и не стоит его автоматизировать. smile.gif Указывать класс налогов -- да, такую возможность надо иметь, это само собой, как и остальные поля товара.

Кстати. О новых полях и расширяемости. Словарь данных. Даже на примитивном уровне очень даже может помочь. Тут есть о чём подумать... И это уже тесно связано с интеграцией информационных систем... Да, любопытно. Давненько я не занимался нормальным проектированием smile.gif ИС.

5. Что такое "процедурный обмен данными" я не знаю. sad.gif

6. По сути вопроса. Ещё раз повторю, пример, чтобы "еще более менее смогли разобраться как что под себя и свои контрибуты дописать" есть - это оригинальный xml_populate.

7. Ограничения в 1000 товаров -- какие-то местные ограничения. Может быть действительно попробовать пошаговую загрузку с использованием sleep()?
dabserver
"А если не ясно, то значит ни к чему ему этим заниматься" - всё таки не все могут стать более менее приличными кодерами, когда это понадобилось, а до этого опыту никакого, и денег заплатить обладающим знаниями тоже не всегда есть, а приток буржуйских пользователей наверняка повлечет развитие модуля, что хорошо таким как я smile.gif

про сокращение названий полей - базовый xml модуль- экспорт 8 с чем то тысяч товаров - чистый xml файл на выходе - больше 3х мб, в zip'e ~200 кб.
сокращаю названия полей до 1-й буквы, добавляю поле model - чистый xml файл 1,4 мб (всё теже 8 с чем то тысяч товаров, в zip'e понятно опять же 200 кб с мелочью)
- преимущество - обратно то надо грузить не сжатый xml!
что такое yml формат - я так пока и не понял (представление в виде <bbb name="значение"/>? если да - в чем преимущество? более распространенный? в любом случае, пока я не пойму как дополнить модуль возможностью брать сжатый файл из каталога на сервере и запускать по крону или таймеру - мне актуален размер xml файла)

3. - я имел в виду как раз xml модуль - возьмем даже базовый - попробуем ему скормить на обновление данных продукт с <br> в названии - не скормится. попробум скормить
"название
продукта"
- обновится на "название продукта" - т.е. перенос/перевод строки исчез.

4. согласен - главное апдейт класса налога, но я пока не понял как его реализовать, жесткой связи в самом osc нет, если только указывать ставку налога и привязывать её к первому попавшемуся названию налога с совпадающей ставкой....

про словарь/схему - посмотрел структуру xml'ов своей офлайн системы - есть у них такое, интересно, но мне ничевошеньки не понятно smile.gif

5. процедурный - тригер и хранимые процедуры - обновился один продукт в офлайн системе (или insert или delete), или приняли онлайн заказ в офлайн систему, обработали и теперь надо вернуть что же клиенту досталось в онлайн хистори заказов - тригер вызывает хранимую процедуру, передав ей параметры, та поизводит соответствующие изменения в онлайн системе. (нужен прямой доступ к бд и не нужно никаких импортов экспортов, xml'ов - для больших ассортиментов очень актуально, а если с захватом клиента - чтоб он мог вести свой бизнес/магазин в моей онлайн системе, я за него веду всё что нужно, сам заказы себе любимому формирую, возвраты обмены оформляю и т.п. и т.д. - только покупай у меня и без скидок (модель конечно сильно утрирована и сомнительна) - так тут без офлайн системы на паре тройке хороших серверов и "процедурной" репликации вообще по моему никак)

6, 7 - для меня к сожалению имеющегося в качестве примера не достаточно - куда и как например прикрутить sleep я так и не понял, увидел бы код - тут же бы понял наверно (читать скрипты я умею лучше, чем писать). про ограничение в 1000 - сделал копию магазина на mysql 4.11 правда на том же хостере (но хоть хостер и тот же - сервер то с mysql 4.11 у него другой) - но та же беда, вот теперь ломаю голову - а что же и как правильно у хостера спросить, чтоб там вообще поняли что мне нужно smile.gif ... (при этом через phpmyadmin 5 мегабайтный sql вполне выполняется...)

вернемся к сабжу - может например вам и незнаме выложить свои версии модулей как есть в качестве учебного пособия? мне бы это наверняка помогло постич по сабжу больше и быстрее!
dabserver
еще раз по проблеме апдейта большого кол-ва продуктов - наткнулся на документ Справочное руководство по MySQL - 5.2.9 Скорость выполнения запросов INSERT (актуально и для update) - очень сильно подозреваю что проблема у меня именно в этом, но до того утомился в поисках, что уже плохо понимаю каким советам из документации внять и тем более как модифицировать функцию tep_db_perform (database.php) так, чтобы не навредить ничему и внять наибольшему кол-ву советов smile.gif

может кто нибудь поможет разобраться?
a_berezin
0. Тут не нужно быть кодером, ведь с ЕР нет проблем. Что касается отсуствия денег, то тут уж извини -- "нет денег, не фиг заниматься бизнесом". Всегда нужны вложения, иначе не получится. Как ни старайся. Вот я могу построить магазин, и поставщик хорошего товара, и ниша не заполнена, и спрос есть, и рынок ёмкий, а вот 30000 тысяч на закупку товара нет. Даже 3000 нет, а вариант с кредитом не рентабелен. Вот я и не лезу туда.
Что касаемо притока буржуинских пользователей, то нет интереса у них к этому модулю. Иначе было-бы развитие. И дело не 5 полях вместо 10.

1. 1. Сокращать названия полей до 1 буквы? Нет, это ужасно. Тем более, что твой же пример показал, что на объём упакованного файла это практически не влияет. Хотя сократить наименования полей без потери смысла разумеется можно, например убрав префикс "products_".
Что касается загрузки упакованного файла, то это достаточно просто решаемо. Разумеется, при наличии установленных у хостера библиотек. (Я по крону читаю зазипоанные файлы с базой geoip и базами российской почты и гружу их в свою базу).
Опять-же, не нужно гонять весь файл туд-сюда, если у тебя, например, изменилась только цена.

1.2. yml. Я имел в виду структуру данных, используемую в этом формате обмена коммерческой информацией smile.gif Т.е. перечень полей и их иерархию. В сегодняшнем варианте xml_populate есть только товары, а у yml есть категории, валюта, на которые ссылаются поля в товарах.

1.3. Странный переход от yml к крону и сжатым файлам smile.gif Скажем так. Это действительно не проблема. Готов посодействовать. Особенно если объяснишь разницу между запуском по таймеру и по крону smile.gif

3. А, ну это понятно! Это надо использовать тег <![CDATA[ для текстовых полей, где могут быть html-теги.

4. Не понял. Вводишь новый налог и указываешь его в поле products_tax_class_id. Осталось только научить этот скрипт понимать это поле что, если взглянуть на тексты скрипта, совсем не сложно.

5. Не буду комментировать. Я придерживаюсь иного подхода.

6. Вернёмся к сабжу. Во первых, чем не устраивает существующий вариант для изучения, во вторых, ну зачем тебе скрипты под хт и зен, в третьих -- выложить это значит взять на себя отвественность по сопровождению. На вопросы отвечать, претензии выслушивать.
dabserver
"Даже 3000 нет, а вариант с кредитом не рентабелен. Вот я и не лезу туда. " - но ведь "лезли" пока не просчитали что вариант с кредитом не рентабелен, а платить чтоб кто то другой просчитал - тоже не делом считали наверно smile.gif

вот и я пытаюсь прощупать, просчитать так сказать, в рамках вялотекущего развития бизнеса работодателя (пока плачевно всё - клиентская база 2000, закзов офлайн 200-300 в день, а за месяц в онлайне один реальный заказ, и то бедняге пол заказа товара не хватило smile.gif, ... находят же люди время бумажки 5-6 листов на факсы исписывать или два часа ждать пока им перезвонят и час заказ по телефону диктовать smile.gif )

про yml немного начинаю догонять, хотя в моем случае (b2b) соответствовать какому либо стандарту ради дай бог 10 клиентов со своими онлайн магазинами из 2000 общего числа клиентов... у нас на рассылку прайс листа в экселе подписано не больше 200 клиентов smile.gif не время в общем еще этому.

пока что у меня проблема номер один - надоело 8-9 sql файлов генерить и в phpmyadmin пару раз в неделю грузить, и что ЕР что XML - не проходит больше 1000 за раз, как ни крути. и sleep не помог, и настройки mysql все прошерстил - ну нет там ни явного ни скрытого ограничения, даже описания хоть капельку похожей проблемы ни в гугле ни в яндексе не нахожу smile.gif хостеру буду звонить, мучить распросами.... .

что касается существующего варианта для изучения - в рамках того что может существующий - всё более мене понятно, но маловато будет, без примера к yml я его точно не подгоню, у меня на понять куда sleep вставить час ушел, если не больше smile.gif, про зазипанные файлы я уж вообще молчу, не по моим знаниям это.

а что касается ответсвенности и брать ли на себя поддержку - так а смысл всего в чём? делится с общественостью успехами, а не результатами? но ведь никто же не мешает например от Васи Пупкина выложить и сразу указать - без поддержки. вот яркий пример сам сабж - никто не взял на себя поддержку, на MetaShop.ru на форуме даже регистрация не работает, и никто вроде не жалуется.

... закрадывается у меня сомнение не правильные всё таки подходы - всех рыбу ловить не научишь, учить надо тех, кто хочет научится делать это хорошо, и учить для того, чтобы снизить/распределить/разделить с учениками нагрузку от нежелающих учится, но от рыбы не отказыващихся smile.gif
a_berezin
0. А я умею считать smile.gif Я этому учился. Сам. Зтратив на это время и деньги.
1. Проблему с 1000 записей надо решать совместно с хостером. О чём не раз говорилось.
2. Грузить через phpMyAdmin -- моветон smile.gif Сейчас модно dumper пользовать.
a_berezin
Итак. Для тех, кто понимает smile.gif
Поддержка форматов zip, gzip, bzip2 (на скорую руку).
Ищем
Код
$xml = new XML($_FILES['xml_file']['tmp_name']);

заменяем
Код
$file_type = end(explode('.', $_FILES["xml_file"]["name"]));
$file_process = new file_process($file_type);
if (!isset($file_process) || $file_process->function == null) {
  $messageStack->add_session('File type "' . $file_type . '" not supported', 'error');
  zen_redirect(zen_href_link(FILENAME_XML_POPULATE));
}

$xml = new XML($_FILES['xml_file']['tmp_name'], $file_process);

Ищем
Код
function XML($file = "")

заменяем на
Код
function XML($file = "", $file_process)

Ищем
Код
$this->load_file($file);

заменяем на
Код
$this->load_file($file, $file_process);

Ищем
Код
function load_file ( $file )

заменяем на
Код
function load_file ( $file, $file_process )

Ищем
Код
$content = implode("", file($file));

заменяем на
Код
$content = $file_process->file($file);

Добавляем
Код
<?php
class file_process {
  var $function = null;
  function file_process($file_type = '') {
    switch ($file_type) {
      case 'xml':
        $this->function = "file";
        break;
      case 'zip':
        if (function_exists("zip_open")) {
          $this->function = "zip";
        }
        break;
      case 'gz':
      case 'gzip':
        if (function_exists("gzopen")) {
          $this->function = "gzip";
        }
        break;
      case 'bz2':
        if (function_exists("bzopen")) {
          $this->function = "bzip2";
        }
        break;
      default:
    }
    return false;
  }

  function file($fn) {
    $buf = '';
    var_dump($fn, $this->function);echo '<br>';
    switch ($this->function) {
      case 'file':
        $fp = fopen($fn, "r");
        if($fp) {
          while(!feof($fp)){
            $buf .= fread($fp, 4096);
          }
          fclose($fp);
        }
        $buf = implode("",file($fn));
        break;
      case 'gzip':
        $fp = gzopen($fn, "r");
        if($fp) {
          while(!feof($fp)){
            $buf .= gzread($fp, 4096);
          }
          gzclose($fp);
        }
        break;
      case 'bzip2':
        $fp = bzopen($fn, "r");
        if($fp) {
          while(!feof($fp)){
            $buf .= bzread($fp, 4096);
          }
          bzclose($fp);
        }
        break;
      case 'zip':
        $fp = zip_open($fn);
        if ($fp) {
          while ($zip_entry = zip_read($fp)) {
            if (zip_entry_open($fp, $zip_entry, "r")) {
              $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
              zip_entry_close($zip_entry);
            }
          }
          zip_close($fp);
        }
        break;
      default:
    }
    return $buf;
  }
}
?>

Разумеется можно оптимизировать.
zokeoner
Цитата(Незнама @ 19.1.2006, 14:32) *
научил этот скрипт импортировать yml в магазин + импорт картинок и нарезка на popup_images, thumbnail_images, info_images.



Объясните пожайлуста как это всё можно сделать, очень нужно...а самому сделать знаний не хватает
Незнама
zokeoner,
нарезка картинок сделана под xt. в нем есть все необходимое для этого.
zokeoner
Цитата(Незнама @ 6.3.2006, 0:28) *
нарезка картинок сделана под xt. в нем есть все необходимое для этого.



Кстати является ли XT бесплатным?
Andrew_Yer
Цитата(zokeoner @ 6.3.2006, 13:04) *
Кстати является ли XT бесплатным?



Страничка http://www.xtcommerce.de/en/index.php

Цитата:

Цитата
xt:Commerce is released as a free software (GNU/GPL)


Т.е. xt:Commerce - свободное ПО.
Но платить за него не запрещено. smile.gif
evstyle
Пожалуйста, помогите! В чем может быть проблема? При попытке upload xml файла пишет:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

select * from products left join products_description using(products_id) left join products_to_categories using(products_id) where language_id='4' and categories_id in ()

[TEP STOP]

С базой все ОК и ошибок нет.
orik
у меня такая же ошибка, никто не исправил?
eugenem
Подскажите, чтобы добавить поля, достаточно добавить по аналогии с уже имеющимися только в первом блоке <?php ....... ?>?
Типа так:
CODE
<?php

function unhtmlentities($string) {
$trans_tbl = get_html_translation_table (HTML_ENTITIES);
$trans_tbl = array_flip ($trans_tbl);
return strtr ($string, $trans_tbl);
}

require('includes/application_top.php');

if ($_POST['action']=='import') {
if (is_uploaded_file($_FILES['xml_file']['tmp_name'])) {

$xml = new XML($_FILES['xml_file']['tmp_name']);
$products = $xml->evaluate("//product");
$count=0;
$count_upd=0;
$count_add=0;
foreach ($products as $product) {
// $group=$xml->get_content($product."/group[1]");
$products_id=$xml->get_content($product."/products_id[1]");


вставка

$products_model=$xml->get_content($product."/products_model[1]");

..... и т.д.

eugenem
Хм.. Попробовал, отвечаю сам себе. При выгрузке все именно так и работает, загрузку пока не пробовал...
dabserver
Уважаемые! кто нибудь еще заглядывает в эту тему? smile.gif
... при адаптации под мускуль 5-й версии (все переменные выставлены в cp1251),
пока что на локалке, (под xampp'ом, адаптировать там в общем то и нечего - пару селектов и (aray) куда надо подрисовать)
столкнулся со странной проблемой :
- вместо названий и описаний у меня одни крякозябры в мускуль заносятся.
явного преобразования формата я в классе не вижу,
на 4-м мускуле у хостера (там тоже база в 1251) нормально работает.
всякие set names у меня прописаны и в общем то скрипт Из базы вытаскивает всё в нормальном 1251 виде, а обратно уже не ест sad.gif
как всегда - изи при этом работает - т.е. апдейтит нормально, русские слова в крякозябры не превращает. в каком месте теряется кодировка - никак не въеду.

подозреваю что дело в взаимодействии класса с пхп 5-й версии (или взаимодействии с мускулем?) - вид крякозябров меняется при изменении 1-й строки xml файла -
<?xml version="1.0" encoding="Windows-1251"?>

только пока не удалось поменять на что-то, отчего бы крякозябры стали кириллицей .... (xampp 1.6.3a , [PHP: 5.2.3], mysql 5.0.45)
осмеливаюсь надеяться, что кто нибудь подскажет!?
dabserver
в общем отвечу сам себе smile.gif
моя проблема оказалась такой же, как в теме Работа с oscommerce_xml
Цитата(CyberW @ 9.9.2007, 17:39) *
у меня та же проблема, данные из файла xml попадают в кодировке utf-8, хотя реально они в файле в кодировке win-1251

решение нашел не лучшее, но быстрое - конвертнуть обратно в 1251 smile.gif
Код
function Encode($str,$type=w)
{
    $conv=array();
    for($x=192;$x<=239;$x++)
        $conv[u][chr($x)]=chr(208).chr($x-48);
    for($x=240;$x<=255;$x++)
        $conv[u][chr($x)]=chr(209).chr($x-112);
    $conv[u][chr(168)]=chr(208).chr(129);
    $conv[u][chr(184)]=chr(209).chr(209);
    $conv[w]=array_flip($conv[u]);
    if($type=='w' || $type=='u')
        return strtr($str,$conv[$type]);
    else
        return $str;
}
Mountlander
Подскажите где взять исходник?
Не нашел уже нигде.
Спасибо!
VaM
Наверное речь про osCommerce.XML - http://addons.oscommerce.com/info/3604
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.