Jump to content
kyride59

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

Share this post


Link to post
Share on other sites

if(count($this->getProducts()) == 1) {

// Analyse de l'array pour récupérer l'id du produit puis

Tools::redirect($this->context->link->getProductLink($id_product));

}

  • Like 1

Share this post


Link to post
Share on other sites

Salut Eolia,

 

Comme expliqué dans mon message, pour le bout de code pas de soucis c'est surtout que je ne vois pas quelle classe / controller modifier en surchargeant.

Share this post


Link to post
Share on other sites

categoryController.php serait une bonne idée^^

  • Like 1

Share this post


Link to post
Share on other sites

C'est bien entendu le premier que j'ai regardé. Il va falloir que je creuse un peu car le code n'est pas super bien commenté et c'est un mix entre du core prestashop et symfony.

 

Merci du retour en tout cas.

Share this post


Link to post
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 <societe.pixelonline@gmail.com
 *  @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)

Share this post


Link to post
Share on other sites

"En cas de mise à jour du core de prestashop il y a de forte chance que cette modification soit écrasée."=> Effectivement ! Le mieux serait de sauvegarder ses modifications. 

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More