随机在Opencart的默认产品(randomize default products in ope

2019-10-17 10:40发布

我使用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']);

这两种选择其他排序选项(评级,定价,名称)时,这些方法也不幸洗牌的结果。 我只希望在页面加载的初步结果将被打乱。

Answer 1:

解决方案:

进入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 .= ...改变)

通过这个简单的变化,如果没有选择的产品始终以随机顺序进行排序排序。



文章来源: randomize default products in opencart