Получить URL-адрес продукта с помощью Prestashop API

У меня есть два магазина, использующих Prestashop. Я хотел бы импортировать список URL-адресов продуктов с первого на второй.

Я могу получить доступ к списку продуктов, используя http://example.com/api/products
Я также могу получить доступ к информации о продукте, используя

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

Таким образом, я могу получить доступ ко всем данным о продуктах, но не могу найти URL-адрес продукта.

Есть ли способ получить URL-адрес продукта из Prestashop?


person Fabien Papet    schedule 25.03.2014    source источник


Ответы (5)


Вы можете сгенерировать URL-адрес продукта из идентификатора продукта:

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

Если Дружественный URL-адрес включен, URL-адрес будет перезаписан.

person yenshirak    schedule 25.03.2014
comment
Спасибо, все работает, но у меня к вам еще вопрос :) Есть ли способ переписать URL? - person Fabien Papet; 26.03.2014
comment
@Фабьен $ch = curl_init($productUrl); curl_exec($ch); $rewrittenUrl = curl_getinfo($ch, CURLINFO_REDIRECT_URL); - person yenshirak; 29.03.2014

Для тех, кто хочет создать абсолютный URL-адрес внутри своего магазина, вы можете сделать следующее:

$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-deloves.html

person Cyril N.    schedule 11.09.2014
comment
Спасибо за ответ, но он не актуален, так как мне нужен URL-адрес из удаленного магазина. - person Fabien Papet; 11.09.2014
comment
О да, действительно. Виноват. - person Cyril N.; 11.09.2014
comment
Есть ли способ получить дружественный URL-адрес со страниц, созданных в разделе «Настройки» -> SEO и URL-адреса на основе '$pageID'? Что-то вроде $page = new Page(Tools::getValue('page_id')).. ? - person Blue; 05.12.2016

В PrestaShop™ 1.4.5.1 я использую

public function getProductLink($id)
{
    global $cookie;
    $productUrl = "http://".$_SERVER['HTTP_HOST'].'/product.php?id_product=' . $id;
    return $productUrl;

}
person Elia Weiss    schedule 23.06.2016

В дополнение к @robin-delaporte вы можете использовать этот переопределяющий класс Product и автоматически получать все языки в вашем 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;
}
person Luis    schedule 29.08.2018

Определите $your_product_id в файле контроллера файла tpl, затем вызовите его из файла 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;
    }
}

вашtplfile.tpl

{url entity='product' id=$product_id}
person Murat Kezli    schedule 01.07.2021