Jump to content

[Prestashop 1.6] redirider les produits inactifs sur leur catégorie par défaut


Recommended Posts

Bonjour

De "retour" sur Prestashop depuis peu, je tente de faire une simple redirection d'un produit désactivé vers sa catégorie par défaut.

Pour ce faire, modification du controleur ProductController, plus particulièrement dans la méthode Init, comme suit :

					switch ($this->product->redirect_type)
					{
						case '301':
							header('HTTP/1.1 301 Moved Permanently');
							header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected));
							exit;
						break;
						case '302':
							header('HTTP/1.1 302 Moved Temporarily');
							header('Cache-Control: no-cache');
							header('Location: '.$this->context->link->getProductLink($this->product->id_product_redirected));
							exit;
						break;
						case '404':
						default:
							header('Status: 301 Moved Permanently');
							header("Location: ".$this->context->$link->getCategoryLink($this->product->id_category_default));
							// header('HTTP/1.1 404 Not Found');
							// header('Status: 404 Not Found');
							// $this->errors[] = Tools::displayError('This product is no longer available.');
						break;
					}

Mais cela ne fonctionne pas :-s (page blanche sur appel de produit...)

À noter que mes produits inactifs ont tous une catégorie par défaut ; du coup je ne comprends pas pourquoi cela ne fonctionne pas...

Au départ j'ai créé un override, et comme ça plantait j'ai même tenté une modif du controller d'origine (shame on me ^_^) mais sans succès.

Impossible à débugger (mes excuses, je suis développement Visual Studio à la base ! Développer en PHP/Smarty c'est revenir 15 ans en arrière pour moi...)

Edited by Cédric Girard (see edit history)
Link to comment
Share on other sites

Bonjour,

en activant les erreurs php, tu pourras avoir un peu plus de renseignement sur les erreurs de code.

 

/config/defines.inc.php

/* Debug only */
if (!defined('_PS_MODE_DEV_'))
define('_PS_MODE_DEV_', false);

remplacer par

/* Debug only */
if (!defined('_PS_MODE_DEV_'))
define('_PS_MODE_DEV_', true);

Ou regarder les logs du serveur.

 

Cordialement

Link to comment
Share on other sites

header("Location: ".$this->context->$link->getCategoryLink($this->product->id_category_default));

Ne marchera jamais à cause du $ en trop au milieu des propriétés.

 

Préférez ceci:

header('Location: '.$this->context->link->getCategoryLink($this->product->id_category_default)); 

Et perso, je laisserai le 302 et le no-cache (si vous réactivez le produit^^)

Link to comment
Share on other sites

une solution plus élégante serait celle-ci:

					switch ($this->product->redirect_type)
					{
						case '301':
							header('HTTP/1.1 301 Moved Permanently');
							header("Location: ".$this->context->link->getCategoryLink($this->product->id_category_default));
							exit;
						break;
						case '302':
							header('HTTP/1.1 302 Moved Temporarily');
							header('Cache-Control: no-cache');
							header("Location: ".$this->context->link->getCategoryLink($this->product->id_category_default));
							exit;
						break;
						case '404':
						default:
							header('HTTP/1.1 404 Not Found');
							header('Status: 404 Not Found');
							$this->errors[] = Tools::displayError('This product is no longer available.');
						break;
					}

Vous redirigez vers n'importe quel produit (il ne sera pas pris en compte) et la redirection se fera automatiquement

Si le produit n'existe pas ou plus, la page 404 sera toujours fonctionnelle (autrement vous aurez une belle erreur car l' id_product n'existera pas)

Link to comment
Share on other sites

Excellent, merci :-)

Pfff pas l'habitude de la syntaxe et j'avoue que le dollar ne m'a pas (du tout) sauté aux yeux, suis dév. VB.Net à la base :-p

Pour le reste, il me semble que la méthode Init() gère différemment les produits réellement en 404 (inexistants) des produits inactifs ; du coup je suis resté sur mon choix initial. Le seul truc est de modifier proprement le code (les conditions) pour autoriser la prévisualisation d'un produit inactif depuis l'admin, car là il est redirigé lol

Edited by Cédric Girard (see edit history)
Link to comment
Share on other sites

  • 1 month later...

UP

Bon, après avoir viré la gestion des langues et réduit le site au seul français (il était à l'origine en français et en anglais), ce hack ne fonctionne plus... Alors qu'il fonctionne sur mon autre boutique sans gestion des langues :-s

J'arrive sur une page affichant :

 

Oops, something went wrong.

 
Try to refresh this page or feel free to contact us if the problem persists. 
 

 

 
Une idée ?

Je sèche :-(

nb : le site fonctionne parfaitement sinon, et les redirections que j'ai ajouté au htaccess pour gérer les modifs à la volée ne sont pas en cause (j'ai testé)
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...