我正在尝试使用 Prestashop 的网络服务为我的商店构建应用程序。对于搜索产品,众所周知,我们可以使用
http://store_url/api/search?query=keywords&language=1
Run Code Online (Sandbox Code Playgroud)
但是如果我搜索任何东西,它不会给我超过 10 个结果。我试过使用&limit和&display。但没有任何作用。
如果有其他选择,请告诉我。
小智 5
我觉得你可以试试这样搜索产品:
http://store_url/api/products/?display=full&limit=2&filter[name]=[print]%
Run Code Online (Sandbox Code Playgroud)
您可以更改display和limit。
希望这可以帮助任何人。
经过多次砸墙之后,我找到了解决方法。所以,问题出在位于 /classes/webservice 的这个文件中,
WebserviceSpecificManagementSearch.php
Run Code Online (Sandbox Code Playgroud)
在第 87 行附近,您会发现
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'desc', true, false);
Run Code Online (Sandbox Code Playgroud)
这是最后一个但第二个参数告诉搜索函数这是一个 ajax 搜索。弄虚作假是行不通的。
相反,您需要转到 /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);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,结果限制为 10。因此您需要一种方法来告诉函数它正在被 WebService 调用。所以我所做的就是这样的。这很简单。代替
ORDER BY position DESC LIMIT 10'
Run Code Online (Sandbox Code Playgroud)
使用:
ORDER BY position DESC LIMIT '.(($isWS)? '10000': '10')
Run Code Online (Sandbox Code Playgroud)
变量 $isWS 是布尔类型。因此,您必须将 find 函数的声明更改为:
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)
Run Code Online (Sandbox Code Playgroud)
完成此操作后,您现在可以从 WebserviceSpecificManagementSearch 传递 $isWS 的值。因此在第 87 行将其更改为:
$results = Search::find($this->wsObject->urlFragments['language'], $this->wsObject->urlFragments['query'], 1,1, 'position', 'asc', true, false, null, true);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助任何遇到同样问题的人。
| 归档时间: |
|
| 查看次数: |
3258 次 |
| 最近记录: |