Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Joomla »

[Howto] Productos relacionados en cart Virtuemart 2 y Joomla 2.5

Estas en el tema de [Howto] Productos relacionados en cart Virtuemart 2 y Joomla 2.5 en el foro de Joomla en Foros del Web. Hola! este es mi primer aporte a la comunidad. Hace un tiempo, un cliente me pidio que hiciera un sistema donde se mostraran los productos ...
  #1 (permalink)  
Antiguo 28/07/2012, 06:27
Avatar de disenoexpress  
Fecha de Ingreso: julio-2012
Mensajes: 19
Antigüedad: 11 años, 8 meses
Puntos: 0
De acuerdo [Howto] Productos relacionados en cart Virtuemart 2 y Joomla 2.5

Hola! este es mi primer aporte a la comunidad. Hace un tiempo, un cliente me pidio que hiciera un sistema donde se mostraran los productos relacionados en la página Carro de Virtuemart 2. Tuve que afinar el lapiz y mi notepad, puesto que no encontre nada (gratuito) que hiciera exactamente lo que se necesitaba. Entonces decidí montarme todo yo mismo. ¿De que manera? Asi:
  1. Localizamos el archivo "default_pricelist.php" en la ubicacion (miJoomla)/components/com_virtuemart/views/cart/tmpl/
  2. Lo abrimos usando un editor de texto decente (notepad++ o similar) o Dreamweaver
  3. Buscamos la Línea 130 Donde pone:
    Código PHP:
    foreach( $this->cart->products as $pkey =>$prow ) { 
  4. Le agregamos DIRECTAMENTE DESPUES:
    Código PHP:
            $miprod $this->cart->products;
            
    $id_producto $prow->virtuemart_product_price_id
    Si usamos la logica, las variables $miprod y $id_producto se irán cambiando cada vez que se ejecute el foreach, de modo que siempre tendremos la información del ultimo producto del carro.
  5. Vamos al final del documento. Agregaremos:
    Código PHP:
    <?php
    echo "<br>";
    if (!
    is_null($id_producto)) {
        
    $db JFactory::getDBO();
        
    $jAp JFactory::getApplication();
        
    define('L'chr(10));
        
    $q "SELECT custom_value FROM #__virtuemart_product_customfields WHERE virtuemart_product_id =".$id_producto." LIMIT 4;";
        
    $db->setQuery($q);
        
    $db->query();
        if (
    is_null($posts=$db->loadRowList())) {$jAp->enqueueMessage(nl2br($db->getErrorMsg()),'error'); return;}
        
    $rel_prods $db->loadResultArray();
        }


    if (!
    is_null($rel_prods)) {
        
    ?>
        <div class="dex-rel_prod">
        <h3> Productos Relacionados </h3>
        
        <?php
            
    for( $i 1$i count($rel_prods); $i ++)
            {
            
    ?>
            <div class="product-field product-field-type-R">
            <?php
            
    //robando la imagen del producto
            
    $q "SELECT virtuemart_media_id FROM #__virtuemart_product_medias WHERE virtuemart_product_id=".$rel_prods[$i].";";
            
    $db->setQuery($q);
            
    $resultad_img $db->loadResult();
            
    $q "SELECT file_url_thumb FROM #__virtuemart_medias WHERE virtuemart_media_id=".$resultad_img.";";
            
    $db->setQuery($q);
            
    $resul_img $db->loadResult();
            
            
    //vamos a por la categoria
            
    $q "SELECT virtuemart_category_id FROM #__virtuemart_product_categories WHERE virtuemart_media_id=".$rel_prods[$i]." LIMIT 1;";
            
    $db->setQuery($q);
            
    $resul_cat $db->loadResult();
            
    //Vamos por el titulo
            //definimos lenguaje y creamos sufijo
            
    $lang =& JFactory::getLanguage();
            
    $suf $lang->getTag();
            
    $suf strtolower($suf);
            
    $suf str_replace('-','_',$suf);
            
    //vamos a la tabla de virtuemart en cuestion
            
    $q "SELECT product_name FROM #__virtuemart_products_".$suf." WHERE virtuemart_product_id=".$rel_prods[$i].";";
            
    $db->setQuery($q);
            
    $resul_tit $db->loadResult();
            
    //url
            
    $resul_url "index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=".$rel_prods[$i];
            
    //armando todo
            
    ?>
            <a href="<?php echo $resul_url?>"> <img src="<?php echo $resul_img?>"/></a><br/>
            <a href="<?php echo $resul_url?>"> <?php echo $resul_tit?> </a>
        </div>
        <?php ?>
        </div>
    <?php
    }
    else{
    echo 
    "no se encontraron productos relacionados";
    };

    ?>
  6. Y... Lísto!! Se mostrarán cuatro productos relacionados al último producto agregado al carrito. Si necesitais otra cantidad de productos , simplemente cambiad el número "LIMIT" de esta variable:
    Código PHP:
    $q "SELECT custom_value FROM #__virtuemart_product_customfields WHERE virtuemart_product_id =".$id_producto." LIMIT 4;"
    . Si necesitais, por ejemplo, que muestre 6 productos, colocan:
    Código PHP:
    $q "SELECT custom_value FROM #__virtuemart_product_customfields WHERE virtuemart_product_id =".$id_producto." LIMIT 6;"
  7. Luego, claro, le dan algún estilo a los divs creados usando CSS.
Resultado Final (Con retoques CSS. No os riais de mis colores, la web es de una floreria):


Bueno, eso es todo por hoy y espero que les haya gustado
Chau!
  #2 (permalink)  
Antiguo 28/07/2012, 06:30
Avatar de disenoexpress  
Fecha de Ingreso: julio-2012
Mensajes: 19
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: [Howto] Productos relacionados en cart Virtuemart 2 y Joomla 2.5

Nota: Me agradaría, ya que soy un poco novato, que los que saben de verdad programar, me critiquéis bastante el código, señalen posibles errores, o formas de optimizar y/o facilitar el código. Saludos!!
  #3 (permalink)  
Antiguo 28/07/2012, 07:04
vtj
 
Fecha de Ingreso: febrero-2011
Mensajes: 613
Antigüedad: 13 años, 2 meses
Puntos: 40
Respuesta: [Howto] Productos relacionados en cart Virtuemart 2 y Joomla 2.5

Ciao

Gracias por el "regalo"

Etiquetas: cart, php, productos, relacionados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:58.