vetalysd 8 Жалоба Опубликовано: April 3, 2015 Как правильно организовать переключатель валют в realty_grid? Несколько я понимаю массивы с валютами доступны, но как их переключать с мимимумом кода? Можно организовать 2 цикла с разными валютами и переключать их по принципу как в list_view/thumbs_view, но если валют не 2 а много... Вобщем посоветуйте кто как делает. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: April 3, 2015 Я бы сделал скриптом.Выше сетки вынес бы значки всех валют.В сетке бы сделал вывод цен в валютах по "кармашкам" с идешками.На значки валют повесил бы онклик который бы открывал нужные кармашки и скрывал остальные без релоадов, просто явой.Текущую выбранную валюту скриптом закладывал бы в куки, что бы по ней определялось какую валюту показать при загрузке страницы. если я правильно понял о чем речь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vetalysd 8 Жалоба Опубликовано: April 3, 2015 abushyk правильно.Скрыть/показать валюту нужную будет легко, а как заложить в куки значения текущей выбранной валюты по событию .click ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vetalysd 8 Жалоба Опубликовано: April 3, 2015 На java типа такого будет <p onclick="myFunctionRUB()">Рубль</p><p onclick="myFunctionUSD()">USD</p><script>function myFunctionRUB() {document.getElementById("usd").style.visibility = 'hidden';document.getElementById("rur").style.visibility ='visible';}function myFunctionUSD() {document.getElementById("rur").style.visibility = 'hidden';document.getElementById("usd").style.visibility ='visible';}</script><div id="rur"> вывод SMARTY рубль </div><div id="usd"> вывод SMARTY USD </div> Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vetalysd 8 Жалоба Опубликовано: April 3, 2015 Jquery версия. Помогите доработать чтобы запоминала валюту <p id="RURtrigger">Рубль</p><p id="USDtrigger">USD</p><script>jQuery(document).ready(function(){jQuery('#RURtrigger').click(function(){$('#usd').hide();$('#rur').show();});jQuery('#USDtrigger').click(function(){$('#rur').hide();$('#usd').show();});});</script><div id="rur"> вывод SMARTY рубль </div><div id="usd"> вывод SMARTY USD </div><style>#usd {display:none}</style> Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TopRaN 235 Жалоба Опубликовано: April 3, 2015 Данная ветка для готовых решений, а не флуда! Выкладываются именно готовые решения!. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: April 3, 2015 <div id="rur"> вывод SMARTY рубль </div><div id="usd"> вывод SMARTY USD </div> Вот за такое да клавиатурой да по пальцам))))Если речь о сетке, то никаких ид на выводе цен, только классы. Остальное завтра постараюсь расписать. Данная ветка для готовых решений, а не флуда! Выкладываются именно готовые решения!. Иногда путь к готовому решение значительно интереснее и познавательнее самого решения))) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: April 4, 2015 Делаем userfriendly-переключатель отображения валют. Исходным материалом будет http://www.etown.ru/s/topic/1742-отображение-валют/?p=18682. 1. Что нам понадобится. - заготовки из указанной статьи - jquery библиотека https://github.com/carhartl/jquery-cookie. Без нее можно обойтись, но с ней быстрее 2. Модернизируем код контроллера (main.php)В контроллере мы готовили массив курсов валют. Изменим его немногоif(!isset($_SESSION['site_cache']['courses'])){ $DBC=DBC::getInstance(); $query='SELECT * FROM '.DB_PREFIX.'_currency'; $stmt=$DBC->query($query); if($stmt){ while($ar=$DBC->fetch($stmt)){ $ar['code_id']=strtolower(trim($ar['code'])); $courses[$ar['currency_id']]=$ar; } } $_SESSION['site_cache']['courses']=$courses;}$this->template->assign('_courses', $_SESSION['site_cache']['courses']);if(isset($_COOKIE['current_view_currency']) && $_COOKIE['current_view_currency']!=''){ $this->template->assign('_current_view_currency', $_COOKIE['current_view_currency']);}else{ setcookie('current_view_currency', 'eur'); $this->template->assign('_current_view_currency', 'eur');}В чем отличие? В данные курсов мы добавили переменную code_id - это приведенный к нижнему регистру код валюты, что бы мы этим не занимались в шаблоне.Так же мы проверяем куки на наличие значения current_view_currency и если его нет, то заполняем его "eur" либо другой дефолтной валютой (кодом валюты приведенным к нижнему регистру). И отправляем эту переменную в шаблон. Вот и все в контроллере. Идем в шаблон. 3. Модернизация шаблона (realty_grid.tpl - либо какой-то из его подчиненных типа табличного или плиточного видов) В этом шаблоне у нас должно быть два момента:а) некий чекер с именами\кодами валют, куда бы мы кликали, что бы выбрать валюту.б) некий блок цен с ценами в разных валютах на строке или блоке объявления. Начнем с чекера-переключателя. Поставим его, в области над списком.{foreach from=$_courses item=_course} <div class="show_valute{if $_course.code_id==$_current_view_currency} active{/if}" data-codeid="{$_course.code_id}">{$_course.code}</div>{/foreach}тут не сложно. прокручиваем массив валют из контроллера мы выводим их в виде<div class="show_valute" data-codeid="rur">RUR</div><div class="show_valute active" data-codeid="usd">USD</div><div class="show_valute" data-codeid="eur">EUR</div>Класс show_valute указывает управляющую кнопку, а active - активное состояние переключателя. Код вывода разновалютных цен в блоке объявления <div class="valutes">{foreach from=$_courses item=_course} <div class="course_price {$_course.code_id}" style="{if $_course.code_id!=$_current_view_currency}display: none;{/if}">{$_course.code}: {(($grid_items[i].price*$_courses[$grid_items[i].currency_id].course)/($_course.course))|number_format:0:",":" "}</div>{/foreach}</div>Главное отличие - мы выводим цены в общий блок с классом valutes и, кроме этого, каждую цену внутри своего блока с класами course_price и тем кодом валюты(названием кода валюты приведенным к нижнему регистру). Вместе с этим мы проверяем текущую "отображаемую" валюту, которую ищем в куках и те блок, которые соответствуют другим валютам обозначаем стилем display: none; иными словами прячем. В результате у нас в блоках объявлений всегда будет показана только одна цена в той валюте, которая лежала в куках, либо дефолтной, если ее там не было.А общий виду будет такой<div class="valutes"> <div class="course_price rur" style="display: none;">RUR: 13 774 091</div> <div class="course_price usd" style="">USD: 568 181</div> <div class="course_price eur" style="display: none;">EUR: 454 545</div></div>3. Добавляем красоту и интерактив.Включаем библиотеку jquery.cookie.js У меня она лежит в /third/jquery.cookie/ поэтому в шаблоне сетки я ее подключаю как <script type="text/javascript" src="{$estate_folder}/third/jquery.cookie/jquery.cookie.js"></script>На стилях не останавливаюсь.{literal}<style>.show_valute.active {font-weight: bold;cursor: auto;}.show_valute {cursor: pointer;}</style>{/literal}А вот и сам скрипт{literal}<script>$(document).ready(function(){$('.show_valute').click(function(){var _this=$(this);var codeid=_this.data('codeid');_this.addClass('active').siblings().removeClass('active');$('.valutes .course_price').hide();$('.valutes .'+codeid).fadeIn();$.cookie('current_view_currency', codeid);});});</script>{/literal}Кратко: кликая по элементу с классом show_valute мы берем у этого элемента значение из аттрибута data-codeid, запоминаем его, прячем все разновалютные курсы и показываем только те блоки, которые имеют класс аналогичный запрошенному коду валюты. И пакуем этот код в куки, что бы при рефреше страницы у нас уже показались нужные валюты. 2 DoobBY и TopRaN reacted to this Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vetalysd 8 Жалоба Опубликовано: April 4, 2015 abushyk спасибо большое! сегодня испробуем! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
vetalysd 8 Жалоба Опубликовано: April 4, 2015 Все отлично работает. Я себе сделал так: по-умолчанию выводит стандартный $grid_items.price с возможностью перевести все в нужную валюту. Чекер{foreach from=$_courses item=_course name=curr} <div class="currencies show_valute{if $_course.code_id==$_current_view_currency} active{/if}" data-codeid="{$_course.code_id}">| {$_course.code} </div> {if $smarty.foreach.curr.last}<div class="currencies show_valute{if $_current_view_currency=="def"} active{/if}" data-codeid="def">по умолчанию </div>{/if}{/foreach}Вывод{foreach from=$_courses item=_course name=currs}{if $smarty.foreach.currs.first} <div class="course_price def" style="{if $_current_view_currency!='def'}display: none;{/if}"> {$grid_items[i].price|number_format:0:",":" "} {if $grid_items[i].currency_name != ''}{$grid_items[i].currency_name}{/if}</div>{/if} <div class="course_price {$_course.code_id}" style="{if $_course.code_id!=$_current_view_currency}display: none;{/if}"> {(($grid_items[i].price*$_courses[$grid_items[i].currency_id].course)/($_course.course))|number_format:0:",":" "}{if $_course.code=='USD'} ${elseif $_course.code=='BYR'} р.{/if}</div>{/foreach}По-умолчанию поставил код def....setcookie('current_view_currency', 'def');$this->template->assign('_current_view_currency', 'def');....Получилось: по умолчанию | BYR | USD Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Игорь Петрович 1 Жалоба Опубликовано: May 6, 2015 Отличная ветка,прикрутил все по интсрукции, на удивление для меня и моих програмерских способностей все заработало. Вот теперь такой ворос: 1. Как прикрутить вместо RUR, EUR, USD картинки с валютами, по аналогии с grid_list, grid_thumbs вот в это место. <div class="show_valute" data-codeid="rur">RUR</div><div class="show_valute active" data-codeid="usd">USD</div><div class="show_valute" data-codeid="eur">EUR</div> При этом, сделать так, что бы однажды выбранная валюта становилсь активной на протяжении всего сеанса пользователя, а то сейчас получаеться валюту выбрал, перелистнул страницу, и нужно опять нажимать на валюту.И еще, картинками валют будут служить например файлы "eur_on.png"; "eur.png", то есть, при активности валюты подсвечиваеться картинка eur_on.png, если валюта не активна, то eur.png 2. и еще вот в этой штуке {$_course.code} зашиты коды валют RUR, USD, EUR...., а хочется таблице и в описании объекта использовать р. , $, €, Как это сделать. Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: June 25, 2015 Здравствуйте! С мультивалютностью все получилось отлично. А как бы еще ее прикрутить к поиску по цене "от и до". А то какую валюту не выбираешь ищет все равно по долларам. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: June 25, 2015 В принципе, если передать из формы поиска параметр currency_id с идешкой нужной валюты, то мин и макс цена, отправленные с формы, будут учитывать эту валюту и искать объявки которые, при конвертации, попадают нужный диапазон. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: June 29, 2015 В принципе, если передать из формы поиска параметр currency_id с идешкой нужной валюты, то мин и макс цена, отправленные с формы, будут учитывать эту валюту и искать объявки которые, при конвертации, попадают нужный диаgfpjy/ Спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Kongrig 0 Жалоба Опубликовано: July 28, 2015 Господа, а что делать ламеру... или только через фрилансера? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: July 28, 2015 Господа, а что делать ламеру... или только через фрилансера?Решения на форуме так или иначе требуют писать немного кода, если есть описание этого кода.Если же желания с кодом не возиться, тогда лучше написать на фрилансе. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: August 4, 2016 Здравствуйте! Перестал работать переключатель. Пишет Warning: Division by zero in /var/www/u0032031/data/www/vesta-yalta.ru/cache/compile/821e2c2d537c9f283f89859833d6253573206f74.file.realty_grid_list.tpl.php on line 168 0. Я понимаю, что где-то деление на ноль, но где? Может подскажете чайнику. Сайт vesta-yalta.ru Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: August 4, 2016 3 минуты назад, Nikvz сказал: Здравствуйте! Перестал работать переключатель. Пишет Warning: Division by zero in /var/www/u0032031/data/www/vesta-yalta.ru/cache/compile/821e2c2d537c9f283f89859833d6253573206f74.file.realty_grid_list.tpl.php on line 168 0. Я понимаю, что где-то деление на ноль, но где? Может подскажете чайнику. Сайт vesta-yalta.ru Проверьте обновлена ли система у вас. Зашел на сайт к вам, ошибки не вижу. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: August 4, 2016 Всё обновлено, цены в рублях показывает, в тех объявлениях, где цена была в долларах, теперь нули, при нажатии на USD или EUR ошибка Warning: Division by zero in /var/www/u0032031/data/www/vesta-yalta.ru/cache/compile/821e2c2d537c9f283f89859833d6253573206f74.file.realty_grid_list.tpl.php on line 1680 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: August 4, 2016 1 минуту назад, Nikvz сказал: Всё обновлено, цены в рублях показывает, в тех объявлениях, где цена была в долларах, теперь нули, при нажатии на USD или EUR ошибка Warning: Division by zero in /var/www/u0032031/data/www/vesta-yalta.ru/cache/compile/821e2c2d537c9f283f89859833d6253573206f74.file.realty_grid_list.tpl.php on line 1680 Скриншот покажите и адрес станицы где делаете скриншот. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: August 4, 2016 Страница главная vesta-yalta.ru Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: August 5, 2016 Зашел к вам на сайт, нажимаю, все красиво переключается. Проверьте у вас кэш? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nikvz 0 Жалоба Опубликовано: August 5, 2016 Заработало, кеш я чистил, так что видимо просто был такой глюк. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: November 13, 2016 Немного поменял исполнение для проблемы в старте темы. 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; } 2 Chernetskiy и Realtor reacted to this Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Chernetskiy 469 Жалоба Опубликовано: November 13, 2016 а по п.6 красоту в какой файл добавлять? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах