zuzunai Posted August 12, 2011 Share Posted August 12, 2011 Buenos dias, tengo un pequeño problema con el apartado producto (donde se muestran los detalles de uno en concreto). Mi problema principal es que en el tpl (digamos en ejecución) necesito saber que color esta seleccionado. Tengo una funcion js que me devuelve el color (llamemosla color()) ésta sé que funciona ya que con un alert me muestra correctamente el color seleccionado (su id para ser mas especifico). Por otro lado tengo una funcion php (getTallasInStock($color)) (desde la clase class/product.php) que me hace una consulta sobre temas relacionados con stock y tallas (basicamente me devuelve las tallas que tienen stock para introducirlas en el select en funcion del color). Ambas funciones van correctamente ya que a esta segunda si le paso el color manualmente trabaja correctamente. Mi duda es: - Como almaceno en una variable TPL el resultado de color()? - o sino como puedo introducir el return de color() en la llamada a getTallasInStock($color); He provado cosas como: Esto va en product.tpl - {assign var="colorActual" value="javascript:color();"}(sus variantes sin el javascript, sin comillas dobles, etc...) He probado en el script donde estan las variables: - var colorActual = color(); pero creo que no es asi porque tanto colorActual como las demas, siendo llamadas desde tpl ({l s=$colorActual}) no las encuentra. - he probado en el getTallasInStock(color()); Espero haberme expresado correctamente, Ante todo muchissimas gracias. Att. Artur. Link to comment Share on other sites More sharing options...
JoseGarcia Posted August 12, 2011 Share Posted August 12, 2011 Te recomiendo que instales el Firebug, con ese pluging para Firefox puedes ver todos los datos de los CSS firebug Espero que te sea de ayuda Link to comment Share on other sites More sharing options...
tamu secreto Posted August 12, 2011 Share Posted August 12, 2011 no se si entendi bien, te doy un ejemplo hecho en teoria: en getTallasInStock self::$smarty->assign(array('tu-variable' => $tuvariable_color )); } public function displayContent() { parent::displayContent(); self::$smarty->display(_PS_THEME_DIR_.'product.tpl'); } en producto tpl {$tu-variable} a un que no se funcara otro que se me ocurre $smarty->assign(array( 'tu-variable' => $tuvariable-color )); $this->display(Tools::getShopDomainSsl(true, true).__PS_BASE_URI__._PS_THEME_DIR_.'product.tpl'); en product {$tu-variable} por ultimo un ejemplo mas sencillo seria: $smarty->assign(array('tuvariable' => $tuvariable-color)); $smarty->display(__PS_BASE_URI__._PS_THEME_DIR_.'product.tpl'); en producttpl {$tuvariable} en algo asi... saludos Link to comment Share on other sites More sharing options...
zuzunai Posted August 12, 2011 Author Share Posted August 12, 2011 El problema que tengo no es de css, Me has dado algunas ideas, aun asi el getTallasInStock no es el problema en si, ya que si le paso un 5 manualmente me lo hace bien (5 es un color concreto) sabes si se puede tocar smarty desde js? te pongo el codigo por si te sirve. En el js: (themes/mitema/js/product.js) function color(){ var idColor = document.getElementById('group_2').selectedIndex; var colorNum = document.getElementById('group_2').options[idColor].value; if (colorNum) return colorNum; else return 0; } En el php: (classes/product.php) public function getCombinationsStock($color=0){ $cons = ' SELECT al.`name`, al.`id_attribute` as id FROM `'._DB_PREFIX_.'product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pa.`id_product_attribute` = pac.`id_product_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (pac.`id_attribute` = al.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute` a ON (pac.`id_attribute` = a.`id_attribute`) WHERE pa.`id_product` = '.(int)($this->id).' AND (a.`id_attribute_group` = 4 OR a.`id_attribute_group` = 5) AND pa.`quantity` > 0 AND al.`id_lang` = 3 '; if($color!=0){ $cons.='AND pac.`id_product_attribute` IN ( SELECT `id_product_attribute` FROM `'._DB_PREFIX_.'product_attribute_combination` WHERE `id_attribute` = '.$color.' )'; } $result = Db::getInstance()->ExecuteS($cons); return $result; } En el tpl: (themes/mitema/product.tpl) {assign var="tallasStock" value=$product->getCombinationsStock(5)} Necesito que en vez del 5 pueda poner de alguna forma lo que devuelve color() del js. Se que es un tema complicado y todo esto lo he hecho a mano con lo que puede tener errores. Voy a ir mirandome si con smarty (que no lo he tocado nunca xD) puedo hacer algo. Gracias por responder tan pronto y si veis algo os lo agradecere eternamente ^^ Un saludo, Att. Artur. Link to comment Share on other sites More sharing options...
zuzunai Posted August 12, 2011 Author Share Posted August 12, 2011 Por cierto (todo esto me ayuda a aprender) Pero para el problema concreto que tengo si sabeis que variable maneja desde tpl el color actual tb me serviria. se que existe $colors con el array de colores del producto que por cada color tienes $color.value (con el color en #ffffff) pero no se decirle por ejemplo {if $color.selected} Gracias una vez mas, Att. Artur. Link to comment Share on other sites More sharing options...
tamu secreto Posted August 12, 2011 Share Posted August 12, 2011 no se prueba asi : {assign var='tallasStock' value=$product->getCombinationsStock(color())} o sea llama a la funcion dentro () en teoria si tu dice que camina con 5 debe fucionar. pero deberia probar cargando el 5 en la funcion no en llamada, por que el hecho de que te funcione con el cinco merido ahi no quiere decir que tu funcion valla a funcionar. otra opcion seria utilizar document.write cambiando en var del js tambien creo que tu funcion color deberia ir directamente en el archivo product.tpl saludos! Link to comment Share on other sites More sharing options...
Recommended Posts