Немного поменял исполнение для проблемы в старте темы.
1. main.php функция frontend_main::getValutesInfo
function getValutesInfo(){
$def_currency_id=1; //идешка дефотной валюты, если пользователь еще не выбирал
$cache_time=21600; //время жизни файла кеша с инфой о валютах, что бы не выбирать из бд каждый раз наново - 6 часов
$cache_file=SITEBILL_DOCUMENT_ROOT.'/cache/valutes_info.txt'; //имя файла с кешем курсов
$valutes_info=array();
$valutes_info['courses']=array();
//определяем "текущую" валюту или используем дефолтную
$valutes_info['active']=intval($_COOKIE['current_currency']);
if($valutes_info['active']==0){
$valutes_info['active']=$def_currency_id;
setcookie('current_currency', $def_currency_id, time()+86400, '/');
}
//загружаем курсы из кеша или из БД
if(file_exists($cache_file) && (time()-filemtime($cache_file))<$cache_time){
$valutes_info['courses']=unserialize(file_get_contents($cache_file));
}else{
@unlink($cache_file);
$DBC=DBC::getInstance();
$query='SELECT * FROM '.DB_PREFIX.'_currency';
$stmt=$DBC->query($query);
if($stmt){
while($ar=$DBC->fetch($stmt)){
$valutes_info['courses'][$ar['currency_id']]=$ar;
}
$f=fopen($cache_file, 'w');
fwrite($f, serialize($valutes_info['courses']));
fclose($f);
}
}
if(!empty($valutes_info['courses'])){
foreach($valutes_info['courses'] as $k=>$v){
$valutes_info['courses'][$k]['active']=0;
if($k==$valutes_info['active']){
$valutes_info['courses'][$k]['active']=1;
}
}
}
return $valutes_info;
}
2. В main.php внутри main() загружаем данные в шаблон
$this->template->assign('valutes_info', $this->getValutesInfo());
3. В шапке сайта или другом месте выводим список переключателей
<ul class="valute_changer">
{foreach from=$valutes_info.courses item=_course}
<li class="valute{if $_course.active==1} active{/if}" data-id="{$_course.currency_id}">{$_course.name}</li>
{/foreach}
</ul>
4. В файле скриптов шаблона включаем обработку нажатий на переключателе
$(document).ready(function(){
$('.valute_changer .valute').click(function(){
var _this=$(this);
var id=_this.data('id');
_this.addClass('active').siblings().removeClass('active');
$('.valutes .course_price').hide();
$('.valutes .valute'+id).fadeIn();
$.cookie('current_currency', id, {expires: 1, path: '/'});
});
});
5. По шаблону вместо вывода обычного цены
{$grid_items[i].price|number_format:0:",":" "} {if $grid_items[i].currency_name != ''}{$grid_items[i].currency_name}{/if}
ставим блок разных цен, зависимых от выбранной валюты
{if intval($grid_items[i].price)>0 && $grid_items[i].currency_id>0}
<div class="valutes">
{foreach from=$valutes_info.courses item=_course}
<div class="course_price valute{$_course.currency_id}"{if $_course.active!=1} style="display: none;"{/if}>{(($grid_items[i].price*$valutes_info.courses[$grid_items[i].currency_id].course)/($_course.course))|number_format:0:",":" "} {$_course.name}</div>
{/foreach}
</div>
{/if}
6. Красоту добавляем по вкусу. Ниже вариант для реалии
ul.valute_changer {
list-style: none;margin: 0;display: block;font-size: 12px;
}
ul.valute_changer li.valute {
display: inline-block;padding: 2px 4px;width: 30px;text-align: center;border: 1px solid White;background: #0581b5;color: White;cursor: pointer;
}
ul.valute_changer li.valute:hover {
background: #5db2d6;
}
ul.valute_changer li.valute.active {
font-weight: bold;color: #0581b5;background: White;border: 1px solid #0581b5;
}