使用 Prestashop API 获取产品 URL

Posted

技术标签:

【中文标题】使用 Prestashop API 获取产品 URL【英文标题】:Get product URL using Prestashop API 【发布时间】:2014-05-03 05:25:22 【问题描述】:

我有两家使用 Prestashop 的商店。我想从第一个到第二个导入产品 URL 列表。

我可以使用http://example.com/api/products访问产品列表 我也可以使用

访问产品信息

http://example.com/api/products/ProductID

通过这种方式,我可以访问所有产品数据,但找不到产品 URL。

有没有办法从 Prestashop 检索产品 URL?

【问题讨论】:

【参考方案1】:

在tpl文件的controller文件中定义$your_product_id,然后从tpl文件中调用如下

你的控制器.php

public function hookTheHookYouWant()
    
$set_product = $this->context->smarty->assign(array(
'product_id' => 27,
));
$set_product = $this->context->smarty->fetch($this->local_path.'views/templates/front/yourtplfile.tpl');
return $set_product;
    

yourtplfile.tpl

url entity='product' id=$product_id

【讨论】:

【参考方案2】:

除了@robin-delaporte,您还可以使用这个覆盖产品类并自动获取您的 prestashop 中的所有语言。

protected $webserviceParameters = array(
    'objectMethods' => array(
        'add' => 'addWs',
        'update' => 'updateWs'
    ),
    'objectNodeNames' => 'ProductForWs',
    'fields' => array(
        'id_default_image' => array(
            'getter' => 'getCoverWs',
            'setter' => 'setCoverWs',
            'xlink_resource' => array(
                'resourceName' => 'images',
                'subResourceName' => 'products'
            )
        )
    ),
    'associations' => array(
        'url' => array(
            'resource' => 'url',
            'fields' => array(
                'url' => array()
            ),
            'setter' => false
        ),
    ),
);

public function getWsUrl()
    $languages = Language::getLanguages(true, $this->context->shop->id);
    $link = new Link();
    $product = new Product($this->id);


    if (!count($languages))
        return array(array("url" => $link->getProductLink($product)));;

    $default_rewrite = array();
    $rewrite_infos = Product::getUrlRewriteInformations($this->id);
    foreach ($rewrite_infos as $infos)
        $default_rewrite[$infos['id_lang']] = $link->getProductLink($this->id, $infos['link_rewrite'], $infos['category_rewrite'], $infos['ean13'], (int)$infos['id_lang']);

    return $default_rewrite;

【讨论】:

【参考方案3】:

在 prestashop > 1.6 你可以继续:

覆盖 product 类, 重新定义 definition 架构和 webserviceParameters 架构 添加两个字段“url” 创建一个函数“getWsUrl()”,返回产品的绝对网址

工作已经完成,这是我的代码:

 protected $webserviceParameters = array(
    'objectMethods' => array(
        'add' => 'addWs',
        'update' => 'updateWs'
    ),
    'objectNodeNames' => 'ProductForWs',
    'fields' => array(
        'id_default_image' => array(
            'getter' => 'getCoverWs',
            'setter' => 'setCoverWs',
            'xlink_resource' => array(
                'resourceName' => 'images',
                'subResourceName' => 'products'
            )
        )
    ),
    'associations' => array(
        'url' => array('resource' => 'url',
            'fields' => array(
                'url' => array('required' => true)
            ),
            'setter' => false
        )
    ),
);

public static $definition = array(
    'table' => 'product',
    'primary' => 'id_product',
    'fields' => array(
        'name' =>                        array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
        'url' =>                        array('type' => self::TYPE_STRING),
    'associations' => array(),
    ),
);

public function getWsUrl()
    $link = new Link();
    $product = new Product($this->id);
    return array(array("url" => $link->getProductLink($product)));

WebServiceOutputBuilder 将调用您的函数并将 url 路径作为关联返回。喜欢:

<associations>
   <url nodeType="url" api="url">
     <url>
       <url>
         <![CDATA[ http://prestashop.dev/14-prod.html ]]>
       </url>
     </url>
   </url>
</associations>

【讨论】:

【参考方案4】:

在 PrestaShop™ 1.4.5.1 上 我用

public function getProductLink($id)

    global $cookie;
    $productUrl = "http://".$_SERVER['HTTP_HOST'].'/product.php?id_product=' . $id;
    return $productUrl;


【讨论】:

【参考方案5】:

对于那些希望在其商店中生成绝对网址的人,您可以执行以下操作:

$product = new Product(Tools::getValue('id_product'));
$link = new Link();
$url = $link->getProductLink($product);

会产生类似的结果:

http://your.prestashop-website.com/fr/1-T-shirts-a-manches-courtes-delaves.html

【讨论】:

感谢您的回答,但不相关,因为我想要 distant 商店的 URL 哦,是的,确实如此。我的错。 有没有办法从 Preferences -> SEO & URLs based od ' $pageID ' 下创建的页面中获取友好的 url?类似于 $page = new Page(Tools::getValue('page_id')).. ?【参考方案6】:

您可以从产品 ID 生成产品 URL:

$productUrl = 'http://mydomain.com/index.php?controller=product&id_product=' . $productId;

如果打开友好 URL,则 URL 将被重写。

【讨论】:

谢谢,它工作正常,但我还有一个问题要问你:) 有没有办法重写 Url ? @Fabien $ch = curl_init($productUrl); curl_exec($ch); $rewrittenUrl = curl_getinfo($ch, CURLINFO_REDIRECT_URL);

以上是关于使用 Prestashop API 获取产品 URL的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 向 API Prestashop 发送 POST 请求

将产品添加到 Prestashop 1.6 中特定商店的购物车(以编程方式)

在产品页面中使用 Prestashop 模块 tpl 变量

如何从 Prestashop API 检索更多数据到我的颤振应用程序?

Prestashop 产品自定义 - 保存到购物车

在产品 Prestashop 1.7 中添加字段