-
Публикации
4036 -
Зарегистрирован
-
Посещение
-
Days Won
269
Все публикации пользователя abushyk
-
я нашел только один костыль и тот кривой. в /js/jquery.lightbox-0.5.js в строке 223: $('#lightbox-container-image-data-box').css({ width: intImageWidth }); использовать не intImageWidth а intWidth Это исправит на реалспейс, но не подойдет для той же агенси, где именно эта правка кривит окошко текста. имхо тут нужно копать в стили, так как из-за них происходит схлопывание отбивок, котороее не дает блочку потянуться на всю ширь. но где именно загвоздка, я пока не вижу.
-
не так. разделение полей профиля может указываться по группам. но, пока пользователь не зарегистрируется (иными словами пока он не получит какую-то группу), он будет видеть из модели user только те поля, которые доступны без ограничения по группам. После регистрации в его профиле будут только поля присущие группе в которой он находится.
-
Да. Только с ним имеет смысл еще указывать настройку Дополнительно - Параметры сравнения дублирующихся объявлений в виде city_id,topic_id,price (системные имена полей по которым будут сравниваться объявки на дубли через запятую)
-
Учтите, что установка этих настроек не формирует нужные урлы на уже существующих объявлениях а только говорит как их формировать для новых.
-
А что за пользовательские поля? где они настраиваются? Редактор форм - Сетки?
-
а у меня ваши панорамы открываются на ура.
-
Да, умолчательная сортировка по дате. Вы можете изменить дефолтную установив в Настройки - Дополнительно - apps.realtygrid.sorts свое значение вида параметр_сортировки|направление Параметр сортировки может быть - id=по идешке, type=по имени типа, street=по имени улицы, square_all=по значению поля square_all, floor=по значению поля floor, district=по имени района, metro=по имени метро, city=по имени города, date_added=по дате, price=по цене Направление сортировки - acs=по возрастанию, desc=по спаданию Сортировка указывается только одна. Влепить что-то типа price|asc square_all|desc одновременно не прокатит
-
2. в целом да, но это достигается использованием тарифов и приложения Биллинг. 3. не припомню готовых решений. отсекатель по дублям на основании данных объекта - да. а вот поиск - нет.
-
1. да. 1.1. добавляется поле строковое с системным именем, например, realty_name 1.2. Настройки - Дополнительно - Формат строки заголовка вписываете {realty_name} 1.3. Настройки - SEO-Оптимизация - Набор полей нестандартных алиасов вписываете realty_name 1.4. Настройки - SEO-Оптимизация - Разрешить установку нестандартных алиасов ставится 1 или отмечается галочка После этого профит или, при отсутствии грамотного контентщика или сеошника, получаете симнительной ценности урлы и заголовки. Для вывода этих же заголовков в списках нужно будет подкорректировать шаблоны списков.
-
тут проблема скорее всего в том, что вы грузите панораму в таб, который на момент загрузки закрыт. а значит не имеет физических размеров. а карты, гугловские 100%, практически никогда не способны загрузиться в "безразмерный" блок. Например если вы сразу залетите в блок панорамки открытый http://realizator.info/chastnoe-imuschestvo/prodaja-kvartir/appartamenti/kiselevo-zalogovoe-imuschestvo/#tab3 то она сарзу должна загрузиться. а если только перешли в ее таб, тогда нужно ресайзить окно, что бы страница персчитала размеры и догрузила панормаку в уже нормальный контейнер. Вариантов решения 2. 1. грузить панораму в открытый блок 2. грузить панораму в блок с абсолбтным позиционированием и четкими размерами в пикселях, но при загрузке размещенный за краем страницы а по клику открывашки таба, брать этот блок и перемещать в контейнер таба.
-
Для гугля 1. Блок под панку <div id="panoview" style="width:100%;height:300px;"></div> 2. Коры для точки панорамы {if $data.geo.value.lat!='' && $data.geo.value.lng!=''} <script> var pobj_lat={$data.geo.value.lat}; var pobj_lng={$data.geo.value.lng}; </script> {else} <script> var pobj_lat=''; var pobj_lng=''; </script> {/if} 3. Скрипт запуска панорамки {literal} <script> /*объект-обработчик*/ var PanoRunner={}; PanoRunner.panorama=null; PanoRunner.initialize=function(pobj_lat, pobj_lng) { var panoposition = {lat: pobj_lat, lng: pobj_lng}; var sv = new google.maps.StreetViewService(); PanoRunner.panorama = new google.maps.StreetViewPanorama(document.getElementById('panoview')); sv.getPanorama({location: panoposition, radius: 50}, PanoRunner.processSVData); }; PanoRunner.processSVData=function(data, status){ if(status === google.maps.StreetViewStatus.OK){ PanoRunner.panorama.setPano(data.location.pano); PanoRunner.panorama.setPov({ heading: 270, pitch: 0 }); PanoRunner.panorama.setVisible(true); }else{ /*стирание блока под панорамку, если облом*/ $('#panoview').remove(); } } $(document).ready(function(){ if(pobj_lat!='' && pobj_lng!=''){ /*запуск подключателя панорамы*/ PanoRunner.initialize(pobj_lat, pobj_lng); }else{ /*стирание блока под панорамку, если координат нет*/ $('#panoview').remove(); } }); </script> {/literal}
-
1. В модель пользователя user добавляется поле district_id типа select_by_query по таблице re_district (такой же, по которой выбираются районы для объектов) 2. В контроллере шаблона для авторизированного пользователя дополнительно получить значение "его" района и закинуть в шаблон в виде переменной. Для неавторизированного закидывать это значение нулевым. 3. В шаблоне карточки выделить вывод телефонов собственника в отдельный блок, вывод ккоторого обернуть условием что "район данного пользователя" не равен нулю и равен "район просматриваемого объявления {$data_shared.district_id.value}" Самый сложный из всего этого наверное момент номер 2.
-
иногда имеет смысл не дополнять условиями скрытия поля в автоматическом выводе данных в карточке, а расписать свой вариант вывода, который будет выводить только то, что нужно. особенно это касается устоявшихся сайтов, в которых добавление новых полей в модель не носит ежечасного характера. Для добавления ограничений в автовывод в realty_view.tpl нужно найти строки {foreach from=$hvd_tabbed item=tab key=tabname} {if $tab|count>0} {foreach from=$tab item=data_item} .... после них идут условия "непоказывания" {if $data_item.type eq "primary_key" or $data_item.value eq "0" ...... } сразу после этой строки нужно добавить {elseif $data_item.name eq "системное_имя_поля_1" || $data_item.name eq "системное_имя_поля_2" || $data_item.name eq "системное_имя_поля_3"} где перечислить небходимые поля. Например для Город и Метро будет {elseif $data_item.name eq "city_id" || $data_item.name eq "metro_id"}
-
Все верно. Некоторый функционал изначально доступен только админу из соображений безопасности, так как когда он появлялся, возможности входа в админку у неадминов еще не было.
-
это стандартные правила, которые устанавливаются в robots.txt при установке движка. обычно по этим адресам торчат глухие формы, индексация которых ведет к заспамлению маловразумительными словами и словосочетаниями.
- 49 ответов
-
- генерация
- подключение
- (и ещё %d)
-
если они есть, значит были. при ручном вводе сторонние данные сами не появятся, такое возможно при парсингах и згарузках из эксель, где сложнее контролировать робота. если проблема не упирается именно в идешки, то не стоит с ними морочиться. если нужно как-от идентифицировать объявки, то можно добавить поле с системным именем uniq_id - оно обычно используется для хранения внешней идешки. например для загрузок с фидов там хранится идешка состороннего сайта для сохранения связи (но если вы не загружаете автоматими ничего со сторонних фидв, то оно больше нигде не будет выплывать). но прелесть этого поля в том, что админка умеет искать по нему. а вы можете хранить там какие-то своий фирменные артикульные коды, по которым легко идентифицировать сайтовый объект.
-
оптимально в файл стилей шаблона, что бы они были доступны на всем протяжении страниц. для реалии это либо базовый /template/frontend/realia/css/realia-blue.css либо /template/frontend/realia/css/styles.css (если такой есть)
-
если у вас есть, что показать людям на этих страницах полезное, то имеет смысл снять ограничение с них в роботс. если же там просто форма, то можно оставить с ограничением.
- 49 ответов
-
- генерация
- подключение
- (и ещё %d)
-
возможно я не до конца понял о чем речь, но если взглянуть сюда https://www.sitebill.ru/s/topic/2469-вывод-на-основную-страницу-названия-объекта/?do=findComment&comment=28508 то тут видно, что у вас была не одна цена, а несколько в зависимости от комнатности и именно они выводились, а не та цена которая в "Цена". Вы могли выключить или удалить колонки с этими данными . Но есть одна особенность. Список выбирает данные в обход модели, что бы хоть как-то разгрузить тяжелую операцию выбора. Поэтому он не знает, что вы выключили эту колонку. В карточке он поймет это, но в списке и дальше будет выводить эти данные. Если же колонку удалить, то, в целях не дать совершить непоправимое, код удаляет только колонку из модели, не трогая колонку в БД, что бы если "ой мамочки я передумал", можно было безболезненно вернуться не потеряв данные. Но из-за этого же в списке эти данные все равно будут, так как "Список выбирает данные в обход модели". Т.е. после удаления стоит сносить неиспользуемые колонки из БД, а при деактивации колонки, вносить коррективы в шаблоне, что бы исключить их использование. ПС. Хотя судя по виду списка на сайте, я вижу, что вы уже и сами до этого додумались.
-
Немного поменял исполнение для проблемы в старте темы. 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; }