При разработке мультиязычного магазина на joomla с модулем VirtueMart возникла проблема следующего характера: При переключении языка на страницах VirtueMart пользователя «выкидывало» на главную страницу, а не на ту же самую страницу с измененным языком (что вполне логично в данном случае). Этому и посвящена эта краткая заметка.
Столкнувшись с данной проблемой, автор данной заметки попытался найти какое-либо готовое решение, но нашел лишь несколько мертвых тем на форумах, где аналогичный вопрос остался без ответа. Учитывая то, что времени на полноценную модификацию модуля на тот момент не было, было принято решение разработать нижеприведенный «костыль». Понятное дело, что это решение нельзя назвать идеальным, ввиду того, что для его использования нужно соблюдать ряд ограничений. Главным ограничением можно назвать следующий пункт: Все ЧПУ страниц VirtueMart должны быть одинаковыми для всех языков, используемых на сайте (Благо в том случае было всего 2 языка).
В шаблоне модуля смены языка пишем следующий код:
<? //Замена языка в строке $lang_kost = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; if(stristr($_SERVER['REQUEST_URI'], '/ru/') == TRUE){ $lang_kost = str_replace('/ru/','/en/',$lang_kost); } else if(stristr($_SERVER['REQUEST_URI'], '/en/') == TRUE){ $lang_kost = str_replace('/en/','/ru/',$lang_kost); } ?>
Изначально переменная имеет значение, равное URL в браузере. При клике на флажок для смены языка, значение /en/ и /ru/ в строке меняются на противоположные, в зависимости от ситуации. Соответственно, чтобы этот блок заработал, в шаблоне смены языка нужно поменять все ссылки на значение данной переменной. Собственно, это и есть весь «костыль». Возможно, он кому-нибудь когда-нибудь пригодится.