Создание товара в базе Prestashop запросами mysql

Автор Cyrix, 14 октября 2015, 09:53:47

« назад - далее »

coder

ЦитироватьВы сначала определитесь, что будете создавать модуль, страницу, контроллер или работать с бд через вебсервис.

Опять с начала.
Если в модуле, то не так.
Если в контолллере, то не так.
Если для вебсервиса, тоже не так.
Если что-то свое, то можно и так.

Cyrix

Цитата: coder от 20 октября 2015, 14:56:25
Опять с начала.
Если в модуле, то не так.
Если в контолллере, то не так.
Если для вебсервиса, тоже не так.
Если что-то свое, то можно и так.
Я пишу что-то своё. Пишу экспортёр из товароучётной системы в престу, хочу чтобы склад вёлся не в престе а в товароучётной системе. Осталось доделать только комбинации. При добавлении товара никак не могу добавить эти комбинации. Сам набор комбинаций уже существует - это цвета, больше ничего другого нет.
Выяснил, что необходимо заполнить таблицы:

_product_attribute
_product_attribute_combination
_attribute_image
_attribute_lang

но как их заполнить правильно - пока не знаю. Что лучше - запросами mysql или средствами prestashop? Если prestashop-ом то как?

DarinSr

Лучше это когда по правилам prestashop.
Для связи сайта и сторонней программы - https://github.com/PrestaShop/PrestaShop-webservice-lib
Выгружаете товары в файл. Работаете с уже определенными api функциями View, Mоdufy, Add, Delete, Fast view.
Если у вас система может выгружать данные в cvs файл, тогда совсем просто, импортировать товары функциями админки.

Cyrix

Цитата: DarinSr от 20 октября 2015, 15:22:46
Лучше это когда по правилам prestashop.
Для связи сайта и сторонней программы - https://github.com/PrestaShop/PrestaShop-webservice-lib
Выгружаете товары в файл. Работаете с уже определенными api функциями View, Mоdufy, Add, Delete, Fast view.
Если у вас система может выгружать данные в cvs файл, тогда совсем просто, импортировать товары функциями админки.

Мне с этими включёнными автоэкскрементами ID в таблицах престы совершенно не понятно, как я буду синхронизировать ID престы и ID товароучётной программы, если в престе ID присваиваются автоматически да ещё и скачут через один в случае, если товар был удалён. Вот не хочу я каждый раз при добавлении нового товара заниматься удалением всей базы, очисткой и сбросом ID и потом загрузкой такого же количества товара, только + какой-то новый. Хочу всё чётко, чтобы ID престы, был бы жёстко привязан к ID в товароучётной системе, чтобы я смог найти этот товар по ID в престе и изменить его количество, цену, картинку, артикул, штрихкод, а не перезагружать всю базу товаров из-за одного-двух товаров.

mAgency

В престе синхронизирут по реф. номеру (артикул). Каждый раз удалять базу перед загрузкой, это бред. ID в товароучётной системы можно использовать как артикул или добавить новое поле к товару.
Создание товара с API PrestaShopWebService - http://prestashop-forum.ru/index.php/topic,25.msg32455.html#msg32455
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

Cyrix

Цитата: mAgency от 20 октября 2015, 15:53:15
В престе синхронизирут по реф. номеру (артикул). Каждый раз удалять базу перед загрузкой, это бред. ID в товароучётной системы можно использовать как артикул или добавить новое поле к товару.
Создание товара с API PrestaShopWebService - http://prestashop-forum.ru/index.php/topic,25.msg32455.html#msg32455

Как изменить id продукта при создании? $product->id_product = 2; не катит, при создании в id_product значение 0, автоэкскремент я отключил.

mistral

Вам нельзя использовать классы prestashop, если id у вас не AUTO_INCREMEN. Созранять товары нужно напрямую, с помощью sql запросов.
В prestashop классе товара ид автоматически приваивается. В описании модели нет поля id, смотрите Product.php.

Cyrix

Цитата: mistral от 20 октября 2015, 20:02:37
Вам нельзя использовать классы prestashop, если id у вас не AUTO_INCREMEN. Созранять товары нужно напрямую, с помощью sql запросов.
В prestashop классе товара ид автоматически приваивается. В описании модели нет поля id, смотрите Product.php.

Вот этого я и боялся  :-\

Cyrix

В админке есть импорт CSV.
Как программно выбрать файл категорий.csv, указать нужные опции и импортировать этот файл?

DarinSr

Создаете свой контроллер от родителя AdminImportControllerCore и используте все методы импорта товаров и категорий.
class MyAdminImportController extends AdminImportController
{


Цитироватьпрограммно выбрать файл категорий.csv
Указать путь к файлу
$myfile = '/path/myfile.csv';

Cyrix

А можно какой нибудь пример обработки импорта csv?

DarinSr

Если работаете с базовыми методами и классами, то примеры можете смотреть в базовых контроллерах. Для импорта товаров в /controllers/admin/AdminImportController.php
public function productImport()
{

Cyrix

#102
Я первым делом туда и полез, но у меня голова взорвалась!

$product = new Product((int)$info['id']);

Что это такое??? Ну здесь в же в этой теме мне сказали, что id товара автоинкриментировано и изменить его нельзя, но в
public function productImport()
вдруг я нашёл эту строку. Через условие
if (Tools::getValue('forceIDs') && isset($info['id']) && (int)$info['id']) 
эта функция определяет: установлена ли опция переписывать ID товара, установлено ли значение поля ID в строке csv и является ли это поле целым числом, если всё верно, то создать продукт с id ИЗ ФАЙЛА!!!
$product = new Product((int)$info['id']);
КАК ЭТО ПОНИМАТЬ???

DarinSr

Это выбор товара, который есть у вас в магазине. Для его дальнейшего изменения, все кроме ид.
При импорте могут возникать разные ситуации.
Перед импортом удаляются все товары и потом импортируется список. Создается новый товар.
Перед импортром не удаляются товары, указывается ид каждого товара, товары перезаписываются, т.е. фактически редактируются.

Cyrix

Благодарю coder-а за правильное форматирование моего сообщения, я немного поспешил.

В файле csv в поле ID я могу указать любую цифру вне зависимости от всяких там автоинкрементов
строка

$product = new Product((int)$info['id']);

создаёт товар независимо от всяких автоинкрементов и берёт значение ID из файла csv
вопрос: как она это делает?
что такое (int)$info['id'] ?
чтение поля id ? Значит там цифра-целое число?
Так а если я просто напишу $product = new Product(5); - это не создаст товар с id_product = 5 ?