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

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

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

DarinSr

Цитата: Cyrix от 16 октября 2015, 13:19:28
Нет, не сохранял, я думал автоматически туда всё сохраняется при выполнении $product->id_category_default = тра-ля-ля;
А как сохранить в категории???
При программном добавлении все самому делать нужно, атоматически не создается.

Cyrix

Ужас!!!


В категории всё добавилось!!! Спасибо огромное! Только вот почему-то в разделе "Количества" опция When out of stock ну никак не желает переключаться, $product->out_of_stock = 2; напрочь игнорируется, хотя в таблице значение верное.

DarinSr

Наверное, потому что у вас расширенное управление запасами, в этом случае нужно учитывать связи с таблицей колиства на складе
StockAvailable::setProductOutOfStock($product->id, $out_of_stock );

Cyrix

#48
Цитата: DarinSr от 16 октября 2015, 14:01:21
Наверное, потому что у вас расширенное управление запасами, в этом случае нужно учитывать связи с таблицей колиства на складе
StockAvailable::setProductOutOfStock($product->id, $out_of_stock );

Всё заработалооооо!!! Урааа! Огромное спасибо!!! Супер-форум и супер-умные люди на этом форуме!!!

Осталась одна маааленькая проблемка - никак не могу добавить картинку и привязать её к товару.
$product->image_url = 'http://мой_сайт.ru/img_import/test.jpeg';
чувствую, что этого мало, надо ещё как-то её размножить с разными размерами и именами и привязать к ID создаваемого товара, но как и чем это сделать?

coder

Цитата: coder от 14 октября 2015, 11:55:20
ЦитироватьИ каким образом мне правильно указать картинку-логотип для товара?
$image = new Image();
$image->id_product = $id_product;
$image->cover = 'true / false';
$url = '....jpg';

if (($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add())
{
    $image->associateTo($shops);
    if (!AdminImportController::copyImg($id_product, $image->id, $url, 'products', false))
    {
        $image->delete();
    }
}

или
$image = new Image(null,Context::getContext()->language->id);
$image->id_product = $product->id;
$image->cover = true;   
$image->pathurl = '...' ;
$image->add();


Cyrix

$image = new Image();
$image->id_product = $id_product;
$image->cover = 'true / false';
$url = '....jpg';

if (($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add())
{
    $image->associateTo($shops);
    if (!AdminImportController::copyImg($id_product, $image->id, $url, 'products', false))
    {
        $image->delete();
    }
}


Почему-то не работает, а вот этот

$image = new Image(null,Context::getContext()->language->id);
$image->id_product = $product->id;
$image->cover = true;   
$image->pathurl = '...' ;
$image->add();


работает, но как-то странно, в таблицы добавляет, но картинка не отображается нигде, вместо картинки пустая иконка файла изображения, если на неё нажать, то вылазит сообщение "The requested content cannot be loaded.
Please try again later."

coder

#51
Не не отображается потому что или не добавили функцию ресайза, или не правильно указали язык, или нет разрешения на доступ к файлам изображений.

...
$image->add();
// ресайз
$newpathurl = $image->getPathForCreation();
$images_types = ImageType::getImagesTypes('products');
foreach ($images_types as $image_type)
{
       ImageManager::resize($pathurl, $newpathurl.'-'.Tools::stripslashes($image_type['name']).'.'.$image->image_format, $image_type['width'], $image_type['height'], $image->image_format);
}
$image->update();


Проверьте файлы картинок в папке /img/p/...

Cyrix

Беда товарищи! Не работает код, доступ до файла картинки есть и ничем не ограничен, но вот ресайзинг не исполняется, файлы в папке /img/p/... не появляются. ч.д.?

coder

Добавьте показ ошибок, лог ошибок посмотрите.
if (!$image->add())
    exit(Tools::jsonEncode(array('error' => Tools::displayError('Ошибка записи файла.'))));
else
{
    $newpathurl = $image->getPathForCreation();

    ImageManager::resize($pathurl, $newpathurl.'.'.$image->image_format);
    $images_types = ImageType::getImagesTypes('products');
    foreach ($images_types as $image_type)
    {
        if (!ImageManager::resize($image_path, $newpathurl.'-'.Tools::stripslashes($image_type['name']).'.'.
            $image->image_format, $image_type['width'], $image_type['height'], $image->image_format))
            exit(Tools::jsonEncode(array('error' => Tools::displayError('Ошибка создания копии файла').
                ' '.Tools::stripslashes($image_type['name']))));
    }
    $image->update();
}

Cyrix


Миколас

Тескт ошибок поменяй на английский или сделай поддержку русского в консоле.

Cyrix

Цитата: Nikola от 17 октября 2015, 11:34:39
Тескт ошибок поменяй на английский или сделай поддержку русского в консоле.

Говорит, что не может создать копию файла cart_default

mistral

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

Cyrix

Цитата: mistral от 17 октября 2015, 12:43:45
Такая ошибка говорит о том, что путь к директориям хранения изображений указан не правильно или скрипту запрешена запись в эти директории.

Путь исправил, таблицы заполнились без ошибок, НО! Ссылка на ГЛАВНОЕ изображение с именем файла ID ссылается на не существующий файл с одной цифрой ID которого нет. например создались файлы 32-cart_default.jpg, 32-home_default.jpg... ну и все остальные, КРОМЕ главного файла 32.jpg!!! как его создать?

mistral

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