J'utilise un module sur mesure (qui a été hérité avec le site) et le module trie les articles affichés en fonction de l'ordre de tri sélectionné dans les paramètres XML:
<field name="sortopt" type="list" default="none" label="Sort Options">
<option value="none">Select a Sort option</option>
<option value="priceasc">Price Ascending</option>
<option value="pricedesc">Price Descending</option>
<option value="titleasc">Title Ascending</option>
<option value="titledesc">Title Descending</option>
<option value="priceascfeatured">Price Ascending - Featured First</option>
<option value="pricedescfeatured">Price Descending - Featured First</option>
</field>
Je crée ensuite le tableau de produits:
$products[] = array('id' => $id, 'title' => $title, 'image' => $image,
'product_url' => $product_url, 'region' => $region,
'featured' => $article->featured, 'product_price' => $product_price);
Alors l'ordre de tri est:
if($sortopt == 'priceasc') {
array_multisort($sort['product_price'], SORT_NUMERIC, SORT_ASC, $products);
// Sort Price DESC
} elseif($sortopt == 'pricedesc') {
array_multisort($sort['product_price'], SORT_NUMERIC, SORT_DESC, $products);
// Sort Title ASC
} elseif($sortopt == 'titleasc') {
array_multisort($sort['title'], SORT_NUMERIC, SORT_ASC, $products);
// // Sort Title DESC
} elseif($sortopt == 'titledesc') {
array_multisort($sort['title'], SORT_NUMERIC, SORT_DESC, $products);
// Sort region ASC (Default)
} elseif($sortopt == 'none') {
array_multisort($sort['title'], SORT_NUMERIC, SORT_ASC, $products);
}
Si un article est configuré pour figurer, je dois d'abord l'afficher dans tous les scénarios d'ordre. Je sais que je peux utiliser array_multisort pour trier à l'aide de vedette et de prix, mais ce qui suit montre les fonctions présentées en premier, mais pas ensuite en les plaçant dans l'ordre de tri des prix.
// Sort Price ASC - Featured First
elseif($sortopt == 'priceascfeatured') {
array_multisort($sort['product_price'], SORT_NUMERIC, SORT_ASC, $products,
$sort['featured'], SORT_NUMERIC, SORT_DESC, $products);
}
// Sort Price DESC - Featured First
elseif($sortopt == 'pricedescfeatured') {
array_multisort($sort['product_price'], SORT_NUMERIC, SORT_DESC, $products,
$sort['featured'], SORT_NUMERIC, SORT_DESC, $products);
}
J'ai résolu ce problème en procédant comme suit pour l'ordre de tri:
// Sort Price ASC - Featured First
elseif($sortopt == 'priceascfeatured') {
array_multisort($sort['featured'], SORT_NUMERIC, SORT_DESC, $sort['product_price'], SORT_NUMERIC, SORT_ASC,$products);
}
// Sort Price DESC - Featured First
elseif($sortopt == 'pricedescfeatured') {
array_multisort($sort['featured'], SORT_NUMERIC, SORT_DESC, $sort['product_price'], SORT_NUMERIC, SORT_DESC,$products);
}