Автор Тема: Prestashop FAQ Как программно создать товар  (Прочитано 10141 раз)

28 Октябрь 2015, 10:30:23
Ответ #15
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Библиотека PhpThumb.

Для работы с изображениями можно использовать любую библиотеку php.
Можете работать со стандарной prestashop. Тогда нужно подключить файл config.inc.php.
Добавление изображений к товару:
<?php
$image 
= new Image(null,Context::getContext()->language->id);
$image->id_product $product->id;
$image->cover true;   
$image_path 'test.jpg';
$images_types ImageType::getImagesTypes('products');
if (!
$image->add())
{
    exit(Tools::jsonEncode(array('error' => Tools::displayError('Error save file.'))));
}
else 
{
$new_image_path $image->getPathForCreation();
ImageManager::resize($image_path$new_image_path .'.'.$image->image_format);
foreach ($images_types as $image_type)
{
if (!ImageManager::resize($image_path$new_image_path.'-'.Tools::stripslashes($image_type['name']).'.'.$image->image_format$image_type['width'], $image_type['height'], $image->image_format))
exit(Tools::jsonEncode(array('error' => Tools::displayError('Error creating copy file').' '.Tools::stripslashes($image_type['name']))));
}
$image->update();
}
28 Октябрь 2015, 10:43:32
Ответ #16
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Для ресайза изображений можно использовать WideImage. Скачать WideImage
Установить с  PEAR
myserver:~$ pear channel-discover pear.kozak.si
myserver:~$ pear install kozak.si/WideImage
Подключить в файле ImportProduct.php, заменив
require('ThumbLib.inc.php');на
include 'WideImage/WideImage.php';Заменить создание миниатюр
$thumb = PhpThumbFactory::create($images_path . $id_image . '.jpg');
...
$thumb->save($images_path . $id_image . '-thickbox_default.jpg');
на
$image = WideImage::load($images_path . $id_image . '.jpg');
$resized = $image->resize(80, 80);
$resized->saveToFile($images_path . $id_image . '-cart_default.jpg');
....
// для всех типов изображений
28 Октябрь 2015, 15:42:06
Ответ #17
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А как не добавлять новую картинку, а перезаписать существующую у выбранного товара? Вот например я вчера создал товар с id=6 с такой-то ценой и такой-то картинкой. Сегодня я решил перезаписать этот товар, изменив его цену и картинку, но старая картинка мне не нужна, как бы мне ту старую удалить нафиг, а новую вместо неё загрузить?
28 Октябрь 2015, 15:48:57
Ответ #18
  • Фрилансер
  • *
  • Сообщений: 113
  • Репутация: +3/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$product->delete();Удаляет товар со всеми связями.
28 Октябрь 2015, 15:56:34
Ответ #19
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Мне надо заменить одну картинку, удалять из-за этого весь товар со всеми связями, а потом создавать всё снова - не хочу.
28 Октябрь 2015, 17:10:11
Ответ #20
  • Фрилансер
  • *
  • Сообщений: 113
  • Репутация: +3/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$image = new Image();
$image->id_product = $id_product;
$image->delete();
29 Октябрь 2015, 10:21:57
Ответ #21
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$image = new Image();
$image->id_product = $id_product;
$image->delete();

Вот это другое дело!  :) Спасибо!
29 Октябрь 2015, 16:08:38
Ответ #22
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Кто знает как добавить уже существующие комбинации в товар?

Например: есть атрибут Color:Белый  - как его добавить товару у которого id = 1 ?

$combination = New Combination(1);
$combination->id_product = 1;
$combination->default_on = 1;
$combination->minimal_quantity = 2;
$combination->quantity = 10;
$combination->available_date = '0000-00-00';
$combination->save();
не катит  :(
02 Ноябрь 2015, 11:35:21
Ответ #23
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Никто не знает как программно добавить комбинации в товар? Весело.
02 Ноябрь 2015, 12:36:01
Ответ #24
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Создание комбинации товара из значений атрибута
$combination = new Combination((int)$id_product_attribute);
...
$combination->setAttributes($attribute_combination_list);
$combination->setImages($id_images);
...
$combination->add();

Обновление существующей комбинации
$combination = new Combination((int)$id_combination['id_product_attribute']);
...
$combination->update();
02 Ноябрь 2015, 12:38:09
Ответ #25
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А $attribute_combination_list - это массив? Что там внутри должно быть?
02 Ноябрь 2015, 12:39:23
Ответ #26
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
02 Ноябрь 2015, 14:34:12
Ответ #27
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$combination->setAttributes(array('чего',  'тут' , 'писать' ???));
02 Ноябрь 2015, 15:02:46
Ответ #28
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы можете увидеть что передается в функции в классе.
Для комбинаций /classes/Combination.php
public function setAttributes($ids_attribute)
02 Ноябрь 2015, 15:20:47
Ответ #29
  • Пользователь
  • **
  • Сообщений: 91
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Вы можете увидеть что передается в функции в классе.
Для комбинаций /classes/Combination.php
public function setAttributes($ids_attribute)

Пишу $combination->setAttributes(array(1, 2));

foreach ($ids_attribute as $value)
$sql_values[] = '('.(int)$value.', '.(int)$this->id.')';
....
Получаю 2, 0!!!
что такое $this->id и как его туда загнать ????????? Этот id содержит номер для таблицы ps_product_attribute_combination поле id_product_attribute !!!