guzich

Геоданные на странице списка объявлений

Recommended Posts

У меня для отображения на карте в шаблоне есть переменная

<script>var realty_geo_data = {$grid_geodata};</script>

каждый элемент массива содержит id, широту и долготу

а мне нужен расширенный набор параметров

Посмотрел на etown - там массив называется mapinfo ,и он содержит все необходимые данные

Как так, какое-то приложение не обновилось? Вроде в админке пишет что все обновлены

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну mapinfo на etown содержит помимо id, geo_lng и geo_lat еще следующие поля

topic_id, city, street, address и еще кучу всего , вот об этом речь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну mapinfo на etown содержит помимо id, geo_lng и geo_lat еще следующие поля

topic_id, city, street, address и еще кучу всего , вот об этом речь

Может я туплю, но где вы это на etown увидели? 

Возможно я не про тот код думаю, покажите скрин.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

на главной вроде нету, а если на любой город кликнуть или еще куда где карта есть то там можно найти

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот кастомный метод сбора инфы этой

	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));

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если речь идет не конкретно о странице города, а вообще о странице результатов поиска

Что делать в таком случае, писать кастомный метода для поиска?

Может есть способ внутри main() в main.php получить доступ к массиву объявлений grid_items, тогда можно было бы сформировать нужный массив объектов для карты и передать его в шаблон

Но я что-то не вижу такой возможности в main() вызывается grid_adv, который возвращает готовый html сетки, а операции с массивом найденных объялвений где-то в grid_constructor и sitebill_krascap проходят, а лезть туда не хотелось бы

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

и даже в этом случае так не совсем правильно ,ведь на странице города список объявлений уже выводится, то есть запрос к БД уже выполнялся, и вместо того чтобы использовать эти данные, запрос выполняется заново?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В сетке возвращается не совсем хтмл сетки. Там есть массив grid_items который содержит данные в виде массива. Можно в самом шаблоне, прокрутив этот массив, собрать нужные данные и сформировать строку, например в виде js-массива и тут же в шаблоне активировать код, который по этой строке раскидает метки. Но тут будет ограничение, что будут доступны данные для позиций только с этой страницы. Если нужно например собрать набор без учета страницы, то без доп. запроса не обойдется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут еще возникает вопрос, как будут использоваться эти параметры дополнительные. Если они нужны для каки-то манипуляций в всплывающем окошке, тогда логичнее работать с файлом realty_on_map, который генерирует это окошко. Или вам нужны они, что бы что-то в скрипте делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуй, Вы правы. Конечно , в случае постраничного вывода результатов поиска кол-во объявлений на старнице неболшое и можно в принципе в шаблоне прогнать их. А если нужно будет большое кол-во выводить для каких=то целей , то в любом  придется кастомный метод писать

Просто хотелось как-то покрасивее сделать

А про realty_on_map не в курсе.... но вроде там ни при чем, не знаю на какой странице он используется, но в результатах поиска все на realty_grid.tpl

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

realty_grid.tpl - это шаблон именно страницы списка. Он может, и часто так бывает, включать в себя  код определяющий вывод карты. Это как бы шаблон верхнего уровня, который мы явно видим при вызове. 

А еще есть некоторые мелкие шаблоны, которые генерируют кусочки разметки не вызываемые напрямую - например какая-то форма или блок всплывающего окошка над маркером на карте. Их не вызывают прямо, а внутри каких-то внутренних методов, которые поставляют данные для того же списка.

 

Вывод большого или малого количества в принципе не особо влияет. Больше влияет именно наличие нужных данных в конкретный момент. Но если учесть, что поисковики данные на картах не особо читают, то такие вызовы можно делать асинхронно по мере потребности. В принципе их можно даже кешировать, так как у них отпадет два параметра (страница, сортировка) и вариативность их значительно снизится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас