Jump to content

Redirection de la categorie vers fiche produit si 1 seul produit dans la categorie


Recommended Posts

Bonjour
 
Avez vous une idée pour que si une categorie comporte 1 seul produit que lorsque nous arrivons dans la categorie nous sommes redirgié automatiquement vers la fiche produit
 
J'ai fait ca dans product list : 
 {if $nb_products==1}                      
  <script type="text/javascript">
    location.replace("{$product.link}");
  </script>
                    {/if}
 
et ca fonctionne mais le temps de redirection est long et c'est pas exactement ca car la on arrive sur la page categorie elle se charge et se redirge toute seule vers la fiche produit il faudrait aller directement sur la fiche produit

 

Merci de votre aide

Link to comment
Share on other sites

Bonjour,

 

Pour que la redirection soit plus rapide, il faudrait mettre en place votre condition de redirection dans le controller des catégories.
( En faisant une surcharge du fichier controllers/front/CategoryController.php ) avec un code du genre

<?php
class CategoryController extends CategoryControllerCore
{
public function initContent()
	{
		parent::initContent();
		
		
		//Redirection si un seul produit est présent dans la catégorie
		
		if ( $this->nbProducts == 1 ) {
		
			$productLink = $this->cat_products[0]['link'];
			Tools::redirect($productLink);
		
		}
		
		$this->setTemplate(_PS_THEME_DIR_.'category.tpl');
		
		if (!$this->customer_access)
			return;

		if (isset($this->context->cookie->id_compare))
			$this->context->smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)$this->context->cookie->id_compare));

		$this->productSort(); // Product sort must be called before assignProductList()
		
		$this->assignScenes();
		$this->assignSubcategories();
		$this->assignProductList();

		$this->context->smarty->assign(array(
			'category' => $this->category,
			'description_short' => Tools::truncateString($this->category->description, 350),
			'products' => (isset($this->cat_products) && $this->cat_products) ? $this->cat_products : null,
			'id_category' => (int)$this->category->id,
			'id_category_parent' => (int)$this->category->id_parent,
			'return_category_name' => Tools::safeOutput($this->category->name),
			'path' => Tools::getPath($this->category->id),
			'add_prod_display' => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
			'categorySize' => Image::getSize(ImageType::getFormatedName('category')),
			'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')),
			'thumbSceneSize' => Image::getSize(ImageType::getFormatedName('m_scene')),
			'homeSize' => Image::getSize(ImageType::getFormatedName('home')),
			'allow_oosp' => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'),
			'comparator_max_item' => (int)Configuration::get('PS_COMPARATOR_MAX_ITEM'),
			'suppliers' => Supplier::getSuppliers(),
			'body_classes' => array($this->php_self.'-'.$this->category->id, $this->php_self.'-'.$this->category->link_rewrite)
		));
	}
	
}
Link to comment
Share on other sites

Je pense que c'est lié un problème de cache.

Supprimez le fichier de cache des classes "cache/class_index.php" pour que la surcharge du controlleur soit bien prise en compte.

( Pour vérifier que c'est affichez un texte de test, par exemple )
 

Je l'ai testé sans problèmes particuliers sur une version 1.6.0.8

Link to comment
Share on other sites

J'ai bien supprimer le fichier dans cache mais tjrs rien qui ne bouge

 

sur la 1.6.0.9 il y a deja une petite difference dans le fichier
 
class CategoryControllerCore extends FrontController et pas  : class CategoryController extends CategoryControllerCore

 

 

 

 

Link to comment
Share on other sites

Attention à ce que je comprends vous être en train de toucher au fichier Core ( Ce n'est jamais une bonne idée)

La solution que vous donne est de passer par une surcharge du controller des catégories.

 

Pour faire cela il faut donc créer un fichier CategoryController.php dans le dossier override/controllers/front/ et y mettre le code fourni précédemment.

Puis vider supprimer le fichier de cache des classes pour que celui-ci soit pris en compte.

  • Like 2
Link to comment
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...