Nie działająca wyszukiwarka produktów w VirtueMart
Implementując w pewnym sklepie internetowym opartym o komponent VirtueMart moduł do wyszukiwania produktów mod_virtuemart_search wraz z przyjaznymi linkami opartymi o komponent ARTIO JoomSEF w wersji 3.2.9 napotkałem takiż oto problem, iż zamiast wyników wyszukiwania pojawiała się strona główna sklepu. Czyli jednym słowem wyszukiwarka nie działała. Trzeba było ten stań rzeczy zmienić. A więc do dzieła…
Przeglądając plik modułu odpowiedzialnego za wyszukiwarkę, odnalazłem informację że za wyszukiwanie odpowiedzialna jest funkcja purl z klasy ps_session.php.
Plik z ten ma następującą ścieżkę:
/modules/mod_virtuemart_search/mod_virtuemart_search.php
Aby czegoś nie pokręcić postanowiłem stworzyć nową funkcję purl2, która będzie wywoływana w pliku mod_virtuemart_search.php. Tak więc linia 30 w tym pliku wygląda teraz tak:
<form class="search" action="<?php $sess->purl2( $mm_action_url.">" method="post">
Następnie należało sprawdzić co tak naprawdę się dzieje w tej funkcji. Znajduje się ona w pliku ps_session.php, a ścieżka do niego jest taka: /administrator/components/com_virtuemart/classes
Wystarczyło tylko zmienić dodać funkcję purl2, najlepiej zaraz za purl, tym by było uporządkowane wszystko. Jest to około 491 linii.
function purl($text, $createAbsoluteURI=false, $encodeAmpersands=true, $ignoreSEF=false) { echo $this->url( $text, $createAbsoluteURI, $encodeAmpersands, $ignoreSEF );
}
Dopisana funkcja purl2 wygląda następująco:
function purl2($text, $createAbsoluteURI=True, $encodeAmpersands=true, $ignoreSEF=false) {
echo $this->url( $text, $createAbsoluteURI, $encodeAmpersands, $ignoreSEF );
}
Jak widać zmienił się tylko parametr $createAbsoluteURI zamiast false zmieniłem na true, tak by tworzyło absolutne ścieżki URL. Jak widać hack działa:P