web-dev-qa-db-fra.com

Définir l'article en premier dans un ordre de tri personnalisé

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);
    }
1
RustyJoomla

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);
    }
1
RustyJoomla