1

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

不幸的是,这两种方法在选择另一个排序选项(评级、定价、名称)时也会对结果进行洗牌。我只希望页面加载的初始结果被打乱。

4

1 回答 1

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 .= ...更改)

通过这个简单的更改,如果没有选择排序,产品将始终按随机顺序排序。

于 2012-12-03T11:08:13.853 回答