ambreramos Posted July 24 Share Posted July 24 Je travaille actuellement avec Prestashop 1.7.8.7. Actuellement, j'ai dans mon catalogue de produits des produits inactifs, et lorsque je tente d'accéder à la page de l'un de ces produits, je suis naturellement redirigée vers une erreur 404. Je sais que dans l'admin de PrestaShop, je peux, pour chaque produit, choisir manuellement le type de redirection et la page cible, mais j'aimerais automatiser cela pour ne pas avoir à le faire manuellement pour chacun de mes produits. Le résultat final attendu est le suivant : tous mes produits inactifs doivent être redirigés vers leur catégorie parent. Jusqu'ici, j'ai tenté de créer un module, de créer un fichier override, et de créer un script PHP pour générer les redirections dans mon fichier .htaccess, mais aucune de ces trois solutions n'a fonctionné. Peux-tu m'éclairer sur la manière de réaliser ces modifications et/ou me proposer des solutions alternatives afin d'automatiser la redirection de mes produits inactifs vers leur catégorie parent ? Link to comment Share on other sites More sharing options...
Mediacom87 Posted July 24 Share Posted July 24 il y a une heure, ambreramos a dit : Je travaille actuellement avec Prestashop 1.7.8.7. Actuellement, j'ai dans mon catalogue de produits des produits inactifs, et lorsque je tente d'accéder à la page de l'un de ces produits, je suis naturellement redirigée vers une erreur 404. Je sais que dans l'admin de PrestaShop, je peux, pour chaque produit, choisir manuellement le type de redirection et la page cible, mais j'aimerais automatiser cela pour ne pas avoir à le faire manuellement pour chacun de mes produits. Le résultat final attendu est le suivant : tous mes produits inactifs doivent être redirigés vers leur catégorie parent. Jusqu'ici, j'ai tenté de créer un module, de créer un fichier override, et de créer un script PHP pour générer les redirections dans mon fichier .htaccess, mais aucune de ces trois solutions n'a fonctionné. Peux-tu m'éclairer sur la manière de réaliser ces modifications et/ou me proposer des solutions alternatives afin d'automatiser la redirection de mes produits inactifs vers leur catégorie parent ? Bonjour, à mon avis, une simplement modification dans la table de la base de données des produits suffit à faire cela, mais attention, certainement que pour tout nouveau produit, il faudra le refaire. Peut-être faire un script qui passe tous les jours au cas où pour adapter ce point sur chaque produit si ce n'est pas la bonne redirection. Link to comment Share on other sites More sharing options...
ambreramos Posted July 24 Author Share Posted July 24 55 minutes ago, Mediacom87 said: Bonjour, à mon avis, une simplement modification dans la table de la base de données des produits suffit à faire cela, mais attention, certainement que pour tout nouveau produit, il faudra le refaire. Peut-être faire un script qui passe tous les jours au cas où pour adapter ce point sur chaque produit si ce n'est pas la bonne redirection. Je pense que cette automatisation est possible sans passer directement par la base de données de PrestaShop, je ne suis pas sûre qu'y toucher soit une très bonne pratique surtout si cela doit être réalisé pour tout nouveau produit... J'aimerais que cette solution puisse être définitive et dynamique, pour s'adapter à mes produits déjà inactifs et ceux qui le seront dans le futur. Que penses-tu de ce que j'ai essayé jusqu'ici ? Pour l'histoire du script, j'ai essayé un script PHP (https://we.tl/t-Yxxrzt3rRA) qui injecte dans mon .htaccess une redirection 301 vers la catégorie parent lorsque le produit est inactif. Celui-ci injecte bien des redirections, mais seulement sur les produits inactifs qui ont déjà été redirigés manuellement via l'admin de Prestashop. Mais je peine à comprendre pourquoi celui-ci ne prend pas en compte les autres produits inactifs... Quoi qu'il en soit, je pense que la bonne pratique serait de mettre en place un module (test module : https://we.tl/t-8khdTF9Hpd) ou un override (test override : https://we.tl/t-JzpjwDP5OU), de manière à ce que cette solution soit vraiment automatique et non nécessiteuse d'action de ma part. Si tu vois quelque chose qui t'interpelle, n'hésite pas à m'expliquer Link to comment Share on other sites More sharing options...
Mediacom87 Posted July 24 Share Posted July 24 Il y a 2 heures, ambreramos a dit : Je pense que cette automatisation est possible sans passer directement par la base de données de PrestaShop, je ne suis pas sûre qu'y toucher soit une très bonne pratique surtout si cela doit être réalisé pour tout nouveau produit... J'aimerais que cette solution puisse être définitive et dynamique, pour s'adapter à mes produits déjà inactifs et ceux qui le seront dans le futur. Que penses-tu de ce que j'ai essayé jusqu'ici ? Pour l'histoire du script, j'ai essayé un script PHP (https://we.tl/t-Yxxrzt3rRA) qui injecte dans mon .htaccess une redirection 301 vers la catégorie parent lorsque le produit est inactif. Celui-ci injecte bien des redirections, mais seulement sur les produits inactifs qui ont déjà été redirigés manuellement via l'admin de Prestashop. Mais je peine à comprendre pourquoi celui-ci ne prend pas en compte les autres produits inactifs... Quoi qu'il en soit, je pense que la bonne pratique serait de mettre en place un module (test module : https://we.tl/t-8khdTF9Hpd) ou un override (test override : https://we.tl/t-JzpjwDP5OU), de manière à ce que cette solution soit vraiment automatique et non nécessiteuse d'action de ma part. Si tu vois quelque chose qui t'interpelle, n'hésite pas à m'expliquer Pour information, je ne sais pas ce que vous essayez de nous envoyer avec WeTransfer, mais il n'y a aucune chance que je télécharge des données totalement inconnues venant d'un inconnu. Si vous voulez passer du code, vous pouvez le faire dans le post, si c'est une image, vous pouvez aussi le faire. Link to comment Share on other sites More sharing options...
ambreramos Posted July 24 Author Share Posted July 24 3 minutes ago, Mediacom87 said: Pour information, je ne sais pas ce que vous essayez de nous envoyer avec WeTransfer, mais il n'y a aucune chance que je télécharge des données totalement inconnues venant d'un inconnu. Si vous voulez passer du code, vous pouvez le faire dans le post, si c'est une image, vous pouvez aussi le faire. Désolée, c'est la première fois que je passe par un forum pour demander de l'aide. Je garde ça en mémoire à l'avenir, et voilà le code que j'ai pu réaliser jusqu'ici 😅 Voici mon script PHP (generate_redirections.php) : <?php // Connexion à la base de données PrestaShop require_once('config/config.inc.php'); require_once('init.php'); // Obtenir les produits désactivés $products = Db::getInstance()->executeS(' SELECT id_product, id_category_default FROM '._DB_PREFIX_.'product WHERE active = 0 '); // Ouvrir le fichier .htaccess pour écrire les redirections $htaccessFile = fopen(_PS_ROOT_DIR_.'/.htaccess', 'a'); foreach ($products as $product) { $productLink = '/product.php?id_product=' . $product['id_product']; $categoryLink = (new Category($product['id_category_default']))->getLink(); fwrite($htaccessFile, "Redirect 301 $productLink $categoryLink\n"); } fclose($htaccessFile); echo 'Règles de redirection mises à jour.'; ?> Voici les fichiers du module : 1) ps_inactive_product_redirect.php <?php if (!defined('_PS_VERSION_')) { exit; } class Ps_Inactive_Product_Redirect extends Module { public function __construct() { $this->name = 'ps_inactive_product_redirect'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->author = 'Your Name'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Inactive Product Redirect'); $this->description = $this->l('Redirect inactive products to their parent category.'); } public function install() { return parent::install() && $this->registerHook('actionDispatcher'); } public function uninstall() { return parent::uninstall(); } } 2) ProductController.php <?php class ProductController extends ProductControllerCore { public function init() { parent::init(); // Get the product ID from the request $id_product = (int)Tools::getValue('id_product'); if ($id_product) { // Load the product $product = new Product($id_product, true, $this->context->language->id); // Check if the product is inactive if (!$product->active) { // Get the product's parent category ID $id_category = $product->id_category_default; // Get the link to the category $category = new Category($id_category, $this->context->language->id); $categoryLink = $this->context->link->getCategoryLink($category); // Redirect to the category Tools::redirect($categoryLink); } } } } Pour information, voici la structure de mon module : ps_inactive_product_redirect - ps_inactive_product_redirect.php - override -- controllers --- front ---- ProductController.php J'avais également précisé que j'avais tenté d'utiliser un override, placé dans le dossier override à la racine de mon site ; il s'agit du même fichier ProductController.php que j'ai laissé plus haut. Encore une fois, si quoi que ce soit t'interpelle, n'hésite pas à m'expliquer Link to comment Share on other sites More sharing options...
Mediacom87 Posted July 24 Share Posted July 24 Il y a 2 heures, ambreramos a dit : Voici mon script PHP (generate_redirections.php) : Cool un script non sécurisé que tout le monde peut utiliser 😉 Code qui va accumuler toutes les redirections à chaque appel, un htaccess de 60 Go au bout d'une semaine. Il faut éviter à tout pris ce type de fichier et toujours, strictement toujours, passer par un module et un controller sécurisé. Je suis sur le développement d'un module pour répondre à votre besoin, car cela peut aussi intéresser d'autres utilisateurs. Link to comment Share on other sites More sharing options...
ambreramos Posted July 25 Author Share Posted July 25 13 hours ago, Mediacom87 said: Cool un script non sécurisé que tout le monde peut utiliser 😉 Code qui va accumuler toutes les redirections à chaque appel, un htaccess de 60 Go au bout d'une semaine. Il faut éviter à tout pris ce type de fichier et toujours, strictement toujours, passer par un module et un controller sécurisé. Je suis sur le développement d'un module pour répondre à votre besoin, car cela peut aussi intéresser d'autres utilisateurs. Comme je l'ai précisé, il s'agit d'un test. Comment suis-je supposée avoir des recommandations si je ne montre pas le code ? Ceci dit, j'ai trouvé une solution à mon problème avec le module Mass modifier le produit v2.0.18 - par SeoSa. J'ai filtré mes produits pour sélectionner les produits inactifs et j'ai pu agir sur le lien de redirection en sélectionnant Redirection 301 vers une catégorie ; lorsqu'on ne lui précise pas de catégorie, le produit est redirigé sur sa catégorie parent. 😁 Link to comment Share on other sites More sharing options...
Mediacom87 Posted July 25 Share Posted July 25 il y a une heure, ambreramos a dit : Comme je l'ai précisé, il s'agit d'un test. Comment suis-je supposée avoir des recommandations si je ne montre pas le code ? Ceci dit, j'ai trouvé une solution à mon problème avec le module Mass modifier le produit v2.0.18 - par SeoSa. J'ai filtré mes produits pour sélectionner les produits inactifs et j'ai pu agir sur le lien de redirection en sélectionnant Redirection 301 vers une catégorie ; lorsqu'on ne lui précise pas de catégorie, le produit est redirigé sur sa catégorie parent. 😁 Ok, donc aucune différence avec le fait d'appliquer une requête SQL pour modifier les produit, cela ne se fait toujours pas automatiquement comme demandé au début. Je vais finaliser mon module qui lui permet de programmer cela pour tous les nouveaux produits sans intervention. Link to comment Share on other sites More sharing options...
ambreramos Posted July 25 Author Share Posted July 25 3 minutes ago, Mediacom87 said: Ok, donc aucune différence avec le fait d'appliquer une requête SQL pour modifier les produit, cela ne se fait toujours pas automatiquement comme demandé au début. Je vais finaliser mon module qui lui permet de programmer cela pour tous les nouveaux produits sans intervention. C'est aussi pour ça que j'ai précisé dans mon premier message que la vraie bonne pratique serait un module ou un override. En attendant, j'ai trouvé la solution à mon problème ; dans des cas qui nécessitent une vraie automatisation, effectivement, mettre en place un module serait une solution bien plus adaptée Link to comment Share on other sites More sharing options...
Mediacom87 Posted July 25 Share Posted July 25 Salut, Voilà, module terminé : Link to comment Share on other sites More sharing options...
ambreramos Posted August 1 Author Share Posted August 1 On 7/25/2024 at 6:05 PM, Mediacom87 said: Salut, Voilà, module terminé : Salut, Merci de ta réponse, pour ceux qui feront le choix d'acheter un module, c'est effectivement d'une grande aide. Mais bon, si j'ai pris la peine d'écrire dans le forum PrestaShop, c'est surtout car j'étais en recherche de solutions pour mettre cela en place gratuitement 😁 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