Leaderboard


Popular Content

Showing content with the highest reputation on 04/04/15 in all areas

  1. 1 point
    abushyk

    Переключатель валют.

    Делаем 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. 1 point
    TopRaN

    Проблемы с моим шаблоном

    У вас шаблон не из нашей системы. Согласно правилам вам в этот раздел http://www.etown.ru/s/forum/21-%D1%84%D1%80%D0%B8%D0%BB%D0%B0%D0%BD%D1%81/