Cédric Girard Posted March 28, 2015 Share Posted March 28, 2015 (edited) BonjourDe "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 March 28, 2015 by Cédric Girard (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted March 28, 2015 Share Posted March 28, 2015 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 More sharing options...
Cédric Girard Posted March 28, 2015 Author Share Posted March 28, 2015 OK merci, c'est un début ;-) C'est quand même incroyable qu'on ne puisse pas automatiquement rediriger les produits inactifs vers une page au choix (pas seulement un produit de substitution...) Link to comment Share on other sites More sharing options...
Eolia Posted March 28, 2015 Share Posted March 28, 2015 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 More sharing options...
Eolia Posted March 28, 2015 Share Posted March 28, 2015 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 More sharing options...
Cédric Girard Posted March 29, 2015 Author Share Posted March 29, 2015 (edited) 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 :-pPour 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 March 30, 2015 by Cédric Girard (see edit history) Link to comment Share on other sites More sharing options...
Cédric Girard Posted May 15, 2015 Author Share Posted May 15, 2015 UPBon, 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 :-sJ'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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now