我正在使用OpenCart V1.5.3.1并尝试在页面加载时按类别随机化或随机播放产品。 其他排序选项应该仍然有效(按价格,评级,按字母顺序排列,......)。
有人可以给我一些指示吗?
非常感谢, 史蒂芬
我试过的代码: 在控制器/目录/产品/ category.php
正好在
之下 $this->data['products'][] = array(
'product_id' => $result['product_id'],
'thumb' => $image,
'name' => $result['name'],
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
'price' => $price,
'special' => $special,
'tax' => $tax,
'rating' => $result['rating'],
'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
);
我补充说:
shuffle($this->data['products']);
取而代之的是我也尝试了这个: 就在下面:
$results = $this->model_catalog_product->getProducts($data);
我补充说:
srand((float)microtime() * 1000000);
shuffle($results);
$results = array_slice($results, 0, $data['limit']);
这两种方法在选择其他排序选项(评级,定价,名称)时也不幸地改变了结果。我只希望对页面加载的初始结果进行混洗。
答案 0 :(得分:2)
解决方案:
转到catalog/model/catalog/product.php
,找到方法getProducts($data)
。
这里改变了这个:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY p.sort_order";
}
到此:
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY RAND()";
}
(提示:只有最后$sql .= ...
更改了)
通过这种简单的更改,如果没有选择排序,产品将始终按随机顺序排序。