Как правильно генерировать картинку товара? На рассмотрении

1

Я уже наверное год мучаюсь этим вопросом и никто не может дать ответа как правильно генерировать картинки либо исправить баги при их автогенерации.

Прошу дать пример рабочего кода или исправить баг в shop-script. 

$product - объект товара

$img_path - путь к изображению.


Как правильно добавить картинку к товару чтобы потом для этой картинки автоматически создавались эскизы?


Я считаю что в этом месте  кроется баг шоп-скрипта. Модераторы мне говорили что надо не записывать имя картинки в базу, были еще какие-то совсты, но это все не работает или работает криво. Если вы получили картинку и ее имя есть в базе, то почему нельзя на ее основе автоматом сгенерировать эскизы? Почему нужны какие-то танцы с бубнами?

Метод  shopImage::generateThumbs($img, $config->getImageSizes()); прекрасно генерирует эскизы, если его запустить после добавления картинки к товару, но, если кто-то удалит эти эскизы или поставит тему дизайна с другими размерами эскизов, то генерация эскизов налету не работает.

1 комментарий

  • +1
    enso_studio@mail.ru enso_studio@mail.ru 19 марта 2019 16:53 #

    Не уверен что верно тебя понял, я в плагинах для 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;
    }

    Генерация эскизов налету нормально работает только при  "Разрешить создание эскизов произвольных размеров по требованию" + "Сохранять оригинальное изображение".

    Добавление новых комментариев к этой теме отключено.