Jump to content
sangria777

trier la page manufacturer

Recommended Posts

Bonjour à tous,

 

J'aimerai afficher les produits visibles par marque sur le page 'manufacturer' en les triant par famille et sous famille.

 

Je suis en version 1.5.2.

 

Savez-vous comment faire ?

 

Merci d'avance pour vos réponses !

Share this post


Link to post
Share on other sites

Il faut faire un override sur la class manufacturer en classant les résultats sql selon ton choix.

Share this post


Link to post
Share on other sites

Comment connaitre la class à modifier ?

J'imagine que c'est celle-ci : getManufacturers, mais je ne vois pas quand elle est appeler ?

Share this post


Link to post
Share on other sites

oui c'est celle qui est appelé Manufacturer:getManufacturer

Avec cette fonction du cherche la class manufacturer et dedans la fonction getmanufacturer

A la fin de la requete sql, tu metys un order by name ASC par exemple.

Share this post


Link to post
Share on other sites

Merci pour ta réponse !

 

Dans cette class le première requete est :

$sql = 'SELECT m.*, ml.`description`, ml.`short_description`
  FROM `'._DB_PREFIX_.'manufacturer` m
  LEFT JOIN `'._DB_PREFIX_.'manufacturer_lang` ml ON (
m.`id_manufacturer` = ml.`id_manufacturer`
AND ml.`id_lang` = '.(int)$id_lang.'
  )
  '.Shop::addSqlAssociation('manufacturer', 'm');
  if ($active)
$sql .= '
  WHERE m.`active` = 1';
  $sql .= '
  GROUP BY m.id_manufacturer
  ORDER BY m.`name` ASC'.
  ($p ? ' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n : '');

 

Cela va pas chercher les produits mais les manufacturer ?

 

Je dois modifier celle-la ? :

$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(
 'SELECT p.`id_product`
 FROM `'._DB_PREFIX_.'product` p
 '.Shop::addSqlAssociation('product', 'p').'
 LEFT JOIN `'._DB_PREFIX_.'manufacturer` as m ON (m.`id_manufacturer`= p.`id_manufacturer`)
 WHERE m.`id_manufacturer` = '.(int)$manufacturer['id_manufacturer'].
 ($active ? ' AND product_shop.`active` = 1 ' : '').
 ($all_group ? '' : ' AND p.`id_product` IN (
  SELECT cp.`id_product`
  FROM `'._DB_PREFIX_.'category_group` cg
  LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
  WHERE cg.`id_group` '.$sql_groups.'
 )')
);

 

C'est bien ça ?

 

Car pour l'instant je ne cois pas mes modifs, est-ce que je suis sur la bonne requête ?

Share this post


Link to post
Share on other sites

Je vais reformuler ma demande car pas de réponse et tout mes essais sont des échecs !!

 

Je veux faire un menu directement dans le header avec toutes les marque de ma boutique.

 

Que dois-je faire pour voir/utiliser les fonctions manufacturer dans le header ?

 

Merci pour vos réponses !

Share this post


Link to post
Share on other sites

Pour répondre simplement, prends un module listant les marques et greffe le dans le hook de ton choix.

Share this post


Link to post
Share on other sites

Heu, merci pour ta réponse. Mais je ne pourrai pas utiliser la liste pour la mettre dans mon menu ?

 

Dans ManufacturerController.php, si je fais  :

	/**
	 * Assign template vars related to page content
	 * @see FrontController::initContent()
	 */
	public function initContent()
	{
		parent::initContent();

		if (Validate::isLoadedObject($this->manufacturer) && $this->manufacturer->active && $this->manufacturer->isAssociatedToShop())
		{
			$this->productSort();
			$this->assignOne();
			$this->setTemplate(_PS_THEME_DIR_.'manufacturer.tpl');
			$this->setTemplate(_PS_THEME_DIR_.'header.tpl');
		}
		else
		{
			$this->assignAll();
			$this->setTemplate(_PS_THEME_DIR_.'manufacturer-list.tpl');
			$this->setTemplate(_PS_THEME_DIR_.'header.tpl');
		}
	}

Est-ce une bonne direction pour afficher une fonction de manufacturer dans le header.tpl ?

Share this post


Link to post
Share on other sites

Disons que théoriquement, si tu place ton hook dans ton tpl de menu, il apparaitra.

Cependant, tu peux copier la même fonction que dans le bloc manufacturer par exemple, l'ajouter dans le php de ton menu et appeler ta variable comme dans le bloc manufacturer.

Share this post


Link to post
Share on other sites

Merci pour ta réponse.

 

Je suis en version 1.5.4.1, je croyais qu'on ne pouvait pas mettre de php dans les .tpl ?

Comment faire ?

 

Sinon :

Dans blocmanufacturer, il y a le public function getContent() que je pourrais récupérer.

Je la copie ou ?

Share this post


Link to post
Share on other sites

Il ne faut pas mettre de php dans les tpl.
Il faut mettre le listage des marques dans le php de ton module menu et l'assigner dans les variables avec le reste pour les afficher dans ton tpl comme il le sont dans le tpl du module marque.
Le getContent n'est pas pour l'ajout dans ton tpl.
Dans le hook de ton module (par ex top si ton menu se mets dans el top) tu ajoutes la liste et l'assigne pour la reprendre dans ton tpl
 
Dans le php

    function hookTop($params)
    {
           [...]
		$this->smarty->assign(array(
           [...]
			'manufacturers' => Manufacturer::getManufacturers(),
           [...]
		));
		return $this->display(__FILE__, 'menubidule.tpl');
    }

Dans ton tpl menubidule

<ul>
{foreach from=$manufacturers item=manufacturer name=manufacturer_list}
		{if $smarty.foreach.manufacturer_list.iteration <= $text_list_nb}
		<li class="{if $smarty.foreach.manufacturer_list.last}last_item{elseif $smarty.foreach.manufacturer_list.first}first_item{else}item{/if}"><a href="{$link->getmanufacturerLink($manufacturer.id_manufacturer, $manufacturer.link_rewrite)}" title="{l s='Learn more about' mod='blockmanufacturer'} {$manufacturer.name}">{$manufacturer.name|escape:'htmlall':'UTF-8'}</a></li>
		{/if}
	{/foreach}
</ul>

Share this post


Link to post
Share on other sites

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

×
×
  • Create New...

Important Information

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