Jump to content

Ajout/modification du Tri


Recommended Posts

Bonjour,

 

J'ai quelque petit souci pour ajouter une nouvelle sorte de "TRI". Je suis actuellement sous PrestaShop 1.5.6. Je pense qu'il me manque quelque chose au niveau de mes modifications. 

 

post-762680-0-54482200-1396857368_thumb.png

 

   - Je sais comment ajouter une nouvelle liste de Tri. (themes/xxx/product-sort.tpl)

   - Je sais qu'il faut modifier ou Override d'autre fichier comme Tools.php, Category.php ou FrontController.php.

 

Par contre, impossible de les faire fonctionner...

 

Je voudrais faire un classement par "meilleur offre" (donc la meilleur réduction). Ou encore par "meilleur vente".

 

Dans product-sort.tpl j'ai modifié ça dans product-sort.tpl :

<form id="productsSortForm{if isset($paginationId)}_{$paginationId}{/if}" action="{$request|escape:'htmlall':'UTF-8'}" class="productsSortForm">
	<p class="select">
		<label for="selectPrductSort{if isset($paginationId)}_{$paginationId}{/if}">{l s='Sort by'}</label>
        <select id="selectPrductSort{if isset($paginationId)}_{$paginationId}{/if}" class="selectProductSort">
			<option value="{$orderbydefault|escape:'htmlall':'UTF-8'}:{$orderwaydefault|escape:'htmlall':'UTF-8'}" {if $orderby eq $orderbydefault}selected="selected"{/if}>{l s='--'}</option>
			{if !$PS_CATALOG_MODE}
				<option value="price:asc" {if $orderby eq 'price' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Price: Lowest first'}</option>
				<option value="price:desc" {if $orderby eq 'price' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Price: Highest first'}</option>
			{/if}
			<option value="sales:desc" {if $orderby eq 'sales' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Sales: Best to Worst'}</option>
			<option value="sales:asc" {if $orderby eq 'sales' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Sales: Worst to Best'}</option>
			
			<option value="best:asc" {if $orderby eq 'best' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Best Offers'}</option>

				<option value="name:asc" {if $orderby eq 'name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Product Name: A to Z'}</option>
				<option value="name:desc" {if $orderby eq 'name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Product Name: Z to A'}</option>

			{if isset($PS_STOCK_MANAGEMENT) && $PS_STOCK_MANAGEMENT && !$PS_CATALOG_MODE}
				<option value="quantity:desc" {if $orderby eq 'quantity' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='In stock'}</option>
			{/if}
            <option value="reference:asc" {if $orderby eq 'reference' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Reference: Lowest first'}</option>
			<option value="reference:desc" {if $orderby eq 'reference' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Reference: Highest first'}</option>
		</select>
	</p>
</form>

Dans Category.php je pensais modifier la requête SQL qui est proposé (mais après avoir essayé, elle me renvoi uniquement 1)

 

Dans Tool.php j'ai fais cette modification la :

public static function getProductsOrder($type, $value = null, $prefix = false)
	{
		switch ($type)
		{
			case 'by' :
				$list = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position', 5 => 'manufacturer_name', 6 => 'quantity', 7 => 'reference', 8 => 'sales', 9 => 'bestoffers');
				$value = (is_null($value) || $value === false || $value === '') ? (int)Configuration::get('PS_PRODUCTS_ORDER_BY') : $value;
				$value = (isset($list[$value])) ? $list[$value] : ((in_array($value, $list)) ? $value : 'position');
				$order_by_prefix = '';
				if ($prefix)
				{
					if ($value == 'id_product' || $value == 'date_add' || $value == 'date_upd' || $value == 'price' || $value == 'reference' || $value == 'sales' || $value == 'bestoffers')
						$order_by_prefix = 'p.';
					elseif ($value == 'name')
						$order_by_prefix = 'pl.';
					elseif ($value == 'manufacturer_name' && $prefix)
					{
						$order_by_prefix = 'm.';
						$value = 'name';
					}
					elseif ($value == 'position' || empty($value))
						$order_by_prefix = 'cp.';
				}

				return $order_by_prefix.$value;
			break;

			case 'way' :
				$value = (is_null($value) || $value === false || $value === '') ? (int)Configuration::get('PS_PRODUCTS_ORDER_WAY') : $value;
				$list = array(0 => 'asc', 1 => 'desc');
				return ((isset($list[$value])) ? $list[$value] : ((in_array($value, $list)) ? $value : 'asc'));
			break;
		}
	}

Malheureusement il me manque une chose à modifier pour que cela marche. Mais je ne sais pas quoi....

 

Si qqun d'entre vous à déjà eu à faire a ce problème et à trouvé une solution... Car j'ai beau avoir testé ce que Google me proposait... Rien n'y fais.

 

Merci

 

 

 

 
Attached Thumbnails
  • post-762680-0-54482200-1396857368_thumb.
  •  

Share this post


Link to post
Share on other sites

Re,

 

J'ai avancé et découvert que le problème ne venait pas de mon code, qui est correct, mais du module "bloc de navigation à facette".

 

Si qqun à une suggestion à propos de la modification du module. Il est le(la) bienvenue !

Share this post


Link to post
Share on other sites

Et re encore une fois :)

 

Voilà, j'ai réussi à boucler cette affaire.

 

Il fallait, dans le module, rajouter les lignes de codes concernant la requête que j'ai insérer dans mon fichier Category.php.

 

Si vous voulez, je pourrais éventuellement faire un tuto de tout cela (si demande il y a).

 

Sujet résolu !

 

Bonne journée à tous !

Share this post


Link to post
Share on other sites

  • 2 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More