Jump to content

Redirection catégorie vers produit selon condition


Recommended Posts

Bonjour,

Je souhaite réaliser un petit script de manière propre donc en ajoutant une surcharge upgrade self pour :

Rediriger une catégorie vers une produit si il n'y a qu'un produit dans la catégorie. 

Le souci n'est pas de réaliser le script mais surtout de savoir quelle partie surcharger. A quel endroit exactement et généré la page catégorie.

J'ai essayé de vérifier dans le controller lié au catégorie mais je n'ai rien vu de probant.

 

Quelqu'un peut-il m'aiguiller. Merci

Link to comment
Share on other sites

Bonjour,

 

Si cela peux aider un jour quelqu'un - Valide Prestashop 1.7.6 ( à ce jour)

 

Pour faire ça de façon propre.

Dossier override > controllers > front > listing

Créez un fichier CategoryController.php

 

Attention à ne pas réaliser la modification directement sur le fichier controllers>front>listing>... En cas de mise à jour du core de prestashop il y a de forte chance que cette modification soit écrasée.

<?php
/**
 * 2020 PIXEL ONLINE
 *
 *  @author    PIXEL ONLINE <[email protected]
 *  @copyright 2020 Anthony PARIS
 *  @license   One Domain Licence
 *  @version   Release:0.9
 *
 */
class CategoryController extends CategoryControllerCore
{
    /**
     * Initializes controller.
     *REDIRECTION GAMME PRODUIT SI UN SEUL PRODUIT ACTIF
     * @see FrontController::init()
     *
     * @throws PrestaShopException
     */
    public function init()
    {
        $id_category = (int) Tools::getValue('id_category');
        $this->category = new Category(
            $id_category,
            $this->context->language->id
        );

        if (!Validate::isLoadedObject($this->category) || !$this->category->active) {
            Tools::redirect('index.php?controller=404');
        }

        parent::init();

        if (!$this->category->checkAccess($this->context->customer->id)) {
            header('HTTP/1.1 403 Forbidden');
            header('Status: 403 Forbidden');
            $this->errors[] = $this->trans('You do not have access to this category.', array(), 'Shop.Notifications.Error');
            $this->setTemplate('errors/forbidden');

            return;
        }

		/**AJOUT CUSTOM PIXEL**/
        $active_product = [];
        $products = $this->category->getProducts($this->context->language->id, 0, 10000);
        foreach($products as $produit_cat){
            if($produit_cat['active']==1)
                $active_product[] = $produit_cat;
        }
        if(count($active_product) == 1) {
            $id_produit = $active_product[0]['id_product'];
            Tools::redirect($this->context->link->getProductLink($id_produit));
            }

        $categoryVar = $this->getTemplateVarCategory();



        $filteredCategory = Hook::exec(
            'filterCategoryContent',
            array('object' => $categoryVar),
            $id_module = null,
            $array_return = false,
            $check_exceptions = true,
            $use_push = false,
            $id_shop = null,
            $chain = true
        );
        if (!empty($filteredCategory['object'])) {
            $categoryVar = $filteredCategory['object'];
        }



        $this->context->smarty->assign(array(
            'category' => $categoryVar,
            'subcategories' => $this->getTemplateVarSubCategories(),
        ));
    }

}

 

Edited by kyride59 (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

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...