Сделал для себя какой мне нужно поиск/фильтр для InstantMaps в InstantCMS v1.9, стандартный фильтр InstantMaps отключил, чтобы они не мешали друг другу. Изменения вносятся в 2 файла.
В \templates\_default_\components\com_inmaps_map.tpl и \components\maps\frontend.php
Если кому интересно то порядок действий такой.
1. Файл \templates\_default_\components\com_inmaps_map.tpl
вверху после кода
вставляем форму поиска по нужным полям или характеристикам.
здесь у меня поиск по трём полям: название объекта, улица и такая характеристика как округ/район,
для себя можете сделать и другие, хоть описание объекта, мэтатеги, контакты и пр.и любые характеристики.
Вставляем:
2. Теперь переходим к файлу \www\components\maps\frontend.php
вверху после строчки
вставляем, дописываем нужные нам параметры поиска:
находим строчку
и после неё вставляем код:
и перед следующим разделом
вставляем Тут нужны пояснения.
В админке мапса мы задали характеристику "Округ" и привязали её ко всем объектам.
Тип характеристики указали Набор опций и в "возможные значения" перечислили все возможные округа, у нас это ЦАО, САО, ЗАО, ВАО, ЮАО.
Множественный выбор в фильтре отключили.
Соответственно у нас в админке теперь при добавлении/редактировании объектов появилась возможность прописать каждому объекту свой округ или даже несколько округов. Наведя курсор на этот фильтр в админке в "Характеристики объектов" мы увидим номер этого фильтра, его item_id=
у меня он 37, вот его мы и пропишем в нашем поиске.
То есть выше мы отключаем стандартный фильтр, если задали поиск по одной из характеристик фильтра и указываем номер фильтра и какая переменная за него у нас будет отвечать.
находим строчку:
и перед ней вставляем:
это мы добавляем в sql-код поиск в базе данных нужный полей.
теперь если объектов больше чем на одну страницу, нам нужно сформировать пангинацию,
поэтому после строчки
и перед строчкой вставляем код
наверняка этот код можно упростить, но я с регулярными выражениями не знаком.
И наконец для того чтобы передать в шаблон переменные,
перед строчкойвставляем код Не забываем перед внесением изменений сделать копии изменяемых файлов.
Таким образом по аналогии можно сделать любой поиск по полям объекта и его характеристикам.
Да, и не знаю нужно там для них использовать функции urlencode и urldecode...
А ещё, он работает только в какой-либо категории, на главной мапса работать не будет,
тут его или убрать с главной нужно или смотреть как задать чтобы работал и с главной,
этим пока не заморачивался.
Еще дополню данный фильтр/поиск.
Чтобы убрать поиск с главной мапса, так как там он не ищет, дописываем пару строк.
В файле \templates\_default_\components\com_inmaps_map.tpl
послевставляем строчку после строчки вставляем Всё. Быстрый поиск по объектам мапса готов.
Ищет по названию или части названия объекта/организации, по адресу(улице) или части названия улицы объекта и по округу/району объекта или иной характеристике, которую мы включим в поиск.
У меня это выглядит вот так:
над картой видна строчка с полями для поиска: с выпадающим списком значений(район), название организации, улицы, но можно сделать по любым полям (!!!), думаю для посетителей сайта такой быстрый поиск всегда удобней.
В \templates\_default_\components\com_inmaps_map.tpl и \components\maps\frontend.php
Если кому интересно то порядок действий такой.
1. Файл \templates\_default_\components\com_inmaps_map.tpl
вверху после кода
<!-- MAP --> <div id="map_wrapper">
здесь у меня поиск по трём полям: название объекта, улица и такая характеристика как округ/район,
для себя можете сделать и другие, хоть описание объекта, мэтатеги, контакты и пр.и любые характеристики.
Вставляем:
<form action="/maps/{$root_cat.seolink}" method="post"> <table cellpadding="2" cellspacing="0" width="100%"> <tbody><tr> <td style="padding-top:8px;"><strong>Район:</strong></td> <td> <select name="srch_rayon"> <option {if $srch_rayon == '(все)'} selected="selected" {/if} value="">(все)</option> <option {if $srch_rayon == 'ЦАО'} selected="selected" {/if} value="ЦАО">ЦАО</option> <option {if $srch_rayon == 'ЗАО'} selected="selected" {/if} value="ЗАО">ЗАО</option> <option {if $srch_rayon == 'САО'} selected="selected" {/if} value="САО">САО</option> <option {if $srch_rayon == 'ЮАО'} selected="selected" {/if} value="ЮАО">ЮАО</option> <option {if $srch_rayon == 'ВАО'} selected="selected" {/if} value="ВАО">ВАО</option> </select> </td> <td style="padding-top:8px;"><strong>Название организации:</strong></td> <td><input type="text" name="srch_name" value="{$srch_name}" /></td> <td style="padding-top:8px;"><strong>Адрес(улица):</strong></td> <td><input type="text" name="srch_street" value="{$srch_street}" /></td> <td> <input value="Найти" type="submit"></td> </tr></tbody></table> </form>
вверху после строчки
//получаем входные параметры
//получаем данные с формы поиска обьекта if(!$srch_rayon) $srch_rayon = $inCore->request('srch_rayon', 'str', ''); // округ if(!$srch_name) $srch_name = $inCore->request('srch_name', 'str', ''); // название объекта //$srch_name = urldecode($srch_name); if(!$srch_street) $srch_street = $inCore->request('srch_street', 'str', ''); // адрес: улица //$srch_street = urldecode($srch_street);
// ------- получаем значения фильтров -----------------
if($srch_rayon) $model->whereCharIs(37, $srch_rayon); else {
//получаем хар-ки категории
}
В админке мапса мы задали характеристику "Округ" и привязали её ко всем объектам.
Тип характеристики указали Набор опций и в "возможные значения" перечислили все возможные округа, у нас это ЦАО, САО, ЗАО, ВАО, ЮАО.
Множественный выбор в фильтре отключили.
Соответственно у нас в админке теперь при добавлении/редактировании объектов появилась возможность прописать каждому объекту свой округ или даже несколько округов. Наведя курсор на этот фильтр в админке в "Характеристики объектов" мы увидим номер этого фильтра, его item_id=
у меня он 37, вот его мы и пропишем в нашем поиске.
То есть выше мы отключаем стандартный фильтр, если задали поиск по одной из характеристик фильтра и указываем номер фильтра и какая переменная за него у нас будет отвечать.
находим строчку:
$model->where('i.published=1');
if($srch_name) $model->where('i.title like \'%'.$srch_name.'%\''); // найти имя объекта if($srch_street) $model->where('m.addr_street like \'%'.$srch_street.'%\''); // найти улицу объекта
теперь если объектов больше чем на одну страницу, нам нужно сформировать пангинацию,
поэтому после строчки
$pagebar = cmsPage::getPagebar($total, $page, $perpage, $pages_url);
if( ($srch_rayon && $srch_name) || ($srch_rayon && $srch_street)) { $pages_url .= '&srch_rayon=' . urlencode($srch_rayon); }
И наконец для того чтобы передать в шаблон переменные,
перед строчкой
$smarty->display($root_cat['tpl']);
$smarty->assign('srch_name', $srch_name); $smarty->assign('srch_street', $srch_street); $smarty->assign('srch_rayon', $srch_rayon);
Таким образом по аналогии можно сделать любой поиск по полям объекта и его характеристикам.
Да, и не знаю нужно там для них использовать функции urlencode и urldecode...
А ещё, он работает только в какой-либо категории, на главной мапса работать не будет,
тут его или убрать с главной нужно или смотреть как задать чтобы работал и с главной,
этим пока не заморачивался.
Еще дополню данный фильтр/поиск.
Чтобы убрать поиск с главной мапса, так как там он не ищет, дописываем пару строк.
В файле \templates\_default_\components\com_inmaps_map.tpl
после
<!-- MAP --> <div id="map_wrapper">
{if $root_cat.seolink !== ''}
</form>
{/if}
Ищет по названию или части названия объекта/организации, по адресу(улице) или части названия улицы объекта и по округу/району объекта или иной характеристике, которую мы включим в поиск.
У меня это выглядит вот так:
над картой видна строчка с полями для поиска: с выпадающим списком значений(район), название организации, улицы, но можно сделать по любым полям (!!!), думаю для посетителей сайта такой быстрый поиск всегда удобней.
Реклама #
Raiden 8 лет назад #