Вопрос по импорту комбинаций

Автор kdvbpspr, 18 июня 2014, 14:14:08

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

kdvbpspr

Подскажите пожалуйста.
Мне необходимо для каждой комбинации загрузить несколько фотографий.
Например комбинация связанная с Color и необходимо несколько изображений одного цвета.

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

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

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



Adik

Лучше копируйте строки и меняйте изображение, не вручную же будете грузить. А размер файла увеличится не на много.

kdvbpspr

Цитата: Adik от 18 июня 2014, 17:42:42
Лучше копируйте строки и меняйте изображение, не вручную же будете грузить. А размер файла увеличится не на много.

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

Один момент не понятен... Я импортировал несколько фотографий к комбинации.
Все загрузились, однако галочка стояла только на одной фотографии. Как сделать, чтобы и на остальных фотографиях она стояла (принадлежность нескольких фотографий к одной комбинации)?

kdvbpspr

#3
Плюнул я на всё и написал скрипт, который раскидывает всю нужную мне информацию по таблицам престашопа...
С графическими изображениями работаю, так:

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??

Adik

Подключайте конф.файлы prestashop в своем коде

include_once('prestashop/config/config.inc.php');
include_once('prestashop/config/settings.inc.php');

и используйте размеры изображений, которые определены в админке.
Image::getSize(ImageType::getFormatedName('....'))

coder

Если своя страница в корни сайта, тогда так
require(dirname(__FILE__).'/config/config.inc.php');
require(dirname(__FILE__).'/init.php');

Если на строннем сервере, то через webservice.

Adik

include_once('prestashop/config/config.inc.php');
Вот этого достаточно. Чтобы определить только размеры не требуется подключать init.php

Виталий

#7
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

kdvbpspr

Цитата: Виталий от 23 июня 2014, 14:27:09
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?

tigran

#9
Цитата: Виталий от 23 июня 2014, 14:27:09
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);
}

tigran

Для изменения размеров и оптимизации картинки в классе 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)

kdvbpspr

#11
Не подскажите какие нужно произвести изменения, чтобы сделать ресайз для изображений в каталоге и какие типы изображений ещё могут быть?
Как провести ресайз для всех типов изображений, а не только по products?
Спасибо!

tigran

Типы изображений можно найти в админке - 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'])


kdvbpspr

#13
Помогите пожалуйста, уже пол дня потерял.
Указываю
      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();

то отображается на экране !!!!!!!!!!!!!!!!!!!!

Что не так?

kdvbpspr

#14
Давайте по другому задам вопрос
Указываю
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();