Мне нужно сделать фид для моего сайта для сравнения сайта. Это должно быть заявление sql. Пока у меня это:
select pl.name as Titel, ROUND(p.price*1.21,2) as Price, replace(concat('http://', ifnull(conf.value,'domain/'), cl.name, '/', p.id_product, '-' , pl.name, '.html'),' ','-') as Link, concat('http://', ifnull(conf.value,'domain'), '/img/p/', p.id_product, '-' , pi.id_image, '.jpg') as "Image-location", cl.name as Categorie, p.id_product AS ID from dbrb_product p left join dbrb_image pi on p.id_product = pi.id_product left join dbrb_product_lang pl on p.id_product = pl.id_product left join dbrb_category_lang cl on p.id_category_default = cl.id_category left join dbrb_configuration conf on conf.name = 'dbrb_SHOP_DOMAIN' left join dbrb_product_carrier x on p.id_product = x.id_product group by p.id_product
Но теперь с новой версией prestashop версии 1.6 изображение больше не работает.
Теперь путь изображения: domain.com/img/p/number/number/number/image.png Я не получаю от него логику, может кто-нибудь мне сказать?
Есть еще одна проблема, с которой мне приходится иметь дело, потому что есть некоторые продукты, которые имеют одинаковый образ.
Может кто-нибудь заполнить код SQL или помочь мне дальше?
Благодаря!
Простой, замените concat из вашего запроса для этого:
concat ('http: //', ifnull (conf.value, 'example.com'), '/img/p/',SUBSTRING(pi.id_image from -4 FOR 1),' / ', SUBSTRING (pi. id_image from -3 FOR 1), '/', SUBSTRING (pi.id_image from -2 FOR 1), '/', SUBSTRING (pi.id_image from -1 FOR 1), '/', pi.id_image, '. jpg ') как product_image,
Вот код SQL, чтобы получить все возможные детали продукта, включая правильные URL-адреса изображений:
SELECT p.id_product AS 'ID', pl.id_lang AS 'ID_LANG', p.active AS 'Active (0/1)', pl.name AS 'Name', p.id_category_default AS 'Default Category', p.price AS 'Price tax excl.', p.id_tax_rules_group AS 'Tax rules ID', p.wholesale_price AS 'Wholesale price', p.on_sale AS 'On sale (0/1)', p.reference AS 'Reference #', p.quantity AS 'Quantity', pl.description_short AS 'Short description', pl.description AS 'Description', pl.meta_title AS 'Meta-title', pl.meta_keywords AS 'Meta-keywords', pl.meta_description AS 'Meta-description', pl.link_rewrite AS 'URL rewritten', pl.available_now AS 'Text when in stock', pl.available_later AS 'Text when backorder allowed', p.available_for_order AS 'Available for order', p.date_add AS 'Product creation date', p.show_price AS 'Show price', p.online_only AS 'Available online only', p.condition AS 'Condition', concat( 'http://YOUR-URL.com/img/p/',mid(im.id_image,1,1),'/', if (length(im.id_image)>1,concat(mid(im.id_image,2,1),'/'),''),if (length(im.id_image)>2,concat(mid(im.id_image,3,1),'/'),''),if (length(im.id_image)>3,concat(mid(im.id_image,4,1),'/'),''),if (length(im.id_image)>4,concat(mid(im.id_image,5,1),'/'),''), im.id_image, '.jpg' ) AS url_image FROM ps_product p INNER JOIN ps_product_lang pl ON p.id_product = pl.id_product LEFT JOIN ps_image im ON p.id_product = im.id_product WHERE 1=1 and p.active = 1
Число в путях к изображению – это цифры его идентификатора, например изображение с идентификатором 121 будет иметь следующий путь:
http://img.ruphp.com/php/121.jpg
Однако MySQL не имеет встроенных функций для этого (AFAIK), поэтому вам нужно будет создать пользовательскую функцию.
Mh, im, используя это: concat('http://', ifnull(conf.value,'example.com'), '/img/c/', c.id_category, '.jpg') as url_image,
он работает отлично.
Путь изображения основан на идентификаторе изображения. Вы разделяете все цифры и добавляете косую черту между ними, чтобы получить папку, в которой хранится изображение.
-- build the image path CONCAT('http://', -- get the shop domain IFNULL(conf.value, 'undefined_domain'), -- the path to the pictures folder '/img/p/', -- now take all the digits separetly as MySQL doesn't support loops in SELECT statements -- assuming we have smaller image id than 100'000 ;) IF(CHAR_LENGTH(pi.id_image) >= 5, -- if we have 5 digits for the image id CONCAT( -- take the first digit SUBSTRING(pi.id_image, -5, 1), -- add a slash '/'), ''), -- repeat for the next digits IF(CHAR_LENGTH(pi.id_image) >= 4, CONCAT(SUBSTRING(pi.id_image, -4, 1), '/'), ''), IF(CHAR_LENGTH(pi.id_image) >= 3, CONCAT(SUBSTRING(pi.id_image, -3, 1), '/'), ''), if(CHAR_LENGTH(pi.id_image) >= 2, CONCAT(SUBSTRING(pi.id_image, -2, 1), '/'), ''), IF(CHAR_LENGTH(pi.id_image) >= 1, CONCAT(SUBSTRING(pi.id_image, -1, 1), '/'), ''), -- add the image id pi.id_image, -- put the image extension '.jpg') as image_url
Используйте класс prestashop «IMAGE» вместо загрузки MySql с функциями
public static function getImgFolderStatic($id_image)
Возвращает путь к папке, содержащей изображение в новой файловой системе
Он отображает номер изображения во вложенные папки, используемые preashashop.
Пример:
foreach($SQLresult as $key=>$value) { $imageUrl=_PS_PROD_IMG_DIR_.Image::getImgFolderStatic($value['id_image']).$value['id_image'].".jpg" }
Здесь $ productID – ваш идентификатор вашего продукта 🙂
$prod = new Product($productID); $imgArray = $prod->getImages('1'); if (count($imgArray)>0) { $imgID = $imgArray[0]["id_image"]; $imageUrl=_THEME_PROD_DIR_.Image::getImgFolderStatic($imgID).$imgID.".jpg"; }