guzich 4 Жалоба Опубликовано: May 18, 2015 У меня для отображения на карте в шаблоне есть переменная<script>var realty_geo_data = {$grid_geodata};</script>каждый элемент массива содержит id, широту и долготуа мне нужен расширенный набор параметровПосмотрел на etown - там массив называется mapinfo ,и он содержит все необходимые данныеКак так, какое-то приложение не обновилось? Вроде в админке пишет что все обновлены Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: May 21, 2015 Что подразумевается под расширенным набором? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 Ну mapinfo на etown содержит помимо id, geo_lng и geo_lat еще следующие поляtopic_id, city, street, address и еще кучу всего , вот об этом речь Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: May 21, 2015 Ну mapinfo на etown содержит помимо id, geo_lng и geo_lat еще следующие поляtopic_id, city, street, address и еще кучу всего , вот об этом речьМожет я туплю, но где вы это на etown увидели? Возможно я не про тот код думаю, покажите скрин. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 https://www.dropbox.com/s/omu288mybox72sx/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202015-05-21%2011.17.58.png?dl=0 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 на главной вроде нету, а если на любой город кликнуть или еще куда где карта есть то там можно найти Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дмитрий Кондин 690 Жалоба Опубликовано: May 21, 2015 Вот кастомный метод сбора инфы этой private function collectMapInfoForCity($city_id){ $ata=array(); $DBC=DBC::getInstance(); $query='SELECT d.id, d.topic_id, c.name AS city, s.name AS street, d.number, d.geo_lat, d.geo_lng FROM '.DB_PREFIX.'_data d LEFT JOIN '.DB_PREFIX.'_city c USING(city_id) LEFT JOIN '.DB_PREFIX.'_street s USING(street_id) WHERE d.active=1 AND d.city_id=? ORDER BY d.date_added DESC LIMIT 100'; $stmt=$DBC->query($query, array($city_id)); if($stmt){ while($ar=$DBC->fetch($stmt)){ $data[]=$ar; /*if($ar['geo_lat']!='' && $ar['geo_lng']!=''){ $data[]=$ar; }*/ } } if(count($data)>0){ require_once(SITEBILL_DOCUMENT_ROOT.'/apps/system/lib/admin/structure/structure_manager.php'); $Structure_Manager = new Structure_Manager(); $category_structure = $Structure_Manager->loadCategoryStructure(); foreach($data as $k=>$d){ $temp=array(); $data[$k]['name']=SiteBill::iconv(SITE_ENCODING, 'utf-8', $d['name']); $data[$k]['city']=SiteBill::iconv(SITE_ENCODING, 'utf-8', $d['city']); $data[$k]['street']=SiteBill::iconv(SITE_ENCODING, 'utf-8', $d['street']); if($data[$k]['city']!=''){ $temp[]=$data[$k]['city']; if($data[$k]['street']!=''){ $temp[]=$data[$k]['street']; if($data[$k]['number']!=''){ $temp[]=$data[$k]['number']; } } } if(!empty($temp)){ $data[$k]['address']=implode(', ',$temp); } $data[$k]['hint']=$data[$k]['address']; $data[$k]['lat']=($d['geo_lat']!='' ? $d['geo_lat'] : ''); $data[$k]['lng']=($d['geo_lng']!='' ? $d['geo_lng'] : ''); if(1==$this->getConfigValue('apps.seo.level_enable')){ if($category_structure['catalog'][$d['topic_id']]['url']!=''){ $parent_category_url=$category_structure['catalog'][$d['topic_id']]['url'].'/'; }else{ $parent_category_url=''; } }else{ $parent_category_url=''; } if(1==$this->getConfigValue('apps.seo.data_alias_enable') && $d['translit_alias']!=''){ $href=$parent_category_url.$d['translit_alias']; }elseif(1==$this->getConfigValue('apps.seo.html_prefix_enable')){ $href=$parent_category_url.'realty'.$d['id'].'.html'; }else{ $href=$parent_category_url.'realty'.$d['id']; } $data[$k]['_href']=$href; } } //print_r($data); return $data; }Вызывать в main.php метод main() $map_info=$this->collectMapInfoForCity($city_info['city_id']);$this->template->assert('city_index_mapinfo', json_encode($map_info)); Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 А если речь идет не конкретно о странице города, а вообще о странице результатов поискаЧто делать в таком случае, писать кастомный метода для поиска?Может есть способ внутри main() в main.php получить доступ к массиву объявлений grid_items, тогда можно было бы сформировать нужный массив объектов для карты и передать его в шаблонНо я что-то не вижу такой возможности в main() вызывается grid_adv, который возвращает готовый html сетки, а операции с массивом найденных объялвений где-то в grid_constructor и sitebill_krascap проходят, а лезть туда не хотелось бы Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 и даже в этом случае так не совсем правильно ,ведь на странице города список объявлений уже выводится, то есть запрос к БД уже выполнялся, и вместо того чтобы использовать эти данные, запрос выполняется заново? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: May 21, 2015 В сетке возвращается не совсем хтмл сетки. Там есть массив grid_items который содержит данные в виде массива. Можно в самом шаблоне, прокрутив этот массив, собрать нужные данные и сформировать строку, например в виде js-массива и тут же в шаблоне активировать код, который по этой строке раскидает метки. Но тут будет ограничение, что будут доступны данные для позиций только с этой страницы. Если нужно например собрать набор без учета страницы, то без доп. запроса не обойдется. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: May 21, 2015 Тут еще возникает вопрос, как будут использоваться эти параметры дополнительные. Если они нужны для каки-то манипуляций в всплывающем окошке, тогда логичнее работать с файлом realty_on_map, который генерирует это окошко. Или вам нужны они, что бы что-то в скрипте делать? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
guzich 4 Жалоба Опубликовано: May 21, 2015 Пожалуй, Вы правы. Конечно , в случае постраничного вывода результатов поиска кол-во объявлений на старнице неболшое и можно в принципе в шаблоне прогнать их. А если нужно будет большое кол-во выводить для каких=то целей , то в любом придется кастомный метод писатьПросто хотелось как-то покрасивее сделатьА про realty_on_map не в курсе.... но вроде там ни при чем, не знаю на какой странице он используется, но в результатах поиска все на realty_grid.tpl Спасибо. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
abushyk 694 Жалоба Опубликовано: May 21, 2015 realty_grid.tpl - это шаблон именно страницы списка. Он может, и часто так бывает, включать в себя код определяющий вывод карты. Это как бы шаблон верхнего уровня, который мы явно видим при вызове. А еще есть некоторые мелкие шаблоны, которые генерируют кусочки разметки не вызываемые напрямую - например какая-то форма или блок всплывающего окошка над маркером на карте. Их не вызывают прямо, а внутри каких-то внутренних методов, которые поставляют данные для того же списка. Вывод большого или малого количества в принципе не особо влияет. Больше влияет именно наличие нужных данных в конкретный момент. Но если учесть, что поисковики данные на картах не особо читают, то такие вызовы можно делать асинхронно по мере потребности. В принципе их можно даже кешировать, так как у них отпадет два параметра (страница, сортировка) и вариативность их значительно снизится. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах