如何使用 Prestashop 网络服务进行搜索
How to search using Prestashop web service
我正在尝试使用 Prestashop 的网络服务为我的商店构建应用程序。对于搜索产品,众所周知我们可以使用
http://store_url/api/search?query=keywords&language=1
但如果我搜索任何内容,它不会给我超过 10 个结果。我试过使用 &limit
和 &display
。但是没有任何效果。
如果有其他选择,请告诉我。
经过多次翻墙之后,我找到了解决方法。因此,问题出在位于 /classes/webservice、
的文件中
WebserviceSpecificManagementSearch.php
在第 87 行附近,您会发现
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'desc', true, false);
这是最后一个也是第二个参数,它告诉搜索函数这是一个 ajax 搜索。 将其设为 False 将不起作用。
相反,您需要转到 /classes/Search.php 并找到函数 "find"。从第 278 行左右开始,您会发现:
if ($ajax)
{
$sql = 'SELECT DISTINCT p.id_product, pl.name pname, cl.name cname,
cl.link_rewrite crewrite, pl.link_rewrite prewrite '.$score.'
FROM '._DB_PREFIX_.'product p
INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
)
'.Shop::addSqlAssociation('product', 'p').'
INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (
product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
)
WHERE p.`id_product` '.$product_pool.'
ORDER BY position DESC LIMIT 10');
return $db->executeS($sql);
}
如您所见,结果限制为 10。因此您需要一种方法来告诉该函数它正在被 WebService 调用。所以我所做的就是这个。这很简单。而不是
ORDER BY position DESC LIMIT 10'
使用:
ORDER BY position DESC LIMIT '.(($isWS)? '10000': '10')
变量$isWS 是布尔类型。因此,您必须将查找函数的声明更改为:
public static function find($id_lang, $expr, $page_number = 1, $page_size = 1, $order_by = 'position',
$order_way = 'desc', $ajax = false, $use_cookie = true, Context $context = null, $isWS = false)
完成此操作后,您现在可以从 WebserviceSpecificManagementSearch 传递 $isWS 的值。所以在第 87 行将其更改为:
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'asc', true, false, null, true);
希望这对遇到同样问题的人有所帮助。
我觉得你可以试试这样搜索产品:
http://store_url/api/products/?display=full&limit=2&filter[name]=[print]%
您可以更改 display
和 limit
。
来自Prestashop web services doc.
希望这对任何人都有帮助。
我正在尝试使用 Prestashop 的网络服务为我的商店构建应用程序。对于搜索产品,众所周知我们可以使用
http://store_url/api/search?query=keywords&language=1
但如果我搜索任何内容,它不会给我超过 10 个结果。我试过使用 &limit
和 &display
。但是没有任何效果。
如果有其他选择,请告诉我。
经过多次翻墙之后,我找到了解决方法。因此,问题出在位于 /classes/webservice、
的文件中WebserviceSpecificManagementSearch.php
在第 87 行附近,您会发现
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'desc', true, false);
这是最后一个也是第二个参数,它告诉搜索函数这是一个 ajax 搜索。 将其设为 False 将不起作用。
相反,您需要转到 /classes/Search.php 并找到函数 "find"。从第 278 行左右开始,您会发现:
if ($ajax)
{
$sql = 'SELECT DISTINCT p.id_product, pl.name pname, cl.name cname,
cl.link_rewrite crewrite, pl.link_rewrite prewrite '.$score.'
FROM '._DB_PREFIX_.'product p
INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
)
'.Shop::addSqlAssociation('product', 'p').'
INNER JOIN `'._DB_PREFIX_.'category_lang` cl ON (
product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
)
WHERE p.`id_product` '.$product_pool.'
ORDER BY position DESC LIMIT 10');
return $db->executeS($sql);
}
如您所见,结果限制为 10。因此您需要一种方法来告诉该函数它正在被 WebService 调用。所以我所做的就是这个。这很简单。而不是
ORDER BY position DESC LIMIT 10'
使用:
ORDER BY position DESC LIMIT '.(($isWS)? '10000': '10')
变量$isWS 是布尔类型。因此,您必须将查找函数的声明更改为:
public static function find($id_lang, $expr, $page_number = 1, $page_size = 1, $order_by = 'position',
$order_way = 'desc', $ajax = false, $use_cookie = true, Context $context = null, $isWS = false)
完成此操作后,您现在可以从 WebserviceSpecificManagementSearch 传递 $isWS 的值。所以在第 87 行将其更改为:
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'asc', true, false, null, true);
希望这对遇到同样问题的人有所帮助。
我觉得你可以试试这样搜索产品:
http://store_url/api/products/?display=full&limit=2&filter[name]=[print]%
您可以更改 display
和 limit
。
来自Prestashop web services doc.
希望这对任何人都有帮助。