Virtuemart – Shipping Method List – Invalid Markup
Wednesday, August 19th, 2009A user recently reported an odd problem on a Virtuemart site I maintain. They weren’t able to properly select the bottom two shipping methods listed (both USPS options).
I took a gander at the cart and quickly found the problem. The UPS shipping module was outputting the radio buttons wrapped in a <label> tag. Problem was, it wasn’t doing this consistently, and the last UPS shipping option had an open tag that was encompassing all the remaining radio buttons. This meant that anywhere you clicked in that region would result in the last UPS option being selected.
Now for some reason the USPS shipping module didn’t output labels at all. So I figured the most consistent solution would be to simply prevent the UPS module from outputting those <label> tags.
The method you’re looking for is ups::list_rates(), which is in the ./administrator/components/com_virtuemart/classes/shipping/ups.php file.
You can see the changes I made below on lines 362 and 384. The lines that are commented out are the original ones.
356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 | $shipping_rate_id = urlencode(__CLASS__."|UPS|".$value['ServiceName']."|".$charge); $checked = (@$d["shipping_rate_id"] == $value) ? "checked=\"checked\"" : ""; if (count($shipment) == 1 ) { $checked = "checked=\"checked\""; } //$html .= '<label for="'.$shipping_rate_id.'">'."\n<input type=\"radio\" name=\"shipping_rate_id\" $checked value=\"$shipping_rate_id\" id=\"$shipping_rate_id\" />\n"; $html .= "<input type=\"radio\" name=\"shipping_rate_id\" $checked value=\"$shipping_rate_id\" id=\"$shipping_rate_id\" />\n"; $_SESSION[$shipping_rate_id] = 1; $html .= $value['ServiceName'].' '; $html .= "<strong>(".$value['TransportationCharges'].")</strong>"; if (DEBUG) { $html .= " - ".$VM_LANG->_('PHPSHOP_PRODUCT_FORM_WEIGHT').": ".$order_weight." ". $weight_measure. ", ".$VM_LANG->_('PHPSHOP_RATE_FORM_VALUE').": [[".$charge_unrated."(".$fsc_rate.")]+".UPS_HANDLING_FEE."](".$taxrate.")]"; } // DELIVERY QUOTE if (Show_Delivery_Days_Quote == 1) { if( !empty($value['GuaranteedDaysToDelivery'])) { $html .= " - ".$value['GuaranteedDaysToDelivery']." ".$VM_LANG->_('PHPSHOP_UPS_SHIPPING_GUARANTEED_DAYS'); } } if (Show_Delivery_ETA_Quote == 1) { if( !empty($value['ScheduledDeliveryTime'])) { $html .= " (ETA: ".$value['ScheduledDeliveryTime'].")"; } } if (Show_Delivery_Warning == 1 && !empty($value['RatedShipmentWarning'])) { //$html .= "</label><br/>\n * <em>".$value['RatedShipmentWarning']."</em>\n"; $html .= "<br/>\n * <em>".$value['RatedShipmentWarning']."</em>\n"; } $html .= "<br />\n"; |












