Автор Тема: Вопрос по импорту комбинаций  (Прочитано 627 раз)

18 Июня 2014, 14:14:08
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите пожалуйста.
Мне необходимо для каждой комбинации загрузить несколько фотографий.
Например комбинация связанная с Color и необходимо несколько изображений одного цвета.

Как я понимаю. В отличии от Products где можно указывать фотографии через запятую, в Combinations можно указывать только одну фотографию.

Как можно указать несколько?
Неужели дублировать строки только с разными изображениями?

И ещё один момент, что нужно указать, чтобы при импорте к одной комбинации нескольких фотографий у них в Image автоматически ставилась галка (чтобы при выборе определённого цвета сразу отображались несколько фотографий этого цвета)?


18 Июня 2014, 17:42:42
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 13440
  • Репутация: +14561/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Лучше копируйте строки и меняйте изображение, не вручную же будете грузить. А размер файла увеличится не на много.
18 Июня 2014, 17:55:52
Ответ #2
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Лучше копируйте строки и меняйте изображение, не вручную же будете грузить. А размер файла увеличится не на много.

Спасибо! Я так и делал... Думал может как-то по другому можно..

Один момент не понятен... Я импортировал несколько фотографий к комбинации.
Все загрузились, однако галочка стояла только на одной фотографии. Как сделать, чтобы и на остальных фотографиях она стояла (принадлежность нескольких фотографий к одной комбинации)?
23 Июня 2014, 11:51:05
Ответ #3
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Плюнул я на всё и написал скрипт, который раскидывает всю нужную мне информацию по таблицам престашопа...
С графическими изображениями работаю, так:

function createImages ($url, $sizes, $id) {
$imagine = new \Imagine\Gd\Imagine();
$id = (string)$id;
$path = '';
for($i = 0; $i < strlen($id); $i++) {
$path .=$id{$i}."/";
}
$path = "/www/htdocs/img/p/".$path;
exec("mkdir -p ".$path);
try {
copy($url, $path.$id.".jpg");
foreach ($sizes as $name => $size) {
$image = $imagine->open($url);
$mode = Imagine\Image\ImageInterface::THUMBNAIL_INSET;
$new_size = $image->thumbnail(new Imagine\Image\Box($size["width"], $size["height"]), $mode);
$new_size->save($path.$id.'-'.$name.'.jpg');
}
}  catch (Exception $e) {
}

Всё работает, однако результат меня не устраивает
Например при импортировании изображения средствами престашопа (например для каталога) получаются как 250x250.
В моём случае один параметр получается 250, а другой в соответствии с пропорциями...

Как добиться изображения 250x250, можно ли задействовать какие-то классы престашопа
или использовать imagecopyresampled??
23 Июня 2014, 13:51:21
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 13440
  • Репутация: +14561/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подключайте конф.файлы prestashop в своем коде
include_once('prestashop/config/config.inc.php');
include_once('prestashop/config/settings.inc.php');
и используйте размеры изображений, которые определены в админке.
Image::getSize(ImageType::getFormatedName('....'))
23 Июня 2014, 13:55:54
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33008
  • Репутация: +26760/-0
    • Просмотр профиля
Если своя страница в корни сайта, тогда так
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');
Если на строннем сервере, то через webservice.
23 Июня 2014, 14:05:10
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 13440
  • Репутация: +14561/-0
  • Сообщество PrestaShop
    • Просмотр профиля
include_once('prestashop/config/config.inc.php');Вот этого достаточно. Чтобы определить только размеры не требуется подключать init.php
23 Июня 2014, 14:27:09
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 105581
  • Репутация: +39547/-0
    • Просмотр профиля
    • Webstudio UwK
include_once(dirname(__FILE__).'/classes/Image.php');
$image = new Image();
/* Id изображения */
$image->id = $id_image;
/* Если для товара, определяем ид товара. Также можно для категории и т.д.*/
$image->id_product = $id_product;
/* Определям изображение по-умолчанию */
$image->cover = $image->position = 1;
/* Можно установить путь к изображениям */
$path = $image->getPathForCreation();
/* Сделать ресайз вашего изображения */
ImageManager::resize($file_вашего_изображения, $path.'.jpg');
/*
    Определить тип изображения, например, products
    для использования размеров данного типа
    $image_type['width'], $image_type['height']);
 */
$images_types = ImageType::getImagesTypes('изображение для товара или категории...');
Cоздание интернет сайтов Webstudio UwK
23 Июня 2014, 15:31:54
Ответ #8
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
include_once(dirname(__FILE__).'/classes/Image.php');
$image = new Image();
/* Id изображения */
$image->id = $id_image;
/* Если для товара, определяем ид товара. Также можно для категории и т.д.*/
$image->id_product = $id_product;
/* Определям изображение по-умолчанию */
$image->cover = $image->position = 1;
/* Можно установить путь к изображениям */
$path = $image->getPathForCreation();
/* Сделать ресайз вашего изображения */
ImageManager::resize($file_вашего_изображения, $path.'.jpg');
/*
    Определить тип изображения, например, products
    для использования размеров данного типа
    $image_type['width'], $image_type['height']);
 */
$images_types = ImageType::getImagesTypes('изображение для товара или категории...');

Спасибо за Ваш ответ, я уж подумал что меня не так поняли...
Импорт изображения + ресайз начинается по $image->add?
23 Июня 2014, 15:33:32
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
include_once(dirname(__FILE__).'/classes/Image.php');
$image = new Image();
/* Id изображения */
$image->id = $id_image;
/* Если для товара, определяем ид товара. Также можно для категории и т.д.*/
$image->id_product = $id_product;
/* Определям изображение по-умолчанию */
$image->cover = $image->position = 1;
/* Можно установить путь к изображениям */
$path = $image->getPathForCreation();
/* Сделать ресайз вашего изображения */
ImageManager::resize($file_вашего_изображения, $path.'.jpg');
/*
    Определить тип изображения, например, products
    для использования размеров данного типа
    $image_type['width'], $image_type['height']);
 */
$images_types = ImageType::getImagesTypes('изображение для товара или категории...');
Спасибо. Как раз нужно было грузить картинки в базу минуя импорт.
Добавил в свой модуль
$imgdir = dirname(__FILE__).'/images_import/';
$tmpfile = $imgdir . sprintf("%06s",$idproduit).'.jpg';

if(file_exists($tmpfile)){
      $sql = "INSERT INTO ps_image (id_product,position,cover) VALUES (".$id_product.",1,1)";$res = $ps->req($sql);
      $id_image = mysql_insert_id();
      $sql = "INSERT INTO ps_image_lang (id_image,id_lang) VALUES (".$id_image.",1)";$res = $ps->req($sql);
      $sql = "INSERT INTO ps_image_lang (id_image,id_lang) VALUES (".$id_image.",2)";$res = $ps->req($sql);
      $sql = "INSERT INTO ps_image_shop (id_image,id_shop,cover) VALUES (".$id_image.",1,1)";$res = $ps->req($sql);
      // добавляю в бд
      // создаю картинки для товаров и меняю размеры
      // include_once(dirname(__FILE__).'/../../classes/Image.php');  <- Работает без подключения класса Image
      $image = new Image();
      $image->id = $id_image;
      $image->id_product = $id_product;
      $image->cover = $image->position = 1;
      $path = $image->getPathForCreation();
      ImageManager::resize($tmpfile, $path.'.jpg');
      $images_types = ImageType::getImagesTypes('products');
      foreach ($images_types as $image_type)
        ImageManager::resize($tmpfile, $path.'-'.stripslashes($image_type['name']).'.jpg', $image_type['width'], $image_type['height']);
                   
      unlink($tmpfile);
}
23 Июня 2014, 15:36:42
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для изменения размеров и оптимизации картинки в классе ImageManager метод resize
/**
* Resize, cut and optimize image
*
* @param string $src_file Image object from $_FILE
* @param string $dst_file Destination filename
* @param integer $dst_width Desired width (optional)
* @param integer $dst_height Desired height (optional)
* @param string $file_type
* @return boolean Operation result
 */
public static function resize($src_file, $dst_file, $dst_width = null, $dst_height = null, $file_type = 'jpg', $force_type = false)
23 Июня 2014, 16:23:45
Ответ #11
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не подскажите какие нужно произвести изменения, чтобы сделать ресайз для изображений в каталоге и какие типы изображений ещё могут быть?
Как провести ресайз для всех типов изображений, а не только по products?
Спасибо!
24 Июня 2014, 08:59:57
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Типы изображений можно найти в админке - products, categories, manufacturers, suppliers, scenes, stores.
Ресайз для всех можно делать в цикле
foreach ($type as $k => $imageType)
{
            ImageManager::resize($dir.$image, $newDir.substr($image, 0, -4).'-'.stripslashes($imageType['name']).'.jpg', (int)$imageType['width'], (int)$imageType['height'])
24 Июня 2014, 09:46:29
Ответ #13
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Помогите пожалуйста, уже пол дня потерял.
Указываю
      require(dirname(__FILE__).'/config/config.inc.php');
   require(dirname(__FILE__).'/config/settings.inc.php');
   require(dirname(__FILE__).'/init.php');
   require(dirname(__FILE__).'/classes/Image.php');
Далее      
      $image = new Image();После этой строки,
     print ("!!!!!!!!!!!!!!!!!!!!");Ничего не отображается на экране
Prestashop 1.6.0.6

Если вывести, так
      print ("!!!!!!!!!!!!!!!!!!!!");
     $image = new Image();
то отображается на экране !!!!!!!!!!!!!!!!!!!!

Что не так?
24 Июня 2014, 10:36:30
Ответ #14
  • Старожил
  • ****
  • Сообщений: 281
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Давайте по другому задам вопрос
Указываю
require(dirname(__FILE__).'/classes/Image.php');
Получаю
Fatal error: Class 'ObjectModel' not found in /www/htdocs/classes/Image.php on line 28
Если указываю:
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/config/settings.inc.php');
require(dirname(__FILE__).'/init.php');
require(dirname(__FILE__).'/classes/Image.php');
То ошибка исчезает, но
я все равно не могу пользоваться объектом
$image = new Image();
Потому, что после этой строки даже вывод на экран print не отрабатывается

Как правильно подключить /classes/Image.php,
чтобы использовать
$image = new Image();