Nedávno jsem se rozhodl zkontrolovat validitu odkazů na svém eshopu AntiMALWARE.cz a ouha. Zjistil jsem, že mi nefunguje odkaz, který slouží k tisknutí stránky v komponentě Virtuemart, což je jádro eshopu. Povedlo se mi najít následující návod, který jsem i ověřil v praxi. Nyní tedy počet "broken links" na AntiMALWARE.cz = 0. :-) Autorovi návodu patří veliký dík.
Proč nefunguje PrintIcon() ve Virtuemartu? Protože proměnná ($_SERVER,'QUERY_STRING') je při SEF optimalizaci prázdná.
K odstranění problému je třeba editovat následující soubor: administrator\components\com_virtuemart\classes\htmlTools.class.php
Kód:
function PrintIcon( $link='', $use_icon=true, $add_text='' ) {
global $VM_LANG, $mosConfig_live_site, $mosConfig_absolute_path, $cur_template, $Itemid;
if ( @VM_SHOW_PRINTICON == '1' ) {
if( !$link ) {
$query_string = str_replace( 'only_page=1', 'only_page=0', vmAmpReplace(vmGet($_SERVER,'QUERY_STRING')) );
$link = 'index2.php?'.$query_string.'&pop=1'.(vmIsJoomla('1.5') ? '&tmpl=component' : '');
}
Je třeba nahradit následujícím kódem:
function PrintIcon( $addlink='', $use_icon=true, $add_text='' ) {
global $VM_LANG, $mosConfig_live_site, $mosConfig_absolute_path, $cur_template, $Itemid;
if ( @VM_SHOW_PRINTICON == '1' ) {
if (substr($addlink, 0, 10) == "index2.php") {
$link = $addlink ;
} else {
$query_string= "option=com_virtuemart&page={$_SESSION['last_page']}&only_page=1";
if ($_SESSION['last_browse_parameters']['category_id']) $query_string.= "&category_id={$_SESSION['last_browse_parameters']['category_id']}";
if ($_SESSION['userstate']['product_id']) $query_string.= "&product_id={$_SESSION['userstate']['product_id']}";
$link = 'index2.php?'.$query_string.'&pop=1'.(vmIsJoomla('1.5') ? '&tmpl=component' : '');
$link .= '&'.$addlink ;
}
K dokončení procesu je třeba ještě editovat soubor: components\com_virtuemart\themes\default\templates\pages\account.order_details.tpl.php
Kód:
<?php echo vmCommonHTML::PrintIcon(); ?>
Změňte na:
<?php echo vmCommonHTML::PrintIcon('order_id='.$vars["order_id"]); ?>
Odkaz na návod: Bug Fix : function PrintIcon() in htmlTools.class.php