it-swarm.it

È possibile prendere una variabile da un componente all'interno di un altro componente?

Sono sicuro che il titolo suona un po 'complesso o zoppo. Sto cercando di sviluppare un componente che manterrà il conteggio degli utenti che hanno aggiunto un prodotto nel carrello ma non ha terminato con un pagamento (annullato l'ordine prima di pagare).

Ho creato una nuova tabella nel db e nel controller di virtuemart ho aggiunto questo codice: components/com_virtuemart/controllerers/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();  

Quindi, quando un utente registrato e registrato aggiungerà un prodotto nel suo carrello, tengo le sue informazioni sul mio db. Se fa il checkout lo rimuovo. Funziona benissimo. Il problema è quando un utente aggiunge per la prima volta un prodotto al carrello e accede dopo. Quindi quello che sto cercando di fare è: quando un utente aggiunge un prodotto in un carrello, mantieni una variabile flag globale. Successivamente modifica il com_users/controllers/user.php login () funzione quindi quando qualcuno prova ad accedere controlla se il flag è impostato (qualcuno ha aggiunto un prodotto nel carrello) e, in tal caso, aggiungilo nel database subito dopo l'accesso.

Qualcosa del genere :

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

Anche se provo ad accedere a una variabile impostata da com_virtuemart all'interno di com_users.The var_dumps ho usato restituisce NULL. È possibile ? E se sì, come lo realizziamo?

3
IseNgaRt

Oltre al fatto che la tua variabile "globale" sta cambiando ($GLOBALS['yoyo'] non è affatto uguale a $GLOBAL['yoyoyo']), tutte le variabili tranne la sessione (che sembra anche tu stia utilizzando) non persisteranno tra i caricamenti di pagina.

Quindi hai ragione nel provare a usare la sessione. Tuttavia, la sessione verrà reimpostata ad un livello dopo che l'utente accede. Probabilmente dovresti aggiungere del codice prima dell'accesso per verificare se il valore esiste e memorizzarlo in un'altra variabile, quindi dopo l'accesso controlla quella variabile per aggiornare effettivamente il db.

Un'altra soluzione, che penso sarebbe più semplice, è quella di non salvare affatto i dati dalla tua parte e semplicemente scrivere un plugin utente che controlla onUserLogin. All'interno di quella funzione, se l'utente ha effettuato correttamente l'accesso, controlla se il carrello contiene degli articoli. In tal caso, aggiungerli al database.

Referenze per te:

Creazione di un plug-in: https://docs.joomla.org/Creating_a_Plugin_for_Joomla

Ci sono articoli nel carrello: https://stackoverflow.com/questions/13929564/how-to-get-all-products-in-cart-in-virtuemart

3
David Fritsch