pwnz22

mapviewer+модальное окно

Recommended Posts

Сделал модальное окно для mapviwer, после выбора области нужно чтобы перешло в обычный вид и с поиском внизу) но кнопка "Искать" не реагирует) а если подключать main.tpl вместо drawregion.tpl выдает ошибку  подскажите как исправить?

<a href="#example" class="openModal">Открыть модальное окно</a><div id="example" class="modal_window">		<div>			{include file='apps/mapviewer/site/template/drawregion.tpl'}			<a href="#close" title="Закрыть"></a>		</div></div>

модалку внес сразу в advanced_search_form.tpl

 

нужно еще результаты в виде grid_list вывести) 

 

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


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

Вы включили в модалку только карту. А там смысл такой, что рисуется на карте. Но кроме карты на странице в шаблоне есть еще форма поиска с выбором девиации нарисованного контура, и доппараметрами. Так вот поиск происходит таким образом:

1. вы рисуете на карте

2. нажимаете искать

3. после этого координаты собираются с карты и превращаются в строку, эта строка заносится в скрытое поле на упомянутой форме и уже эта форма запускается на отправку.

 

Так как формы на модалке нет, то естественно submit-событие срабатывает в холостую.

Другими словами вам нужно как минимум подставить в шаблон в модалке пусть даже скрытую форму с идешкой searchform и textarea в ней с name=crds. Экшен формы должен направлять на {$estate_folder}/mapviewer/search/

Можете увидеть эту форму в /apps/mapviewer/site/template/drawregion.tpl

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


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

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

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


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

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

можете описать данный способ?) и еще вопрос связать карту с главным поиском возможно? 

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


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

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

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


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

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

Что делать теперь?) как доделывать (( без результатов в список приложение неочем)

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


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

ну прям таки не о чем. это же "поиск по карте", а не "вывод списка после поиска на карте")))

давайте мыслить. сделали мы поиск по карте. в результате стотыщ позиций в ответ. ну маркеры мы нарисовали. как теперь будем рисовать сетку на стотыщ объектов?

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


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

ну прям таки не о чем. это же "поиск по карте", а не "вывод списка после поиска на карте")))

давайте мыслить. сделали мы поиск по карте. в результате стотыщ позиций в ответ. ну маркеры мы нарисовали. как теперь будем рисовать сетку на стотыщ объектов?

ну например можно как анонс ограниченное кол-во) а вообще объяв столько врядли будет) 

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


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

Что-то я сам запутался и вас запутал. Нормально там получаются данные, в формате эквивалентном как в обычной сетке.

Другими словами вам нужно вмешаться в 

/apps/mapviewer/js/search.js в функции makeSearch()

Там, с места success: function(json){ стартует обработка принятых данных.

Вам нужно оставить все, что есть в условии

if(typeof json == 'object'){    ....}

так как там наносятся метки на карту, а в конце того, что внутри этого условия сделать свой цикл, который пройдется по переменной json и средствами jquery создаст сетку из этих данных, которую потом сделает appendTo() к некоторому элементу на странице, который будет расположен в том месте, где нужно вывести сетку.

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


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

Что-то я сам запутался и вас запутал. Нормально там получаются данные, в формате эквивалентном как в обычной сетке.

Другими словами вам нужно вмешаться в 

/apps/mapviewer/js/search.js в функции makeSearch()

Там, с места success: function(json){ стартует обработка принятых данных.

Вам нужно оставить все, что есть в условии

if(typeof json == 'object'){    ....}

так как там наносятся метки на карту, а в конце того, что внутри этого условия сделать свой цикл, который пройдется по переменной json и средствами jquery создаст сетку из этих данных, которую потом сделает appendTo() к некоторому элементу на странице, который будет расположен в том месте, где нужно вывести сетку.

Что-то у меня с циклом ничего не выходит) есть где нибудь пример?)

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


Ссылка на сообщение
Поделиться на других сайтах
var data_place=$('<table></table>'); //создаем динамическое вместилище в виде таблицыfor(var i = 0, l = json.length; i < l; i++) {  var tr=$('<tr><td>'+json[i].id+'</td><td>'+json[i].type_sh+'</td><td>'+json[i].price+'</td></tr>'); // в цикле формируем элементы строк таблицы  data_place.append(tr); // добавляем каждую во вместилище}$('#data_place').html(''); // очищаем элемент размещения табличных данных на странице от старых данных$('#data_place').append(data_place); // размещаем свежую таблицу на странице

Элемент id="data_place" должен быть добавлен на страницу шаблона search.tpl что бы было куда выводить данные.

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


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

Подкажите как изображения выводить) 

+json[i].img[0].preview+

так делаю) не получается....

 

 

UPD. К сожалению такой вывод сложно сверстать так как хотелось бы) может есть способ вывести данные как на realty_grid_list.tpl? т.е как передать инфу таким образом?

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


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

Хорошо, идем далее.

 

1

/apps/mapviewer/admin/admin.php

функция __construct

в самом конце ее добавляем новую конфигину

if ( !$config_admin->check_config_item('apps.mapviewer.add_grid_html') ) {   $config_admin->addParamToConfig('apps.mapviewer.add_grid_html','0','Добавить HTML разметку для объектов на карте',1);}

2

/apps/mapviewer/admin/admin.php

функция ajax

подсекция оператора switch с меткой collect_data

После строки

$res = $grid_constructor->get_sitebill_adv_core( $params, false, false, false, false );

добавляем вставку

if(1===intval($this->getConfigValue('apps.mapviewer.add_grid_html'))){  global $smarty;  if(file_exists(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/apps/mapviewer/site/template/realty_grid_html.tpl')){    $tpl=SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/apps/mapviewer/site/template/realty_grid_html.tpl';  }else{    $tpl=SITEBILL_DOCUMENT_ROOT.'/apps/mapviewer/site/template/realty_grid_html.tpl';  }       foreach($res['data'] as $k=>$v){    $smarty->assign('item', $v);    $res['data'][$k]['_html']=addslashes($smarty->fetch($tpl));  }}

3

В папку /apps/mapviewer/site/template добавляем файл с именем realty_grid_html.tpl и содержимым из этой пасты

 

Заходим в админку, в приложение MapViewer что бы новая настройка прописалась в конфиг.

После этого мы имеем настройку, при включении которой в данные объектов, выдаваемые на карту будет добавлен служебный элемент _html с содержимым анонсного блока для объекта. Данный элемент будет добавлен к каждому отдельному объекту. В контексте кода с циклом в скрипте, вы сможете аналогично выхватить их через json[i]._html

Это наша внутренняя часть.

 

Переходим к внешней.

 

4

/apps/mapviewer/js/search.js

функция makeSearch

 
Вместо того, что мы вставляли в посте ставим иной код
var am=$('#activemap_grid');if(am.length==1 && typeof json[0]._html !== 'undefined'){  var str='';  for(var i = 0, l = json.length; i < l; i++) {    var html = json[i]._html.replace(/\\'/g, '\'');    html = html.replace(/\\"/g, '"');    html = html.replace(/\\0/g, '\0');    html = html.replace(/\\\\/g, '\\');    str+=html;  }  $('#activemap_grid').html('');  $('#activemap_grid').html(str);}

идея такова. Первым делом мы ищем на странице элемент-вместилище с id="activemap_grid". В принципе это может быть как табличный, так и блочный элемент, но, что бы не усложнять, будем считать, что он блочный. При наличии такого элемента  наличии подэлемента _html в данных объявления (который будет отсутствовать, если мы например не включили добавленную выше настройку) мы в цикле обходим элементы, собираем их анонсный хтмл и упаковываем в строку. И готовую строку вставляем в наш объект-вместилище. Все практически аналогично предыдущему способу.

 

5.

Адаптация. Шаблон для realty_grid_html.tpl из моей пасты самый общий. Естественно мы захотим что-то поменять, добавить или удалить. Для этого делаем копию файла /apps/mapviewer/site/template/realty_grid_html.tpl в /template/frontend/шаблон/apps/mapviewer/site/template/realty_grid_html.tpl и упражняемся там как хотим.

 

6.

Естественно нам нужно добавить объект вместилище, куда выпадут все наши хтмл от объявлений. Это логичнее всего сделать в файл /apps/mapviewer/site/template/search.tpl или его локальную копию в шаблоне в виде вставки строки

<div id="activemap_grid"></div>

На него можно придать дополнительные свои классы, но ид у него должен остаться именно этот.

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


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

В /apps/mapviewer/site/template/search.tpl

это:

<div id="activemap_holder" style="position: relative;"><div id="activemap_loading"><span>LOADING...</span></div><div id="activemap" style="width: 100%; height: 500px;"></div></div>

блок карты

 

это:

<div id="main" class="searchonmap">...</div>

блок формы поиска.

 

Можно просто поменять их местами.

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


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

И последний штрих. Можно ли связать главный поиск с поиском карты? т.е. если выбрать с поиска параметры а дальше в модальном окне на карте выбрать область и после нажатия на поиск сразу же применился фильтр по заданным параметрам поиска в главном....

Если возможно просто скопировать поиск в главном в search.tpl

 

 

Может я где-то накосячил, но когда фильтруешь результаты поиска в заданной области и если выбрать в параметрах того что нет в этой области получается вечный "Loading..." а нужно чтобы написало "ничего не найдено..."

Изменено пользователем pwnz22

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


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

UPD. Хочу добавить строку "Всего найдено" нашел переменную {$_total_records} - но при добавлении в realty_grid_html.tpl  она пустая, как исправить?)

и еще одна проблемка) не срабатывает перевод по переменным в  realty_grid_html.tpl.

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


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

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

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

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

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

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

Войти

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

Войти сейчас