Domingo, 18 Noviembre 2018

virtuemart y los Atributos

¡ Compartelo en tus REDES SOCIALES ! y siguenos en TWITTER

7 años 7 meses antes 7 años 7 meses antes por Loyin666.
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #18122
Mi problema es el siguiente:
Quiero crear el atributo talla y color + control de Stock.
Tengo 6 tallas y 6 colores, lo que hace un total de 36 subproductos. Que a la hora de comprar hacen un menu desplegable larguísimo.
¿Hay alguna forma para que en vez de salir en un solo menú todas las combinaciones, se pueda elegir de dos menus?

Ejemplo:
Menú 1 (Seleccionar uno)
  • Pequeña
  • Mediana
  • Grande
Menú 2 (Seleccionar Otro)
  • Blanco
  • Rojo
  • Verde
Actualmente me sale un solo menú:
  1. Pequeña Blanco
  2. Pequeña Rojo
  3. Pequeña Verde
  4. Mediana Blanco
  5. Mediana Rojo
  6. Mediana Verde
  7. Grande Blanco
  8. Grande Rojo
  9. Grande Verde

Gracias por la ayuda de antemano.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes 7 años 7 meses antes por redlo.
Avatar de redlo
redlo
Administrator
Administrator
Mensajes: 6007
Karma: 321
Más
virtuemart y los Atributos #18132
Puedes añadir cuantos atributos quieras por producto> www.solojoomla.com/foro/componentes/mas-...irtuemart.html#13805 . Atributo mas propiedades del atributo, añades cuantos quieras. Cada atributo tiene unas propiedades, Atributo Color, propiedades, verde, rojo, azul. Siguiente Atributo, Talla, Propiedades, L, M, XXL etc...

Desarrollos Web a medida Joomla
La vida es demasiado corta, como para tomarsela en serio

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes 7 años 7 meses antes por Loyin666.
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #18138
El problema de ese sistema es que no se hace los stock independiente.
Si yo tengo por ejempo la talla como atributo, tendré un stock independiende por cada talla.
Si a la talla le añadimos la propiedad color, ya no tendré un stock independiente por cada color. El stock de colores será el que tenga el atributo talla indiferentemente del color.

Yo lo que quiero es que para Talla (mediana) tenga 6 colores (Blanco, verde, rojo ...) y que cada color tenga su stock independiente.

Ejemplo:
  1. Talla mediana - color Verde (5 en stock)
  2. Talla mediana - color Blanco (10 en stock)
  3. Talla mediana - color Rojo (19 en stock)

Aqui explican los atributos con stock

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #18143
Tras 5 días buscado al fin he encontrado la solución. Os pongo el link por si alguien más tiene mi problema (Esta en ingles).

Link de la solución

Estoy testeandolo y por ahora me va bien si encuentro fallos ya los iré comentando.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes
Avatar de redlo
redlo
Administrator
Administrator
Mensajes: 6007
Karma: 321
Más
virtuemart y los Atributos #18149
Para llegar a los archivos hay que pasar a la siguiente pagina (next). Asi da gusto oye, gracias de parte de todos ;)

Loyin666 escribió: Tras 5 días buscado al fin he encontrado la solución. Os pongo el link por si alguien más tiene mi problema (Esta en ingles).

Link de la solución

Estoy testeandolo y por ahora me va bien si encuentro fallos ya los iré comentando.


Desarrollos Web a medida Joomla
La vida es demasiado corta, como para tomarsela en serio

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes 7 años 7 meses antes por Loyin666.
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #18152
/* Hacked Child products to Display each attribute of the 
* main product in a select box. The function gets all distinct
* attribute values. Based the selected Index of the select boxes,
* queries the database, and then displays a price and creates a hidden field
* for the product id.
* 
* October 10th, 2010
* Hacked by Greg S. Tibbetts MBA, MPM greg@aagthosting.com
*/
	
/**
* Lists all child/sister products of the given product
*
* @param int $product_id
* @return string HTML code with Items, attributes & price
*/
function list_attribute_drop( $product_id, $cls_suffix ) {
     global $VM_LANG, $CURRENCY_DISPLAY, $mm_action_url, $sess ;
     require_once (CLASSPATH . 'ps_product.php') ;
     $ps_product = new ps_product( ) ;
     $Itemid = $sess->getShopItemid() ;
     $category_id = vmGet( $_REQUEST, 'category_id', "" ) ;
     $db = new ps_DB( ) ;
     $db_item = new ps_DB( ) ;  
     $additionalOption = $VM_LANG->_( 'PHPSHOP_PLEASE_SEL_ITEM' );
     $defaultValue = 0;
     $count = 0;
     $value = '';
     $selected = '';
     $variable = '';
     $var = '';
     error_reporting(0);
     $tpl = new $GLOBALS['VM_THEMECLASS']( ) ;
     $tpl->set( "cls_suffix", $cls_suffix ) ;
     $tpl->set( "product_id", $product_id ) ;
     // Set Advanced Attributes
     $tpl->set( "advanced_attribute", $this->list_advanced_attribute( $product_id, $db->f( "product_id" ) ) ) ;
     $tpl->set( "custom_attribute", $this->list_custom_attribute( $product_id, $db->f( "product_id" ) ) ) ;
		
     // Get list of the Product attributes for the drop down menus. One attribute per drop down.
     $q = "SELECT distinct a.attribute_name 
          FROM y6z4i_vm_product p, y6z4i_vm_product_attribute_sku a 
          WHERE a.product_id='" . $product_id . "' AND p.product_parent_id = a.product_id
          AND p.product_publish = 'Y' ORDER BY a.attribute_list ASC";
		
     $db->query($q);
		
     if( $db->num_rows() > 0 ){
          $flypage = $ps_product->get_flypage( $product_id ) ;
          $html = "<input type=\"hidden\" name=\"product_id\" value=\"$product_id\">\n" ;
			 
          $rows = $db->num_rows();
          while($db->next_record()) {
               $count++;
               $attribute_name = $db->f( "attribute_name" );
			 
               // get attribute values and product id's if $count = 1  
	       if (($count == 1) || (isset($_GET[$att_name])) && $_GET[$att_name] != $additionalOption){
                    $html .= "<label for='" . $db->f( "attribute_name" ) . "_field'>" . $db->f( "attribute_name" ) . "</label>:\n" ;
                    // get distinct attribute values for an attribute name
                    $q = "SELECT DISTINCT a.attribute_value
			  FROM #__{vm}_product p, #__{vm}_product_attribute a 
		          WHERE p.product_parent_id='" . $product_id . "' AND a.product_id = p.product_id 
			  AND a.attribute_name = '" . $db->f( "attribute_name" ) . "' AND p.product_publish='Y' order by a.attribute_id, a.attribute_value ASC";
					
		$db_sku = new ps_DB( ) ;       
		$db_sku->setQuery( $q ) ;
		$db_sku->query();
					
		if ($db_sku->num_rows() > 0){
		     $resultBuffer = array();
		     $c = 0;
		     while($db_sku->next_record()){
		          $resultBuffer[$c++] = str_replace("&","/",$db_sku->f( "attribute_value" ));
		     }
		     $r = false;
                     if (is_array($resultBuffer)){
                          foreach($resultBuffer as $n=>$v){
                               if (is_array( $resultBuffer[$n] )){
                                    $r = isNumArray( $resultBuffer[$n] );
                                    if ($r==false) 
				         break;
                               } 
			       else
                                    if (!is_numeric($v)){
                                         $r=false;
                                         break;
                                    } 
				    else
                                         $r=true;
                          }
                          if ($r = true){
			       if ($resultBuffer[$c] < $resultBuffer[0]){
			            $i = 0;
				    foreach (asort($resultBuffer, SORT_NUMERIC) as $value)
                                        $resultBuffer[$i++] = $value;
				}
			  }
                    } 
		}
		if (isset($_GET[$attribute_name])){
	             $aname = str_replace("/","&",trim($this->clean($_GET[$attribute_name], 64)));
		     $rows = $db->num_rows();
		     $c = 0;

                     // query db for product id's
		     $q = "SELECT DISTINCT a.product_id 
		           FROM y6z4i_vm_product p, y6z4i_vm_product_attribute a 
                           WHERE p.product_parent_id='".$product_id."' AND a.product_id = p.product_id 
			   AND a.attribute_value LIKE '".$aname."' AND p.product_publish='Y'";
		
		     $db_item->setQuery($q);
		     $db_item->query();
						  
		     // create multidimensional array of
		     // product id's for each attribute value selected
		    if ($db_item->num_rows() > 0){
		         $i = 0;
		         while($db_item->next_record()){
		              $idarray[$count-1][$i++] = $db_item->f( "product_id" );
			      $idarray[$count-1][$i-1];
			}
		}
	}
	if (($count == $rows) && isset($_GET[$attribute_name])){
	// Get a list of product id's for the last attribute select box
	// Get attribute values for the last select box
	     $id = array();
	     for($checked_item = 0; $checked_item < count($idarray[0]); $checked_item++){
                  $occurrence = 1;
                  for($compared_array = 1; $compared_array < count($idarray); $compared_array++){           
                       for($compared_item = 0; $compared_item < count($idarray[$compared_array]); $compared_item++){
                            if($idarray[0][$checked_item] == $idarray[$compared_array][$compared_item]){
                                 $occurrence++;
				 if($occurrence == count($idarray)){
                                     $id[] = $idarray[0][$checked_item];
                                 }
                            }
                       }
                  }
             }
	}
        if ($count == 1)
	     $url = 'http://TUDOMINIO/index.php?option=com_virtuemart&page=shop.product_details&flypage=' . $flypage . '&product_id=' . $product_id; 
	if (isset($_GET[$att_name])){
	     $variable = "&" . $att_name . "=" . $_GET[$att_name];
	     $url .= $variable;
	}
	$att_name = $db->f( "attribute_name" );        
				 
        // Create the select box
	$attributes = "&" . $attribute_name . "='+document.addtocart." . $attribute_name . ".options[document.addtocart." . $attribute_name . ".selectedIndex].value";
	$html .= '<select id="' . $attribute_name . '" name="' . $attribute_name . '" onchange="window.location.href=\'' . $url . $attributes . '">'; 

	// Is there an additional option?
        if (isset($additionalOption)){
            // Yes, but is it the default option?
            if ($defaultValue == $additionalOption)
                // Show the additional option as selected
                $html .= "<option value='" . $additionalOption . "' selected>" . $additionalOption . "</option>\n";
            else
                 // Just show the additional option
                 $html .= "<option value='" . $additionalOption . "'>" . $additionalOption . "</option>\n";
       }
       // check for a selected attribute name
       if (isset($_GET[$attribute_name])){
	    $defaultValue = $_GET[$attribute_name];
            foreach ($resultBuffer as $result)
                   if ($result == $defaultValue)
                         $html .= "<option value='" . $result . "' selected>" . $result . "</option>";
                   else
                         $html .= "<option value='" . $result . "'>" . $result . "</option>";
        }  // end if attribute name
        else { 
           // No defaultValue
           foreach ($resultBuffer as $result)
                 $html .= "<option value='" . $result . "'>" . $result . "</option>\n";
        }
        $html .= "</select><br>\n";
			   
	// Get and display price and hidden field for child product id
	if (isset($id)){
	     if (!empty($id[0])){
		 $html .= '<input type="hidden" name="prod_id[]" value="'.$id[0].'" />';
		 if( $_SESSION['auth']['show_prices'] && _SHOW_PRICES ) {
		     $price = $ps_product->get_adjusted_attribute_price( $id[0] ) ;
		     $price["product_price"] = $GLOBALS['CURRENCY']->convert( $price["product_price"], $price["product_currency"] ) ;
		     if( $_SESSION["auth"]["show_price_including_tax"] == 1 ) {
		          $tax_rate = 1 + $ps_product->get_product_taxrate( $pid ) ;
                          $price['product_price'] *= $tax_rate ;
		     }
		     $html .= '<p>Price: <strong>' . $CURRENCY_DISPLAY->getFullValue( $price["product_price"] ) . '</strong></p>';
		} 
	}
	else   
             $html .= '<font color="red">Atributo sin seleccionar.</font>';
      }    
     }   
    } // end loop
   } // end if num rows
   else {
        $html = "<input type=\"hidden\" name=\"product_id\" value=\"$product_id\" />\n" ;
	$html .= "<input type=\"hidden\" name=\"prod_id[]\" value=\"$product_id\" />\n" ;
   }
   $tpl->set( "drop_down", $html ) ;  
   $html = $tpl->fetch( 'product_details/includes/addtocart_drop.tpl.php' ) ;
   return array( $html , "drop" ) ;      
}
	
// clean $_GET variables and database values
// Hacked by Greg S. Tibbetts MBA, MPM greg@aagthosting.com
function clean($input, $maxlength){
     $input = substr($input, 0, $maxlength);
     $input = EscapeShellCmd($input);
     return ($input);
}

Hay que sustituir este codigo en el archivo php ps_product_attribute.php que se encuentra en: \administrator\components\com_virtuemart\classes
Y modificar en el codigo:
$url = 'http:// AQUI PONES TU DOMINIO/index.php?option=com_virtuemart&page=shop.product_details&flypage=' . $flypage . '&product_id=' . $product_id;
aunque creo que lo mismo tb vale poniendo, pero no lo he probado:
$url = '/index.php?option=com_virtuemart&page=shop.product_details&flypage=' . $flypage . '&product_id=' . $product_id;


He arreglado un \n que se colaba en la salida.
Tambien he puesto para que saga "Atributo sin seleccionar" en color rojo y en español, en vez de en negro e ingles.

Pd: si algun administrador puede poner el cuadro de código más pequeño lo agradecería la gente, es que no se como se hace.
Gracias.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

7 años 7 meses antes
Avatar de robert
robert
Moderator
Moderator
Mensajes: 563
Karma: 29
Más
virtuemart y los Atributos #18166
Se agradece el Ajuste. Es un hack que vendra muy bien. Añadi un enlace a este post desde otro post sobre atributos que conteste > Atributos Virtuemart

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

6 años 10 meses antes
Avatar de juanjo1234
juanjo1234
Invitado
Invitado
virtuemart y los Atributos #24472
No logro que me funcione. No hay nada un poco más intuitivo o algún plugin que se pueda usar para este propósito?

Me resulta raro que siendo una situación tan común el hecho de tener un atributo con muchas variantes y stocks diferentes no haya una solución más práctica.

Gracias! :D

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

6 años 10 meses antes 6 años 10 meses antes por Loyin666.
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #24480
Voy a ver si encuentro algo porque creia tener una solución más facil, pero va a ser que no era como yo creia.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

6 años 10 meses antes
Avatar de Loyin666
Loyin666
Invitado
Invitado
Autor del tema
virtuemart y los Atributos #24481
Al final encontre algo pero cuesta 80$.
El componente se llama Easy Inventory Control. Ojo es del año 2009 no se si es compatible con los actuales virtuemart.
extensions.joomla.org/extensions/extensi...irtuemart-stats/9066

Puedes ver una demo de como funciona:
www.nextphasedesigns.com/index.php?optio...ew=wrapper&Itemid=61

Espero te sirva, es lo único que encontré cuando busque hace tanto tiempo.

Por favor, Identificarse o Crear cuenta para unirse a la conversación.

Temas Relacionados

Asunto temas relacionadosRelevanciaFecha del último post
atributos en virtuemart9.16Domingo, 20 Marzo 2011
Añadir atributos de producto en Virtuemart 28.96Martes, 28 Febrero 2012
Poner un titulo arriba de los atributos de virtuemart8.87Martes, 24 Mayo 2011
Virtuemart. Añadir atributos no funciona. Botones no trabajan8.77Lunes, 26 Diciembre 2011
Cómo añadir varios atributos a todos los productos en Virtuemart+Joomla8.59Miércoles, 13 Julio 2011
Virtuemark, no veo el nombre de los atributos6.55Jueves, 06 Octubre 2011
Sincronizar Atributos->Peso en VM 2.0.26.55Martes, 27 Marzo 2012
Atributos "ALT" en los títulos de las noticias del Joomla6.48Viernes, 08 Mayo 2009
Virtue Mart crear nuevos Atributos6.41Sábado, 31 Octubre 2009
migrar una base de datos de virtuemart a otro virtuemart3.65Domingo, 25 Septiembre 2011
Tiempo de carga de la página: 0.704 segundos