1

OpenCart V1.5.3.1を使用しており、ページの読み込み時にカテゴリごとに製品をランダム化またはシャッフルしようとしています。ただし、他の並べ替えオプションは引き続き機能します(価格、評価、アルファベット順など)。

私にいくつかの指針を与えることができる人はいますか?

どうもありがとう、スティーブン

私が試したコード:controller / catalog / product / 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 に答える