Gruz
Moderator
   
Репутация: +147/-1
Offline
Пол: 
Сообщений: 1274
Бутылочку оставьте?
|
 |
« : 04.02.2011, 22:19:21 » |
|
Указывайте версию бравзера, этого расширения, Joomla, VirtueMart и пример предоставляйте прайса (ods и csv), когда задёте вопрос!---------------------- Версия для J1.7+ и VM2.0+ в разработке. Почему так долго? А пока....Для тех, кто ждёт версию для VM2 CSVI4.0 бесплатен и, похоже, не имеет проблем с таймаутами. Потому, это аспект уже не уникальный. В CSVI4.0 можно импоритовать настраиваемое поле, как минимум одно, вместе с товаром из одного прайса. Кому это подходит, не ждите тут! Оно того не стОит.
Текущая версия 1.0.17 beta [СКАЧАТЬ]Требования: Органичения и т.п.Тестировалась с Joomla 1.5.22 + VirtueMart 1.1.6 и VirtueMart 1.1.7, 1.1.8, 1.1.9 А так же с Joomla 1.5.15 + VirtueMart 1.1.4 Тестировалось в Firefox (везде работает) и в IE8 (были случаи, когда AJAX не работает). В Chrome и Opera AJAX не работает корректно. Посему рекомендуется FireFoxTODO (не полный)На данный момент в работе следующие моменты:- Проверить и исправить http://joomlaforum.ru/index.php/topic,150010.msg1037887.html#msg1037887
- при обновлении цены для группы покупателя не -default- параметр product_currency не учитывается,
т.е. если валюта магазина по-умолчанию - рубли, а цены в базе USD, основная цена обновляется правильно (в usd), для price_for_group "Dealer" создается и обновляется, но получается только в рублях - наряду с опцией "Депубликовать товары, которых нет в CSV-файле?" иметь возможность автоматического удаления таких товаров.
- Добавить проверку бравзера для соответствующего сообщения пользователям.
- Проблема с импортом производителей от Sivers (в этой теме)
- Проблема при импорте только категорий от Полищука (на мыле)
- при включенном плагине System - K2Store работает только импорт из директории с редиректами, добавить совместимость с К2
- добавить обработку дочерних товаров
- прописать всплывающие подсказки в настройках псведонимов - рассказать пользователю какая колонка за что отвечает
- добавить проверку наличия функций PHP simplexml_load_file, json_encode, которые необходимы для правильной работа расширения
- При ответе от сервера типа "504 Gateway Time-out" перезапускать AJAX через некоторое время
- При указании УРЛ изображения или доп. изображения производится копрпование на сервер, но пользователи рапортуют о зависании процесса. Разобраться. Возможно проблема с битыми ссылками или очень долгим откликом от "чужого" сервера
- в Обрабатывающий модуль Товары добавить три переменные
product_discount-> Фиксированный размер скидки product_discount_date_start-> Дата начала действия скидки product_discount_date_end-> Дата окончания действия скидки
- Добавить возможность импорта скачиваемых товаров
- Добавить возможность, как в CSVI "Перезаписывать существующие записи" (что-то забыл, что именно имелось ввиду)
Поскольку пользователи постоянно сохраняют файл в кодировке cp1251, попробовать обойти требование обязательности UTF-8 с помощью http://php.net/manual/en/function.mb-detect-encoding.php Тесты показали, что данная функция не умеет правильно определять кодировку в ряде случаев. Потому вопрос снимается, по крайней мере пока. Поскольку основа работы импорта в построчном считывании CSV файла, а не захвате целого файла в память, то непонятно пока, возможно ли его научить видеть .xls файлы. Разобраться, возможно ли итеративное считывание .xls файлов. Если возможно, то научить его работать с .xls Похоже, нет такой возможности. Все парсеры xls читают файл целиком в память. Если бы найти построчное чтение - тогда да. - Наверное, бек-слеш неправильно обрабатывается:
В Csv файле такая строка 202,"Книги и журналы\Психология","Духовный воин 2",2,34,40,,0,,"N","202.jpg","202.jpg",,"Y","Мягкий",,"Бумага"
импорт проходит без ошибок в итоге:
ДОбавляет категорию Психология",Духовный воин 2" а в ней товар Психология",Духовный воин 2" - Добавить уникальный идентификатор каждого процесса импорта, чтобы, скажем, препроцессоры могли свои темп-файлы привязывать к тому или иному процессу. Пришло во время работы над препроцессором для Миротворца. Не забыть.
- В справке, в компоненте ошибка:
Запуск по ссылке
Возможно запустить импорт перейдя по ссылке, в которой будет указан .csv файл, расположенный на сервере.
Для этого вы должны быть залогинены в административной части.
Ссылка должна иметь вид: http://my-domen.ru/administrator/administrator/index.php?option=com_virtuemart&page=product.simple_csv&local_path=PATHTOFILE&start_now=1&use_ajax=1 - Добавить обработку quantity_options
- Переделать удаление/депубликацию товароа, чтобы при ооооочень больших працсах список артикулов не перегружал память.
- Добачить удаление товаров, которых нет в прайсе. Добавить депубликацию/удаление категорий, в которых нет опубликованных товаров вместе с товарами.
- Для информации. Попробовал сейчас импорт категорий. Всё импортирует хорошо (корневые и дочерние каталоги). Кроме поля products_per_row: прописывает в нём 0. Вручную через админку меняю в этих полях значения на нужные мне. При повторном импорте эти значения опять обнуляются.
Рекомендовано к прочтению: - Что такое типы в VirtueMart (англ.): http://www.csvimproved.com/csvi-virtuemart-documentation/tutorials/product-types-import-tutorial.html
Читать до места: Upload product type names
Основные особенности, чего нет у других:- Таумауты не страшны, ибо используется редирект. То есть когда обработка приближается к таймауту, она себя сохраняет на сервер, перезапускает себе же и так до следующего таймаута. CSVI 1.9 часто вылетает по таймауту, ибо хостеры не жалуют многоминутное исполнение скрипта.
- Возможность продолжить прерванный импорт с места обрыва
- Возможность импортировать товары с типами, ценами для разных груп и дополнительными изображениями из одного прайса. CSVI требует несколько отдельных файлов. Другие импортеры вообще с типами не работают.
- Возможность обрабатывать данные из CSV в процессе импорта. Например, когда в таблице описание имеет разрывы строк, а вы хотите его автоматически преобразовать в HTML, то теперь это возможно.
Что нового относительно старой версииЧто не работает- Дочерние товары (скорее всего), ибо не знаю что это за зверь. Если кому надо - говорите. Буду разбираться. - Что найдёте и укажете, будет исправлено/добавлено. Для этого надо привести пример того, что не работает и подробное пояснение как оно должно работать. - Нет возможности запускать по cron - Нет динамического изменения размеров фотографий
Что работает, но не очень
- При редиректе, который вроде бы должен быть надёжнее Аякса, на большом прайсе столкнулся з сообщением от Firefox
 Это не страшно. Можно просто 'Try again' - оно продожлит работу. Или зайти снова на импорт - будет возможность продолжить прерванное. В следующих версиях поправлю, уже знаю как. - Натыкался на строку в одом прайсе со спецсимволами, который функцый PHP fgetcsv не смогла правильно прочитать. Или LibreOffice не смог правильно экспортировать, что вероятнее.
- Связанные товары. Если товар из строки 5 связан с товаром, который в строке 6, то при первом импорте связь не будет добавлена, ибо нет ещё 6-й строки в БД. То есть надо дважды импортировать.
- В логе много дублированной информации, не все сообщения понятны и информативны
- В компоненте много левых файлов из учебного компонента, оставленных на будущее
- Код не самый изящный получился
- Аяксовые обновления окна с индикатором процесса не так красиво работают, как хотелось бы
- Логи сохраняются в /logs как файлы .php. Проблема, что нет другой возможности их удалить, как вручную.
- Депубликация всех товаров, кроме тех, что в прайсе работает, но логика не универсальна. Потенциально на ооооооооооооооочень большом прайсе может обламаться. Пока кому-нибудь не припечёт не имеет смысла исправлять. Вряд ли припечёт.
УстановкаУстанавливаем компонент com_virtuemart_simple_csv_ x_x_x.zip. После инсталляции он предложит установиться в сам VM, что и надо сделать.
 Будет установлен компонент, плагин для принудительного использования на странице импорта mootools upgrade (необходим для AJAX), добавлены два файлы расширения в VM. ОбновлениеУстановить компонент сверху на старый. Как работать1. Правильно оформить CSV файл 2. Тепер в Компонентах под VirtueMart есть новый компонент.  Идём в импорт.  В общем случае ничего менять не надо. Если есть правильно сформированный файл, то или загрузить, или указать на директорию и запустить либо с аяксом либо с редиректом. Запуск по линкуВозможно запустить импорт перейдя по ссылке, в которой будет указан .csv файл, расположенный на сервере. Для этого вы должны быть залогинены в административной части. Ссылка должна иметь вид: http://yoursite.com/administrator/index.php?option=com_virtuemart&page=product.simple_csv&local_path=PATHTOFILE&start_now=1&use_ajax=1Где PATHTOFILE - путь к файлу относительно корня сервера или корня Joomla. Например: - /mnt/work/www/sandbox.com.us/www/media/price.csv
- media/price.csv
Или в полном варианте: - http://yoursite.com/administrator/index.php?option=com_virtuemart&page=product.simple_csv&local_path=/mnt/work/www/sandbox.com.us/www/media/price.csv&start_now=1&use_ajax=1
- http://yoursite.com/administrator/index.php?option=com_virtuemart&page=product.simple_csv&local_path=media/price.csv&start_now=1&use_ajax=1
Параметр &start_now=1 указывает, что надо начинать импорт после перехода по линку. Параметр &use_ajax=1 указывает, что импорт должен запускаться с помощью AJAX, а не редиректов. Формат файлаПримечание: Работаем в LibreOffice (раньше OpenOffice) Calc - бесплатном аналоге MS Office. По крайней мере MS Excel 2003 не умел ещё генерировать правильные CSV, понятные для функции PHP fgetcsv. Для того, чтобы правильно сформировать файл импорта, вы должны указать правильно заголовки. Разберём пример (Скачайте файл, чтобы был перед глазами: пример от urugvay). Мы имеем прайс такого вида (страница 1 в urugvay.ods):  Прежде всего в самой первой строке мы должны указать обработчик (или обрабатывающий модуль). Обработчик подскажет программе, какие дальше будут идти данные. Посмотреть какие есть обработчики можно в "Компоненты > VirtueMart импорт из CSV > Настройки псевдонимов"
 Заголовки вкладок и есть обработчиками. На рисунке первый обработчик Товары, второй Параметры, третий - Типы товаров и т.д. Скопируем наш прайс на второй лист документа и добавим первой строчкой имя обработчика, в нашему случае это Товары
 Теперь надо указать правильно названия колонок. Не трудно сопоставить, что колонка в оригинальном прайсе product_sku соответствует псевдониму Артикул в Обрабатывающем модуле ТоварыИ далее product_name => Наименование товара category_path => Категории product_price => Цена товара product_s_desc => Краткое описание product_desc => Полное описание product_special => Специальное предложение (Y/N)
Примечание: Вы можете переопределить псевдонимы в Настройках псевдонимов, и пользоваться новыми, указанными вами, названиями колонок. Так наши колонки и назовём (второй лист urugvay.ods )
 Сохраняем этот лист как .csv файл, указываем кодировку UTF-8, разделители и ограничители без крайней надобности не трогаем.
 В LibreOffice настройки сохранения файла:  Теперь идём в наш импорт и импортируем полученный файл urugvay.csvРезультаты в логе:
 Результаты среди других товаров в БД:
КатегорииВ колонке категории вы можете указывать путь к категории товара или несколько категорий, к которым пренадлежит товар. Например: Сыры по типу/Сыры твёрдые|Сыры по происхождению/Сыры голландскиеТовар будет отнёсён к двум категориям второго уровня. Можно указывать порядок товара в категории. [/list] Товары Артикул Категории m0240 Хлев::2|Свинарник m0241 Хлев::1|Свинарник
Для Категории товара m0240: В категории Хлев порядок товара 2, а в категории Свинарник порядок не указан Идентификатор категорииID категории в таблицах VirtueMart. Рекомендуется использовать колонку Категории, а не Идентификатор категории, как более удобоваримую для человека. Можно указывать порядок товара в категории. Например: Товары Артикул Идентификатор категории m0240 1::2|39 m0241 1::1|39
Для товара m0240 указано 1::2|39. Т.е. товар определён категорию 1 с порядком отображения 2 и в категорию 39 с неуказанным порядком. Цены для группы:Если колонка в Обрабатывающем модуле товары задана по умолчанию, то в прайсе колока должна быть такой: Правильно: Цена для группы "-default-" количество от 3 до 7Неправильно: Цена для группы "-default-" количество от 3Правильно: Цена для группы "-default-" 3 - 7Правильно: Цена для группы "-default-", 3 7Правильно: Цена для группы "-default-" Импорт дополнительных файлов и изображенийПРИМЕЧАНИЕ: импорт товаров для скачивания пока не поддерживаетсяЗадав колонку Дополнительные изображения для товара можно указывать изображения по форме (разделитель перенос строки): notifyarticlesubmit_backend.png::Підпис 1 NotifyArticleSubmit_boxed.png::Підпис 2 или (разделитель вертикальная черта) notifyarticlesubmit_backend.png::Підпис 1|NotifyArticleSubmit_boxed.png::Підпис 2 Файлы изображений перед импортом должны быть размещены в директорию components/com_virtuemart/shop_image/product/additional/Можно размещать в поддиректории, например components/com_virtuemart/shop_image/product/additional/pngfiles/ тогда в прайсе надо указывать имя файла вида pngfiles/notifyarticlesubmit_backend.png::Підпис 1Аналогично для колонки Дополнительные файлыЗначения поля вида eva.ods::Підпис 1 eva1.csv::Підпис 2 или eva.ods::Підпис 1|eva1.csv::Підпис 2 Дополнительные файлы должны размещаться в media/По поводу импорта свойств товара и типов, то их организация видна этом напримере. Открываем пример от tug в OpenOffice и смотрим. Пробуем импортировать прайс и смотрим на резлультат, сопоставляя с прайсом. Неиспользуемые колонки из прайсом можно удалять. Колонки, которые не сопоставлены псевдонимам, будут игнорироваться. Т.е. если колонка будет называться Моя дополнительная информация, то она будет игнорироваться при импорте. ПрепроцессорыПрепроцессоры В настройках можно указывать препроцессоры. Это такие файлы php, которые дополнительно обрабатыват строки при импорте. Примущественно препроцессоры очень "индивидуальны", то есть заточены по конкретный прайс. Например, когда в таблице описание имеет разрывы строк, а вы хотите его автоматически преобразовать в HTML. Есть препроцессор, который из описания вида: Применение: • В системах водоснабжения. • Для перекачки чистых жидкостей, не содержащих абразивных при- месей и не агрессивных для нержавеющей стали. • универсальный насос для использования в быту, в промышленности, на садовых участках.
сделает базовый HTML <p>Применение:</p> <p>• В системах водоснабжения.</p> <p>• Для перекачки чистых жидкостей, не содержащих абразивных примесей и не агрессивных для нержавеющей стали.</p> <p>• универсальный насос для использования в быту, в промышленности, на садовых участках.</p>
Другим примером может быт ситуация, когда название товара нужно составить из нескольких колонок. Например имеем прайс: Артикул Название Модель Производитель 01 Пылесос АК-2 Артём 02 Пылесос АК-4 Артём
Препроцессором можно сделать так, что в результате импорта у товара будет название, к примеру: Купить Пылесос Артём АК-2 в КиевеИли же из прайса, в котором категории товаров указаны не у каждого товара, а перед группами товаров, сделать удобоваримый для импорта прайс. http://gruz.org.ua/images/stories/files/virtuemart_simple_csv/ss/ss_plus_byttehnika.odshttp://gruz.org.ua/images/stories/files/virtuemart_simple_csv/ss/ss_plus_byttehnika.csvЭтот препроцессор: sspricebyttehnika.php.zipРазделитель категорий тут (:), а не /, как обычно. Чтобы включить препроцессор, нужно зайти в настройки и указать файл, который лежит в administrator/components/com_virtuemart_simple_csv/preprocessorsНапример пример (ИЗТ) product_description.php Файл документирован (именно этот, в других комментарии не адекватные), не сложно разобраться при знании PHP на среднем уровне. Можно указывать несколько препроцессоров, тогда они будут обрабатывать каждую строчку прайса последовательно. Например одним препроцессором разукрасить описание HTML-тегами, а другим обработать название товара. Примеры:tugТовары с типами и атрибутамиНаиболее илюстративынй пример Разделитель категории / Препроцессора нет или product_description.php http://gruz.org.ua/images/stories/files/virtuemart_simple_csv/tug/tug.odshttp://gruz.org.ua/images/stories/files/virtuemart_simple_csv/tug/tug.csvevaТолько товары, типов нетРазделитель категории / Препроцессора нет http://gruz.org.ua/images/stories/files/virtuemart_simple_csv/eva/eva.odshttp://gruz.org.ua/images/stories/files/virtuemart_simple_csv/eva/eva.csvnasosyИмпорт товаров с типамиПрепроцессор: В результате название товара складывается из производителя и названия в прайсе Описание с переносами строк и списками красиво переводится в HTML Разделитель категории / Препроцессор nasos/nasos_product.php Пример на живом сайте: nasos4you.com.ua http://gruz.org.ua/images/stories/files/virtuemart_simple_csv/nasosy/nasosy.csvhttp://gruz.org.ua/images/stories/files/virtuemart_simple_csv/nasosy/nasosy.odsssИмпорт товаров с типами Препроцессор: Добавления базовых тегов в описание товара Если у товара не указан производитель или указан Other, то производитель товара определяется из его названия. например название: MB ASUS P7H55 iH55, s1156, DDR3, PCI-E 16x,SATA2, IDE,1GB, 8Ch,ATX,BOX Значит Asus Поле доступности товара: заменяет текстовый "Заказ", есть "Есть" и т.д. на соответствующие изображения. В поле "Изменение цены" в зависимости от указанной в прайсе латинской буквы, вписывает фразу по русски типа "цена возросла" !Разделитель категории (:) Препроцессор softservice/ssprice.php Результаты импорта тут: softservice.com.ua http://gruz.org.ua/images/stories/files/virtuemart_simple_csv/ss/ss.odshttp://gruz.org.ua/images/stories/files/virtuemart_simple_csv/ss/ss.csv ЧаВо:Решение проблем:Текущая версия 1.0.17 beta [СКАЧАТЬ]
|