Tag Archives: bugs

Algunos trucos para IE

3 Oct

Internet Explorer no cesa de sorprenderme. Los últimos dos temas que tuve, fueron con la función javascript addEvent, y con la función .innerHTML.

Respecto a addEvent, algunas versiones de IE revientan como una chinche cuando se carga la página, sin dar mayores explicaciones. La solución entonces, está en cambiar addEvent por attachEvent. No tengo muy clara la diferencia, peo con attachEvent IE se queda contento.

El otro tema fue al querer usar en una función javascript innerHTML para cargar las opciones de un select. Explorer corta el primer option. Parece que es un bug que está abierto desde hace unos 7 años. La solución, que encontré por acá:

http://elmicoxcodes.blogspot.com/2007/02/innerhtml-and-select-option-in-ie.html

Consiste en lugar de usar innerHTML, usar la función de más abajo. De manera que si antes teníamos:

document.getElementById(“my_select”).innerHTML = “<option value=’1′>not</option> <option value=’2′>work</option>”;

Ahora tendríamos:

var inner = “<option value=’1′>Now</option> <option value=’2′>work</option>”;
select_innerHTML(document.getElementById(“my_select”),inner);”


La función maravillosa:

function select_innerHTML(objeto,innerHTML){
 /******
 * select_innerHTML - corrige o bug do InnerHTML em selects no IE
 * Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
 * Versão: 2.1 - 04/09/2007
 * Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
 * @objeto(tipo HTMLobject): o select a ser alterado
 * @innerHTML(tipo string): o novo valor do innerHTML
 *******/
 objeto.innerHTML = ""
 var selTemp = document.createElement("micoxselect")
 var opt;
 selTemp.id="micoxselect1"
 document.body.appendChild(selTemp)
 selTemp = document.getElementById("micoxselect1")
 selTemp.style.display="none"
 if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
 innerHTML = "<option>" + innerHTML + "</option>"
 }
 innerHTML = innerHTML.toLowerCase().replace(/<option/g,"<span").replace(/<\/option/g,"</span")
 selTemp.innerHTML = innerHTML
for(var i=0;i<selTemp.childNodes.length;i++){
 var spantemp = selTemp.childNodes[i];
if(spantemp.tagName){
 opt = document.createElement("OPTION")
if(document.all){ //IE
 objeto.add(opt)
 }else{
 objeto.appendChild(opt)
 }
//getting attributes
 for(var j=0; j<spantemp.attributes.length ; j++){
 var attrName = spantemp.attributes[j].nodeName;
 var attrVal = spantemp.attributes[j].nodeValue;
 if(attrVal){
 try{
 opt.setAttribute(attrName,attrVal);
 opt.setAttributeNode(spantemp.attributes[j].cloneNode(true));
 }catch(e){}
 }
 }
 //getting styles
 if(spantemp.style){
 for(var y in spantemp.style){
 try{opt.style[y] = spantemp.style[y];}catch(e){}
 }
 }
 //value and text
 opt.value = spantemp.getAttribute("value")
 opt.text = spantemp.innerHTML
 //IE
 opt.selected = spantemp.getAttribute('selected');
 opt.className = spantemp.className;
 }
 }
 document.body.removeChild(selTemp)
 selTemp = null
 }
Anuncios

Recordar contraseña no funciona

24 Abr

Me ha ocurrido en alguno sitios, que el recordar contraseña no funciona correctamente, y se indica que el token recibido no es correcto.

Esto puede ocurrir, porque a partir de la versión 1.5.16 de Joomla!, se modificó el archivo de reseteo de contraseña. En este sentido, si el template que estamos utilizando sobreescribe el archivo confirm.php en templates\mitemplate\html\com_user\reset , quizá no tenga hecha esa corrección.

Lo que hay que hacer entonces, es agregar el campo de nombre de usuario, así:

<div>
	<label for="username" title="<?php echo JText::_('RESET_PASSWORD_USERNAME_TIP_TITLE'); ?>::<?php echo JText::_('RESET_PASSWORD_USERNAME_TIP_TEXT'); ?>"><?php echo JText::_('User Name'); ?>:</label>
	<input id="username" name="username" type="text" size="36" />
</div>

Tomado de: http://docs.joomla.org/Confirm_password_in_1.5.16

Moneda múltiple en Virtuemart

31 Ene

Virtuemart permite trabajar con múltiples monedas. El funcionamiento es correcto, excepto cuando se visualiza el detalle de las órdenes, tanto por el usuario desde el front-end, como por los administradores desde el back-end.

El sistema guarda el pedido con los datos de la moneda con los que se efectuó la compra, pero cuando se despliega el pedido, los valores aparecen con la moneda de la compra, pero el símbolo de moneda es siempre $. Esto es confuso para los administradores del sitio, que no saben si por ejemplo la compra se realizó con Euros o con Dólares, ya que el símbolo es en todos los casos es $.

Para solucionar este problema, y que se muestre la moneda correcta con que se realizó la compra, los pasos a seguir son los siguientes:

1. Para el front-end:

Editar el archivo account.order_details.tpl.php en
components/com_virtuemart/themes/default/templates/pages/ (default o la plantilla que estemos utilizando)

Allí, se deberán buscar las líneas que contienen “$CURRENCY_DISPLAY” por ejemplo:

echo $CURRENCY_DISPLAY->getFullValue($item_price, ”, $db->f(‘order_currency’));

Esas líneas, las sustituiremos por echo $db->f(‘order_currency’).” “.$item_price; o lo que corresponda según lo que se está imprimiendo. Lo que hace esta línea es imprimir la moneda con “$db->f(‘order_currency’)” , y luego imprimir el valor a mostrar, en este caso el precio del producto $item_price.

2. Para el back-end:

a. Para que aparezca la moneda en el listado de pedidos, vamos a editar el archivo order.order_list.php que se encuentra en administrator/components/com_virtuemart/html .  Se deberá buscar la línea

$listObj->addCell( $GLOBALS[‘CURRENCY_DISPLAY’]->getFullValue($db->f(“order_total”), ”, $db->f(‘order_currency’)));

y sustituirla por

$listObj->addCell( $db->f(‘order_currency’).” “.$db->f(“order_total”));
b. En el detalle de Pedido, mi solución fue desplegar la Moneda dentro del listado. Para ello, en el archivo order.order_print.php dentro de
/administrator/components/com_virtuemart/html  se debe agregar el siguiente código en la línea 93 en mi caso, o en lugar que se desee dentro de la página:

<tr>
<td><strong><?php echo “Moneda” ?>:</strong></td>
<td><?php echo $db->f(‘order_currency’); ?></td>
</tr>

Espero que les sea de utilidad. Realmente hay poca información sobre este tema en los foros!

A %d blogueros les gusta esto: