随机化opencart中的默认产品

时间:2012-12-01 12:34:34

标签: random opencart product

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

这两种方法在选择其他排序选项(评级,定价,名称)时也不幸地改变了结果。我只希望对页面加载的初始结果进行混洗。

1 个答案:

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

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