Przemysław Suszek Posted August 5, 2018 Share Posted August 5, 2018 I write a custom module to create product, import product. Everything is fine but I have a problem with link to product image. When I check the link to product image in source view, when I see the front of the shop the link is: http://example.com/30-home_default/Array.jpg There is an array in the URL because prestashop get in from: $product->link_rewrite = $link_rewrite; And the $link_rewrite has two index (two language). How to resolved this problem ? public function createProductsObject($productID, $productName, $price, $weight, $category, $description, $link_rewrite, $singleStock, $getCategoryID, $getImages, $attrs) { $product = new Product; $product->name = $productName; $product->ean13 = ''; $product->reference = ''; $product->id_category_default = $getCategoryID; $product->category = $getCategoryID; $product->indexed = 1; $product->description = $description; $product->condition = 'new'; $product->redirect_type = '404'; $product->visibility = 'both'; $product->id_supplier = 1; $product->link_rewrite = $link_rewrite; $product->quantity = $singleStock; $product->price = round($price - (18.69 / 100) * $price, 2); $product->active = 1; $product->psoft_hurtobergamo_id = $productID; $product->add(); $product->addToCategories($getCategoryID); $shops = 1; $count = 0; foreach ($getImages->children() AS $image) { $url = $image->attributes()->url->__toString(); $id_product = $product->id; $image = new Image(); $image->id_product = $id_product; $image->position = Image::getHighestPosition($id_product) + 1; if ($count == 0) { $image->cover = true; $count = 1; } else { $image->cover = false; } if (($image->validateFields(false, true)) === true && ($image->validateFieldsLang(false, true)) === true && $image->add()) { if (Configuration::get('PSOFT_HURTO_BERGAMO_THUMB') == '0') { $productThumb = false; } else { $productThumb = true; } $image->associateTo($shops); if (!self::copyImg($id_product, $image->id, $url, 'products', $productThumb)) { $image->delete(); } } } protected static function copyImg($id_entity, $id_image = null, $url, $entity = 'products', $regenerate = false) { $tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import'); $watermark_types = explode(',', Configuration::get('WATERMARK_TYPES')); switch ($entity) { default: case 'products': $image_obj = new Image($id_image); $path = $image_obj->getPathForCreation(); break; } $url = urldecode(trim($url)); $parced_url = parse_url($url); if (isset($parced_url['path'])) { $uri = ltrim($parced_url['path'], '/'); $parts = explode('/', $uri); foreach ($parts as &$part) { $part = rawurlencode($part); } unset($part); $parced_url['path'] = '/' . implode('/', $parts); } if (isset($parced_url['query'])) { $query_parts = array(); parse_str($parced_url['query'], $query_parts); $parced_url['query'] = http_build_query($query_parts); } if (!function_exists('http_build_url')) { require_once(_PS_TOOL_DIR_ . 'http_build_url/http_build_url.php'); } $url = http_build_url('', $parced_url); $orig_tmpfile = $tmpfile; if (Tools::copy($url, $tmpfile)) { // Evaluate the memory required to resize the image: if it's too much, you can't resize it. if (!ImageManager::checkImageMemoryLimit($tmpfile)) { @unlink($tmpfile); return false; } $tgt_width = $tgt_height = 0; $src_width = $src_height = 0; $error = 0; ImageManager::resize($tmpfile, $path . '.jpg', null, null, 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height); $images_types = ImageType::getImagesTypes($entity, true); if ($regenerate) { $previous_path = null; $path_infos = array(); $path_infos[] = array($tgt_width, $tgt_height, $path . '.jpg'); foreach ($images_types as $image_type) { $tmpfile = self::get_best_path($image_type['width'], $image_type['height'], $path_infos); if (ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height'], 'jpg', false, $error, $tgt_width, $tgt_height, 5, $src_width, $src_height)) { // the last image should not be added in the candidate list if it's bigger than the original image if ($tgt_width <= $src_width && $tgt_height <= $src_height) { $path_infos[] = array($tgt_width, $tgt_height, $path . '-' . stripslashes($image_type['name']) . '.jpg'); } if ($entity == 'products') { if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '.jpg')) { unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '.jpg'); } if (is_file(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '_' . (int) Context::getContext()->shop->id . '.jpg')) { unlink(_PS_TMP_IMG_DIR_ . 'product_mini_' . (int) $id_entity . '_' . (int) Context::getContext()->shop->id . '.jpg'); } } } if (in_array($image_type['id_image_type'], $watermark_types)) { Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity)); } } } } else { @unlink($orig_tmpfile); return false; } unlink($orig_tmpfile); return true; } protected static function get_best_path($tgt_width, $tgt_height, $path_infos) { $path_infos = array_reverse($path_infos); $path = ''; foreach ($path_infos as $path_info) { list($width, $height, $path) = $path_info; if ($width >= $tgt_width && $height >= $tgt_height) { return $path; } } return $path; } I use a debug in Netbeans but I cant find how to resolved the problem. Thanks 1 Link to comment Share on other sites More sharing options...
razaro Posted August 10, 2018 Share Posted August 10, 2018 Could you just use $product->link_rewrite = $link_rewrite[(int)Context::getContext()->language->id]; Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now