web-dev-qa-db-fra.com

Est-il possible d'extraire une variable d'un composant dans un autre composant?

Je suis sûr que le titre sonne un peu complexe ou boiteux. Je suis en train d'essayer de développer un composant qui conservera le nombre d'utilisateurs ayant ajouté un produit dans le panier mais ne s'est pas terminé avec une commande (annulé la commande avant de payer).

J'ai créé une nouvelle table dans la base de données et dans le contrôleur de virtuemart, j'ai ajouté le code suivant: components/com_virtuemart/controllers/cart.php

function add() {
        $tmp = JFactory::getUser();
        $db= JFactory::getDbo();
        $ready = $db->getQuery(true);
        $query= "INSERT INTO #__nobuyers (id,name,email) VALUES ( '". $tmp->id ."','". $tmp->username ."','". $tmp->email ."') ";
        $db->setQuery($query);
        $db->execute();   
        /*
        $session =& JFactory::getSession();
        $session->set( 'cartcheck', 'cartisnotempybro' );
        $GLOBALS['yoyo']=notempty;
        */





public function confirm() {
        $tmp = JFactory::getUser();
        $db= JFactory::getDbo();
        $ready = $db->getQuery(true);
        $query= "DELETE FROM #__nobuyers where ID=". $tmp->id;
        $db->setQuery($query);
        $db->execute();  

SO quand un inscrit et connecté utilisateur ajoutera un produit dans son panier je garde ses informations à mon db. S'il part, je le retire. Cela fonctionne bien. Le problème vient du moment où un utilisateur ajoute un produit au panier et se connecte ensuite. Donc, ce que j'essaie de faire, c'est: lorsqu'un utilisateur ajoute un produit dans un panier, conservez une variable d'indicateur global. Après cela, éditez le com_users/controllers/user.php _ login () fonctionne donc lorsque quelqu'un essaie de se connecter, vérifie si l'indicateur est activé (quelqu'un a ajouté un produit dans le panier) et, le cas échéant, l'ajoute à la base de données juste après la connexion.

Quelque chose comme ca :

$session = JFactory::getSession();
$seccode=$session->get('cartcheck');
if ($seccode) {
or
if (!empty($GLOBAL['yoyoyo'])) { //do stuff

Bien que j'essaie d'accéder à une variable définie à partir de com_virtuemart à l'intérieur de com_users.The var_dumps j’ai utilisé renvoie NULL. C'est possible ? Et si oui, comment y parvenons-nous?

3
IseNgaRt

Au-delà du fait que votre variable "globale" est en train de changer ($GLOBALS['yoyo'] n'est pas du tout la même chose que $GLOBAL['yoyoyo']), toutes les variables sauf la session (que vous semblez également utiliser) ne persisteront pas entre les chargements de page.

Donc, vous avez raison d'essayer d'utiliser la session. Cependant, la session sera réinitialisée à un certain degré après la connexion de l'utilisateur. Vous devrez probablement ajouter du code avant la connexion pour vérifier si la valeur existe et la stocker dans une autre variable, puis après cette connexion, vérifiez cette variable pour mettre à jour réellement le fichier. db.

Une autre solution, que je pense plus simple, consiste à ne pas enregistrer les données de votre côté et à écrire un plug-in utilisateur vérifiant onUserLogin. Dans cette fonction, si l'utilisateur s'est connecté avec succès, vérifiez si son panier contient des éléments. Si oui, ajoutez-les à votre base de données.

Références pour vous:

Création d'un plugin: https://docs.joomla.org/Creating_a_Plugin_for_Joomla

Y at-il des articles dans le panier: https://stackoverflow.com/questions/13929564/how-to-get-all-products-in-cart-in-virtuemart

3
David Fritsch