xaxa Posted February 9, 2017 Share Posted February 9, 2017 Bonjour, j'aimerais garder les produits désactivés avec leur fiche visible. j'ai essayé de modifier le ProductController : if (!$this->product->isAssociatedToShop() || !$this->product->active) { remplacé par if (!$this->product->isAssociatedToShop()) { Cela fonctionne lorsque je modifie le code directement dans controllers/front/ProductController.php mais pas dans override/controllers/frontProductController.php Voici mon code override : class ProductController extends ProductControllerCore { /** * Initialize product controller * @see FrontController::init() */ public function init() { parent::init(); if ($id_product = (int)Tools::getValue('id_product')) { $this->product = new Product($id_product, true, $this->context->language->id, $this->context->shop->id); } if (!Validate::isLoadedObject($this->product)) { header('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); $this->errors[] = Tools::displayError('Product not found'); } else { $this->canonicalRedirection(); /* * If the product is associated to the shop * and is active or not active but preview mode (need token + file_exists) * allow showing the product * In all the others cases => 404 "Product is no longer available" */ if (!$this->product->isAssociatedToShop()) { if (Tools::getValue('adtoken') == Tools::getAdminToken('AdminProducts'.(int)Tab::getIdFromClassName('AdminProducts').(int)Tools::getValue('id_employee')) && $this->product->isAssociatedToShop()) { // If the product is not active, it's the admin preview mode $this->context->smarty->assign('adminActionDisplay', true); } else { $this->context->smarty->assign('adminActionDisplay', false); if (!$this->product->id_product_redirected || $this->product->id_product_redirected == $this->product->id) { $this->product->redirect_type = '404'; } 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('HTTP/1.1 404 Not Found'); header('Status: 404 Not Found'); $this->errors[] = Tools::displayError('This product is no longer available.'); break; } } } elseif (!$this->product->checkAccess(isset($this->context->customer->id) && $this->context->customer->id ? (int)$this->context->customer->id : 0)) { header('HTTP/1.1 403 Forbidden'); header('Status: 403 Forbidden'); $this->errors[] = Tools::displayError('You do not have access to this product.'); } else { // Load category $id_category = false; if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == Tools::secureReferrer($_SERVER['HTTP_REFERER']) // Assure us the previous page was one of the shop && preg_match('~^.*(?<!\/content)\/([0-9]+)\-(.*[^\.])|(.*)id_(category|product)=([0-9]+)(.*)$~', $_SERVER['HTTP_REFERER'], $regs)) { // If the previous page was a category and is a parent category of the product use this category as parent category $id_object = false; if (isset($regs[1]) && is_numeric($regs[1])) { $id_object = (int)$regs[1]; } elseif (isset($regs[5]) && is_numeric($regs[5])) { $id_object = (int)$regs[5]; } if ($id_object) { $referers = array($_SERVER['HTTP_REFERER'],urldecode($_SERVER['HTTP_REFERER'])); if (in_array($this->context->link->getCategoryLink($id_object), $referers)) { $id_category = (int)$id_object; } elseif (isset($this->context->cookie->last_visited_category) && (int)$this->context->cookie->last_visited_category && in_array($this->context->link->getProductLink($id_object), $referers)) { $id_category = (int)$this->context->cookie->last_visited_category; } } } if (!$id_category || !Category::inShopStatic($id_category, $this->context->shop) || !Product::idIsOnCategoryId((int)$this->product->id, array('0' => array('id_category' => $id_category)))) { $id_category = (int)$this->product->id_category_default; } $this->category = new Category((int)$id_category, (int)$this->context->cookie->id_lang); if (isset($this->context->cookie) && isset($this->category->id_category) && !(Module::isInstalled('blockcategories') && Module::isEnabled('blockcategories'))) { $this->context->cookie->last_visited_category = (int)$this->category->id_category; } } } } } Merci par avance pour votre aide! Link to comment Share on other sites More sharing options...
Eolia Posted February 9, 2017 Share Posted February 9, 2017 Lol Il suffit de le mettre en "Non disponible à la vente"... Pourquoi ré-inventer la roue ? 1 Link to comment Share on other sites More sharing options...
coeos.pro Posted February 9, 2017 Share Posted February 9, 2017 avez vous supprimé le fichier cache/class_index.php ? Link to comment Share on other sites More sharing options...
xaxa Posted February 9, 2017 Author Share Posted February 9, 2017 avez vous supprimé le fichier cache/class_index.php ? Oui en fait le problème venait de parent::init(); à remplacer par FrontController::init(); Mais bon, il y a toujours un problème de récupération des title, méta description, etc. Merci Lol Il suffit de le mettre en "Non disponible à la vente"... Pourquoi ré-inventer la roue ? Oui je vais adopter en effet cette solution! Merci 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