a13x3y

Модуль импорта товаров Iris Import 1.0

Рекомендуемые сообщения

a13x3y    1

Приветствую господа. Представляю свой взгляд на импорт товаров под опенкарт. Из-за нехватки времени, на скорую руку накидал модуль импорта товаров, вероятно где-то будут ошибки, но в целом модуль проверил и всё работает. Теперь по сути, чем же мой велосипед отличается от 100 других велосипедов. Первое с чем мне пришлось столкнуться когда я создавал сайты на опенкарт для людей, особо не понимающих в опенкарт так это то, что создание карточки товара ооочень трудоёмкий процесс, надо по каждой вкладке тыкать, каждую фотку подгружать (указывать урл), прописывать seo и так далее. Ладно я, я знаю как это делается, а люди которые далеки от этого, как им быть? Вот собственно и решено было создать небольшой импорт товаров, чтобы он был понятен и прост.
Итак, подробнее:

Скрипт затрагивает такие данные товара как:
Название - название товара, тип данных: строка, обязательный параметр
Артикул - модель товара, он же артикул, тип данных: строка, обязательный параметр, для каждого товара должен быть уникальным
Цена - цена товара, тип данных: числовой
Наценка - наценка на товар в %-ах, будет добавлено к цене, тип данных: числовой
Количество - количество товара, тип данных: числовой
Бренд - производитель товара, тип данных: строка
Описание - описание для товара, тип данных: текст
Характеристики - хар-ки товара, тип данных: текст. Хар-ки разделяются переносом строки, названия двоеточием, а значения запятой
Изображения - фото для товара, тип данных: строчный. Разделяются переносом строки. Первая строка - фото в карточке товара
Атрибуты - атрибуты товара, тип данных: текст. Атрибуты разделяются переносом строки, названия и значения двоеточием
Категория - категория товара, тип данных: строка
Подкатегория - подкатегория товара, тип данных: строка
SEO урл - seo урл товара, тип данных: строка на англ., для каждого товара должен быть уникальным
Meta Keyword - метаданные для тега <meta keyword>, тип данных: строка
Meta Description - метаданные для тега <meta description>, тип данных: строка

Специфика работы скрипта:
Ячейки в демонстрационном файле помеченные звездочкой, обязательны для заполнения
Пустые ячейки с "названием" и "моделью" буду пропущены при импорте
Если бернд не найден в базе, то он будет создан автоматически
При автоматическом создании бренда формируется и SEO урл из его транслитного названия с приставкой "brand-"
Если поле для бернда пустое, то автоматически добавится бренд "NA"
Если атрибут или характеристика товара не найдена, то она будет создана автоматически
Все значения атрибутов и характеристик, при импорте, проверяются на повторы
Все импортируемые изображения товаров должны хранится в папке /tmp/images/
Максимальное кол-во изображений для одного товара = 10
Первое изображение будет в карточке товара, остальные дополнительные.
Если категория не найдена в базе, то она будет создана автоматически

Описание настроек скрипта:
Автоматически формировать поле "SEO урл"
Независимо от того заполнено у вас это поле или нет, скрипт сам создаст SEO урл из названия товара и переведет это название в транслит

Переименовать фото по артикулу
При копировании переименует оригинальные названия фото товара в вид "артикул.jpg","артикул_1.jpg", "артикул_2.jpg" и тд

Каталог для изображений
Папка, в которую скопируются фото ваших товаров. Будет находиться по адресу /image/data/imported/

Скрипт также видит какие товары уже есть, и если товар есть в базе (проверка по артикулу и заводу изготовителю) то просто обновляется цена (с наценкой) и остаток.
В архиве есть демо пример.

Пишите о всех глюках и недостатках, буду стараться оперативно исправлять.

iris_import_opencart1.5_10.zip

post-701649-0-89004400-1444299591_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Shkip    34

Notice: Undefined variable: exfile in ...admin\controller\module\updater.php on line 44

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 45

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 46

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 47

Notice: Undefined index: import in ...admin\controller\module\updater.php on line 54

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Shkip    34

после выбора и закачки тестового файла test.xlsx в поле выбора файла отображается фреймом главная страница админки, новый товар не добавился и сбросился токен сессии

e7293-clip-79kb.png?nocache=1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

В коде не увидел добавление главного рисунка + синтаксис... есть стандарты кодинга под опен, ну почему каждый новый разраб, старается по своему уставу код писать... как поддержка будет ? + если пользователь эксперементирует и у них товара не 300-800 скю, а несколько десятков К, и вы своим модулем с неотлаженными запросами что сделаете ?? правильно, грохнете нахер всю базу, и теперь у юзера - 2-ве большие проблемы:

1. Как откатить с бекапа (если хост поддерживает)

2. Как отладить...

Вы хоть напишите, что БЕКАП надо делать перед импортом, БЕКАП КАРЛ !!!

 

P.S. Логика интересна, но довести до ума и будет спрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

после выбора и закачки тестового файла test.xlsx в поле выбора файла отображается фреймом главная страница админки, новый товар не добавился и сбросился токен сессии

хммм..интересно, напишите версию опенкарта.

 

 

Notice: Undefined variable: exfile in ...admin\controller\module\updater.php on line 44

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 45

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 46

Notice: Undefined variable: exfile in ...\admin\controller\module\updater.php on line 47

Notice: Undefined index: import in ...admin\controller\module\updater.php on line 54

поправлю, просто отображение notice'ов не установлено, только варнинги.

 

 

В коде не увидел добавление главного рисунка + синтаксис... есть стандарты кодинга под опен, ну почему каждый новый разраб, старается по своему уставу код писать... как поддержка будет ? + если пользователь эксперементирует и у них товара не 300-800 скю, а несколько десятков К, и вы своим модулем с неотлаженными запросами что сделаете ?? правильно, грохнете нахер всю базу, и теперь у юзера - 2-ве большие проблемы:

1. Как откатить с бекапа (если хост поддерживает)

2. Как отладить...

Вы хоть напишите, что БЕКАП надо делать перед импортом, БЕКАП КАРЛ !!!

 

P.S. Логика интересна, но довести до ума и будет спрос.

что значит главного рисунка? если речь о фотокарточке товара, то при запросе он прописывается, так же как и доп. фотки.

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

по поводу неотлаженных запросов, что по вашему значит "неотлаженный"?  Запрос или есть и он работает, или он не работает. Да, возможно на несколько десятков тысяч товаров всё повесится на стадии формирования массива с опциями и атрибутами т.к. памяти нехватит.

И зачем делать перед импортом бекап? Нет можно и с бубном плясать, только что это изменит? Бекап должен быть настроен на автомат каждый день по крону, поэтому я даже не заморачиваюсь с этим как то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

Подскажите, как тут свой пост можно редактировать?

2 Shkip: вероятная проблема найдена, в файле-шаблоне updater.tpl, заменить 4-ую строку

с
<script>var link = '<?=$_SERVER["REQUEST_URI"];?>';</script>
на
<script>var link = '<?php echo $_SERVER["REQUEST_URI"];?>';</script>

либо в php.ini (если проблема была в этом) включить short_open_tag = On

это значительно упрощает написание кода

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

версия с исправленными ошибками и уведомлениями.

https://yadi.sk/d/lYnhFnT5jaDsr

 

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

Изменено пользователем a13x3y

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Вот стандарты кодирования под опен, вот тут мне немного непонятно:

for ($f=1;$f<count($prod["images"]);$f++)   //1 потому что 0 фотка идёт в карточку товара
     $this->db->query("INSERT INTO `".DB_PREFIX."product_image` SET `product_id`=".$product_id.", `image`='".$prod["images"][$f]."', `sort_order`=".$f);

тоесть уже в первом запросе, теряем одну картинку, а именно $prod["images"][1], так как $f++ в начальном запросе будет == 2, + я бы как то по стандарту уж написал...

//импорт изображений
for ($f=0;$f<count($prod["images"]);$f++) {  //1 потому что 0 фотка идёт в карточку товара
    $this->db->query("INSERT INTO `".DB_PREFIX."product_image` SET `product_id`=".$product_id.", `image`='".$prod["images"][$f]."', `sort_order`=".$f);
}

вот прикреплю файл, может подсобит с выводом категорий.

пример вызова класса и вывод параметров:

$this->load->model('catalog/category');
$this->data['categories'] = $this->model_catalog_category->getCategoryTree(); 

а вот модель:

public function getCategoryTree() {
	$query = $this->db->query("SELECT c.category_id, c.parent_id, cd.name FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY c.sort_order, cd.name ASC");
	$this->load->helper('tree');
	$tree = new Tree($query->rows, 'category_id');
	return $tree->get_plane();
} 

За проделку - однозначно +, спасибо за код, предоставленный для публики.

tree.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

по поводу цикла с фотками: 

$f=1; означает что с 1-ого изображения в массиве начинаем работать т.к. нулевое изображение пошло в карточку товара и оно нам больше не нужно т.к. цикл идёт после запроса на импорт товара в БД

если сделать $f=0; то у нас первое изображение с карточкой товара попадет в дополнительные изображения, и получится дубликаты

 

Да, с выводом категорий согласен, иногда проще взять уже готовую модель, но не всегда это подходит, например с импортом новых атрибутов\опций это не прокатывает т.к. метод не возвращает id атрибута\опции вставленной в базу. по сути в методе можно было сделать возврат нового id, но я не понимаю почему разработчики этого не сделали, просто действия на импорт и ничего о возврате.

 

p.s. за скрипт спасибо, когда соберусь с мыслями чтобы переделать, обязательно воспользуюсь, хоть самому писать не придётся :)

 

p.p.s по поводу стандартов кодирования, то тут тоже двоякая ситуация, если можно обойтись без пробелов в условиях то зачем они? Почему нельзя включить поддержку short_open_tag  и работать вот так

<?=$var;?> нежели писать вот так <?php echo $var;?> по поводу отспутов "табами" то это отдельная песня, тут каждый пишет как ему удобнее, я стараюсь соблюдать это как в верстке так и в коде, но вероятно редактор где то косячит и когда у меня выглядит всё ОК, то у других может быть иначе.

Изменено пользователем a13x3y

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Baco    395

Прошу прощение, я перепутал оператор foreach с for, но все же в скобки фигурные я бы заключил.

По поводу short_open_tag  - то не у каждого пользователя есть доступ к данной настройке хоста, так что полнота кода с указанием интерпритатора - хороший тон.

По поводу нужных *_id вы напишите, дополним чем нужны, был би лишь прок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

да, по поводу скобок согласен, привычка просто если одно действие у цикла или условия то пишу без скобок, виноват, каюсь :lol:

насколько знаю почти любую настройку из php.ini можно продублировать через .htaccess

<IfModule mod_php5.c>
php_value short_open_tag 1
</IfModule>

или

php_value short_open_tag 1

по поводу ID тут скорее вопрос в другом, либо самому написать эти 2-3 запросы в БД и получить возвращённый id, либо подключать модель и дописывать её на возврат id + дописывать это надо будет всем кто пользуется скриптом. Я пошёл по пути наименьшего сопротивления. Может в версии 2.0 этим методы возвращают id вставленной опции\атрибута, но в 1.5 этого нет.

 

ну и по поводу табов, как я и писал иногда проблема в приложении, через которое пишу

7a8d68.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

файл обновил, была ещё одна ошибка в javascript из-за которой файл не закачивался, но и она была не той, вобщем в фаерфокс работает, а вот хром не хочет. Сейчас исправлю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

Вобщем много ошибок было исправлено, но хочется дополнить, что если вы работаете с форматом XLSX, то у вас должна быть поддержка php_zip.dll (php_zip.so) для PHP, в противном случае могут появляться ошибки после импорта. Либо вы можете включить подавление ошибок в админке: Система - Настройки - изменить - Сервер > Показывать ошибки: поставить НЕТ. Конечно от фатальных ошибок вас это не спасет, но не видеть notice и warning поможет.

Обновленная версия там же, https://yadi.sk/d/lYnhFnT5jaDsr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    767

ошибки не нужно прятать - их нужно исправлять

если есть какой-то нюанс или требование к модулю - сильно желательно об этом указать в описании на странице модуля

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

ошибки не нужно прятать - их нужно исправлять

если есть какой-то нюанс или требование к модулю - сильно желательно об этом указать в описании на странице модуля

На самом деле я бы и рад указать, но из тестируемых был только 1 человек, у него один хостинг, ошибка была, у меня другой хостинг - ошибки не было, на домашнем сервере отключал php_zip.dll в апаче, ошибки всё равно не было, поэтому узнать что где косячит нет возможности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

Внимание!!!

Для корректной работы необходим PHP модуль ZIP (не путать с zlib)! На разных хостингах это включается по разному, где то уже включено, где то, как например в NIC HOST, надо включать руками в панели управления (Веб сервер - Управление модулями - Настроить модуль (около PHP модуля) - Управление расширениями > Поставить галочку на ZIP и сохранить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

Добавлена проверка на наличие ZIP модуля для PHP при открытии страницы с модулем.

Если модуль не найден то будет гласить надпись об этом, чуть ниже заголовка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 091

1.

либо в php.ini (если проблема была в этом) включить short_open_tag = On

давай еще php-теги заменим на "<%" ?

а чо? может, мне так удобно.

2. shared-хостинг с 64мб оперативы? не, не слышал!

@ini_set("memory_limit","812M");
3. private/protected переменные-методы? не, не слышал.

4. экранизация данных? не, не слышал.

стандарты кодирования? не, не слышал.

обязательное приведение переменных к нужному типу? не, не слышал.

работа с БД в модели? зачем? можно ведь прямо в контроллере клепать запросы.

- - -

короче, как-то всё уныло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

Дружище, я понимаю что ты круче меня в программирования, много всего знаешь, любишь кого то унизить на форуме, обосрать и всё такое в этом роде. Я бы мог тебе ответить на все твои придирки, но прости, это не мой уровень. Можешь дальше негодовать как всё уныло, я разместил тут скрипт, кто надо тот возьмёт, а ты, видимо, можешь сам всё накодировать своими методами и классами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 091

я указал на глупости и откровенные fail`ы.

можешь искать в этом попытку унизить и обижаться, а можешь исправить код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
a13x3y    1

я указал на глупости и откровенные fail`ы.

можешь искать в этом попытку унизить и обижаться, а можешь исправить код.

глупости и фейлы? перенести все запросы в модель? для кого? тебе нужен этот код? я думаю людям (овер 90%) главное чтобы всё работало, а то что запросы не в модели, экранизации данных нет (код писал быстро, может в каком то запросе пропустил), стандарты кодирования не те - это мало кому интересно, разве что людям вроде вас. Это всё равно что пускать незнакомых людей в свой дом: зайдут, обосрут, скажут как всё плохо и уйдут. У всех познания в программировании свои, я не знаю чем отличается класс protected от private, можешь кинуть в меня камень, также я не знаю ООП, и что дальше? Почитать и изучить не проблема, но только тогда когда мне это понадобится. Не нравится как написано, напиши лучше, более идейно и расшарь для всех. Я уверен найдётся кто-то, кто тоже будет чем то недоволен. Для меня главное чтобы всё работало, если кто-то укажет на ошибки, то я их, естессно, исправлю.

P.S. нет, я конечно могу изучить весь код, прочитать про ООП, по стандарту всё написать, запросы по моделям раскидать, английский язык подкрутить - не вопрос, но это время, а время деньги. Я даже не знаю нужно это кому то или нет, хотя уже потратил немало времени.

Изменено пользователем a13x3y

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
nadim    5

Тема интересная - нужно развивать! :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я тоже не понимаю: как можно наезжать и оскорблять человека, который сам написал скрипт, выложил его в бесплатный доступ для других пользователей!? Если вы больше знаете движок и видите ошибки в скриптах, так лучше направьте свои силы на то, чтобы помочь человеку или остальным пользователям, которые в этом не бум-бум, допились скрипт и довести его до ума! Ведь идея полезная и может многим пригодиться... Хватит быть хамами - учитесь общаться культурно!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу