it-swarm-es.com

¿Es posible tomar una variable de un componente dentro de otro componente?

Estoy seguro de que el título suena un poco complejo o cojo. Estoy tratando de desarrollar un componente que mantenga el recuento de usuarios que agregaron un producto en el carrito pero no terminaron con un pago (canceló el pedido antes de pagar).

Creé una nueva tabla en la base de datos y en el controlador de virtuemart agregué este código: 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 cuando un usuario registrado y registrado agregará un producto en su carrito, mantengo su información en mi base de datos. Si él paga, lo elimino. Esto está funcionando bien. El problema es cuando un usuario agrega por primera vez un producto al carrito e inicia sesión después. Entonces, lo que estoy tratando de hacer es: cuando un usuario agrega un producto en un carrito, mantenga una variable de marca global. Después de eso edite el com_users/controllers/user.php login () funciona de modo que cuando alguien intenta iniciar sesión verifique si la marca está activada (alguien agregó un producto en el carrito) y, de ser así, agréguelo a la base de datos justo después de iniciar sesión.

Algo como eso :

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

Aunque intento acceder a una variable configurada desde com_virtuemart dentro de com_users. El var_dumps utilicé devuelve NULL. Es posible ? Y si es así, ¿cómo lo logramos?

3
IseNgaRt

Más allá del hecho de que su variable "global" está cambiando ($GLOBALS['yoyo'] no es lo mismo que $GLOBAL['yoyoyo']), todas las variables excepto la sesión (que también parece estar usando) no persistirán entre las cargas de la página.

Entonces tiene razón al tratar de usar la sesión. Sin embargo, la sesión se restablecerá hasta cierto punto después de que el usuario inicie sesión. Es probable que deba agregar algún código antes de iniciar sesión para verificar si el valor existe y almacenarlo en otra variable, y luego, después de iniciar sesión, verifique esa variable para actualizar realmente db.

Otra solución, que creo que sería más simple, es no guardar los datos en su extremo y simplemente escribir un complemento de usuario que verifique onUserLogin. Dentro de esa función, si el usuario ha iniciado sesión correctamente, verifique si su carrito tiene algún artículo. Si es así, agréguelos a su base de datos.

Referencias para ti:

Crear un complemento: https://docs.joomla.org/Creating_a_Plugin_for_Joomla

¿Hay artículos en el carrito: https://stackoverflow.com/questions/13929564/how-to-get-all-products-in-cart-in-virtuemart

3
David Fritsch