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