Я уже наверное год мучаюсь этим вопросом и никто не может дать ответа как правильно генерировать картинки либо исправить баги при их автогенерации.
Прошу дать пример рабочего кода или исправить баг в shop-script.
$product - объект товара
$img_path - путь к изображению.
Как правильно добавить картинку к товару чтобы потом для этой картинки автоматически создавались эскизы?
Я считаю что в этом месте кроется баг шоп-скрипта. Модераторы мне говорили что надо не записывать имя картинки в базу, были еще какие-то совсты, но это все не работает или работает криво. Если вы получили картинку и ее имя есть в базе, то почему нельзя на ее основе автоматом сгенерировать эскизы? Почему нужны какие-то танцы с бубнами?
Метод shopImage::generateThumbs($img, $config->getImageSizes()); прекрасно генерирует эскизы, если его запустить после добавления картинки к товару, но, если кто-то удалит эти эскизы или поставит тему дизайна с другими размерами эскизов, то генерация эскизов налету не работает.
1 комментарий
Не уверен что верно тебя понял, я в плагинах для SS я использую метод
/** * @var waSystem */ private $wa; /** * @var waAppConfig */ private $config; /** * @var shopProductImagesModel */ private $productImagesModel; /** * @param integer $productId * @param string $url * @param boolean $isDefault Использовать как основное изображение товара * @return array */ public function addImage($productId, $url, $isDefault = true) { $filename = basename($url); $tmpPath = $this->wa->getTempPath($this->getUrl($filename, true)); waFiles::upload($url, $tmpPath); $image = waImage::factory($tmpPath); if (!$this->config) { $this->config = $this->wa->getConfig(); } if ($this->config->getOption('image_filename')) { $filename = shopHelper::transliterate($filename); } else { $filename = ''; } $data = array( 'product_id' => $productId, 'upload_datetime' => date('Y-m-d H:i:s'), 'width' => $image->width, 'height' => $image->height, 'size' => filesize($tmpPath), 'filename' => $filename, 'original_filename' => basename($tmpPath), 'ext' => pathinfo($tmpPath, PATHINFO_EXTENSION), ); if (!$this->productImagesModel) { $this->productImagesModel = new shopProductImagesModel; } $data['id'] = $this->productImagesModel->add($data, $isDefault); if (!$data['id']) { $this->productImagesModel->ping(); throw new waException(sprintf_wp('Product %d: image %s not added.', $productId, $url)); } $imagePath = shopImage::getPath($data); waFiles::move($tmpPath, $imagePath); if (!$this->config->getOption('image_thumbs_on_demand')) { // Создание базовых эскизов shopImage::generateThumbs($data, $this->config->getImageSizes()); } return $data; }Генерация эскизов налету нормально работает только при "Разрешить создание эскизов произвольных размеров по требованию" + "Сохранять оригинальное изображение".