Jump to content

Produits associés et leur id de catégorie pour créer une condition


Recommended Posts

Bonjour,

Le thème Panda ne semblant pas prévoir un endroit pour afficher les produits associés sur la fiche produit, j'ai récupéré le code du thème Classic et l'ai collé là où il faut.
Mais j'aimerais un peu corser le tout. D'un côté, il y aurait des produits associés par tag (module prévu dans le thème). Mais comme je prévois de proposer des emballages cadeaux, j'aimerais n'afficher le bloc des produits associés seulement si leur catégorie est la catégorie "Emballage cadeau".

J'aurais donc besoin d'un petit coup de pouce pour récupérer cet id et créer une condition dessus. Ensuite, je pourrai afficher ce bloc également sur la popup panier, dans le panier. J'ai bien le module Gift wrapping permettant de choisir parmi plusieurs emballages cadeaux, mais il ne s'affiche que dans la page commande. J'aimerais que la proposition soit faite au client dès la fiche produit.

J'ai regardé dans le ProductController, mais je ne vois rien dans $accessories qui me permette de récupérer cette donnée. Et je ne sais pas où est la function permettant de créer cette variable.

Je suis sur PS 1.7.8.

 

Un tout grand merci d'avance pour vos lumières très instructives !

Link to comment
Share on other sites

Bonjour,

pour trouver une solution, j'ai "discuté" toute la nuit avec ChatGPT 🙂 Il m'a fait créer un module mais,  à part que l'installation de ce module s'est faite sans souci, le résultat attendu n'est pas là.
Donc je souhaite créer une variable contenant l'id de la catégorie par défaut des produits associés sur une page produit, afin de pouvoir ensuite créer une condition qui me permettra d'afficher un bloc si cette variable = 163, ou un autre pour les autres, dans le tpl affichant les produits associés.

1. Faut-il overrider la class Product.php vu que c'est là que semble être "construit" le produit accessoire ?

2. Faut-il overrider le controller ProductController.php ?

3. Peut-on éviter tout ça en créant un module qui permettra de désactiver la variable quand il sera désinstallé ?

4. Les 3 mon capitaine ?

Donc pour commencer j'ai créé un module dans lequel j'ai mis ces fonctions :

<?php



class AssociatedProductCategory extends Module
{
    public function __construct()
    {
        $this->name = 'associatedproductcategory';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'Camille';
        $this->need_instance = 0;

        parent::__construct();

        $this->displayName = $this->l('Associated Product Category');
        $this->description = $this->l('Module to retrieve associated product category ID.');

        $this->ps_versions_compliancy = array('min' => '1.7', 'max' => _PS_VERSION_);
    }

    public function install()
    {
        return parent::install() && $this->registerHook('actionProductUpdate');
        return parent::install() && $this->registerHook('displayProductFooter');
    }

    public function uninstall()
    {
        return parent::uninstall();
    }




    public function hookDisplayFooterProduct($params)
    {
       
        $productId = (int) $params['product']['id_product'];
        $defaultCategoryId = $this->getAccessoriesCategoryIds($productId);

        
        $this->context->smarty->assign('defaultCategoryId', $defaultCategoryId);
    }
    
	 private function getAccessoriesCategoryIds($productId)
    {
        return Db::getInstance()->executeS(            '
            SELECT DISTINCT pc.`id_category_default`
            FROM `' . _DB_PREFIX_ . 'accessory` pa
            LEFT JOIN `' . _DB_PREFIX_ . 'product` pc ON pc.`id_product` = pa.`id_product_2`
            WHERE pa.`id_product_1` = '.(int) $productId
        );
       
    }
}

La requête sql fonctionne, je l'ai testée avec un id de produit et il m'a bien affiché le résultat : 163.

Dans le tpl concerné, j'ai ajouté une condition {if $defaultCategoryId == '163'}mon_contenu{else}autre contenu{/if}

Je n'ai pas d'erreur en front. Mais la condition ne fonctionne pas. J'ai même mis juste {$defaultCategoryId} dans une div pour voir si cela affichait bien 163, mais nada.

Si quelqu'un avait la bonté d'âme d'y jeter un oeil et de me donner des pistes, j'en serais ravie !

 

Merci d'avance

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