在prestashop中获取图片网址

时间:2014-07-10 18:02:34

标签: php sql prestashop

我需要为我的网站制作一个比较网站的Feed。它必须是一个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代码还是进一步帮助我?

谢谢!

7 个答案:

答案 0 :(得分:3)

以下是获取所有可能的产品详细信息的SQL代码,包括图像的正确网址:

<img ng-src = "../images/{{allergeen.naam}}.png" ng-if="allergeen.naam"/>

答案 1 :(得分:2)

很简单,从查询中替换concat:

concat(&#39; http://&#39;,ifnull(conf.value,&#39; example.com&#39;),&#39; / img / p /&#39;, SUBSTRING(来自-4 FOR 1的pi.id_image),&#39; /&#39;,SUBSTRING(来自-3 FOR 1的pi.id_image),&#39; /&#39;,SUBSTRING(pi.id_image来自-2 FOR 1),&#39; /&#39;,SUBSTRING(来自-1 FOR 1的pi.id_image),&#39; /&#39;,pi.id_image,&#39; .jpg&#39 ;)as product_image,

答案 2 :(得分:1)

图像路径中的数字是其ID的数字,例如ID为121的图像将具有以下路径:

http://domain.com/img/p/1/2/1/121.jpg

但是,MySQL没有任何内置函数来执行此操作(AFAIK),因此您需要构建用户定义的函数。

答案 3 :(得分:1)

是的,我正在使用这个:           concat('http://', ifnull(conf.value,'example.com'), '/img/c/', c.id_category, '.jpg') as url_image,

它完美无缺。

答案 4 :(得分:1)

图像路径基于图像ID。您拆分所有数字并在它们之间添加斜杠以获取存储图像的文件夹。

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

答案 5 :(得分:0)

使用prestashop类“IMAGE”而不是使用函数

加载MySql
public static function getImgFolderStatic($id_image)

返回包含新文件系统中图像的文件夹的路径

它将图像的数量剥离到prestashop使用的子文件夹中。

示例:

foreach($SQLresult as $key=>$value)
   {
      $imageUrl=_PS_PROD_IMG_DIR_.Image::getImgFolderStatic($value['id_image']).$value['id_image'].".jpg"
   }

答案 6 :(得分:0)

此处$ productID是您的产品ID:)

$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";
}