Делимся, кому не жалко, ссылками на свои сайты на двоечке.
Я вот никак не могу родить на стандартных типах контента афишу… Подсмотреть бы у кого…
Пока что на дефолтном шаблоне, играюсь с функционалом, в основном работа идет над доской объявлений
Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.
toppor.ru/
Пока что на дефолтном шаблоне, играюсь с функционалом, в основном работа идет над доской объявлений
Топпорняк, с айфона вид гаувно.
Спс, дизайн пока не трогал, мобильную версию буду чуть позже пилить. Не дезигнер я… а вот кодить любо — после opencart'a такая красота с MVC
Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.
В принципе, оно даже работает. Иногда. Ща есть фильтрация по городам/регионам, но стандартный виджет не радует ни разу — конечно, удобный, но страшненький какой-то… да и поломал я его чутка…
Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.
В принципе, оно даже работает. Иногда. Ща есть фильтрация по городам/регионам, но стандартный виджет не радует ни разу — конечно, удобный, но страшненький какой-то… да и поломал я его чутка...
Захожу в board, нажимаю Город Выбрать, открывается модальное окно с одной кнопкой Выбрать. Тишина.
Захожу в Поиск, копирую туда Воронеж, жму найти — Ничего не найдено.
Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.
Немного поправил доску — теперь работает фильтр по городам и регионам. С поисковиком немного хуже — по сути, в бд хранятся только индексы городов, так что найти их ооочень непросто таким образом. Другой вопрос, что можно засовывать название города, скажем, в облако тегов — это решит сразу несколько вопросов. Но мне как-то без необходимости пока)
Вот теперь работает! Поделишься фильтром?Немного поправил доску
Что, кроме топора, сайтов на двойке нет?)
пока не вижу смысла сырой выкладывать — мне осталось только фильтр этот внедрить и можно будет показывать.
1. Стандартный фильтр по городам (ну который из коробки). В нем произошли некоторые изменения:
-Кнопк "Выбрать" больше не прячется, если выбран хотя бы регион
-Если выбран регион, но не выбран город, то возвращать id не города, но региона (соответственно, в поле фильтра меняем id поля с citiy на region)
Изменения здесь:
if (id != 0 && child_list_id=='cities') { $('.buttons', geo_window).show(); }
if(id==0){ var list = $('#geo_window form select[name=regions]'); var id = list.val(); $('.city-id', widget).attr('name','region'); }
var icms = icms || {}; icms.geo = (function ($) { //====================================================================// this.changeParent = function(list, child_list_id) { var geo_window = $('#geo_window'); var geo_form = $('form', geo_window); var id = $(list).val(); console.log(id); var child_list = $('select[name='+child_list_id+']', geo_form); if (id == 0 && child_list_id=='regions') { child_list.parent('.list').hide(); if (child_list_id=='regions'){ $('select[name=cities]', geo_form).parent('.list').hide(); } $('.buttons', geo_window).hide(); return false; } if (id != 0 && child_list_id=='cities') { $('.buttons', geo_window).show(); } var url = geo_form.data( 'items-url' ); $.post(url, {type: child_list_id, parent_id: id}, function(result){ if (result.error) { return false; } child_list.html(''); for(var item_id in result.items){ var item_name = result.items[item_id]; child_list.append( '<option value="'+ item_id +'">' + item_name +'</option>' ); } child_list.parent('.list').show(); if (child_list_id != 'cities'){ icms.geo.changeParent(child_list, 'cities'); } }, 'json'); } //====================================================================// this.changeCity = function(list){ var geo_window = $('#geo_window'); var geo_form = $('form', geo_window); var id = $(list).val(); } //====================================================================// this.selectCity = function(target_id){ var list = $('#geo_window form select[name=cities]'); var id = list.val(); if(id==0){ var list = $('#geo_window form select[name=regions]'); var id = list.val(); $('.city-id', widget).attr('name','region'); } var name = $('option:selected', list).html(); if (!id){ return false; } var widget = $('#geo-widget-'+target_id); console.log(id); $('.city-id', widget).val(id); $('.city-name', widget).html(name).show(); icms.modal.close(); } //====================================================================// return this; }).call(icms.geo || {},jQuery);
3. Для того, чтоб поле региона заполнялось, написал простенькую функцию вычисления региона по городу. Возможно, зря, но закинул ее в core.php.
После строки
$item = $this->model->addContentItem($ctype, $item, $fields);
//Регион для объявлений if($item['city']){ $region=cmsCore::getRegion($item['city']); 'region' => $region )); }
public static function getRegion($id){ $sql="SELECT `region_id` FROM `cms_geo_cities` WHERE `id`='$id'"; $inDB = cmsDatabase::getInstance(); $sql=$inDB->query($sql); return $sql['region_id']; }
Где и как вывести кнопку в фильтр?
Можно измененные файлы архивчиком получить?
Да там, по сути, 2 файлика. Один я привел, второй пока не безопасен — уж извини, в открытый доступ не кину, пока не добью (для своих нужд видоизменял добавление объявления, там ща все плохо. Если скажешь, где можно почитать про оформление дополнений к инстанту — с уовольствием запакую).
Сделал изменения в файлах.
Где и как вывести кнопку в фильтр?
Можно измененные файлы архивчиком получить?
Вывести в фильтр. Есть 3 способа. Простой (Читерский), умный и обычный. Обычный — добавить в БД запись о фильтре. Умный — найти типы полейй, разрешенных для фильтрации и добавить туда город. Читерский (как я делал).
1. Создаешь поле для фильтра. Любое
2. Открываешь исходный код страницы (в хроме, например, отладчик со скрина)
3. Меняешь у любого поля value на city
4. Сохраняем. Профит! Естественно, поле должно "отображать в фильтре". Однако, есть нюанс. Для отображения в списке надо брать значения из БД. Т.е., если хочешь, скажем, не только фильтровать контент по городу, но и выводить город для каждого элемента контента, то тебе потребуется что-то вроде
if($field['name']=='city'){ echo cmsCore::getCity($item['city']); }
public static function getCity($id){ $sql="SELECT `name` FROM `cms_geo_cities` WHERE `id`='$id'"; $inDB = cmsDatabase::getInstance(); $sql=$inDB->query($sql); return $sql['name']; }
Вообще, решение не самое красивое, но пока подробной документации нет, будем делать чтоб ходя бы работало
Вдруг понадобится. geo.widget.tpl (У меня всего одна страна, поэтому смысла ее выбирать не вижу — здесь, собственно, только выбор региона оставлен)
<div id="geo_window"> <div class="wrapper container" style="padding:10px 15px"> <div id="sizecity" style="width:200px;height: 100px"></div> <form data-items-url="<?php echo $this->href_to('get_items'); ?>"> <div class="list" style="display:none" > <?php echo html_select('countries', $countries, 3159, array('onchange'=>"icms.geo.changeParent(this, 'regions')", 'rel'=>'regions','id'=>'country_main')); ?> </div> <script type="text/javascript"> $(document).ready(function (){ var obj=$('#country_main'); icms.geo.changeParent(obj, 'regions'); $("#sizecity").css({"display":"none"});//после отключения отрисованного окна со страной стал грустить размер окошка - не пересчитывается и все тут. как всегда, решение топорное, зато рабочее }); </script> <div class="list"> <?php echo html_select('regions', $regions, $region_id, array('onchange'=>"icms.geo.changeParent(this, 'cities')", 'rel'=>'cities')); ?> </div> <div class="list" <?php if (!$city_id){?>style="display:none"<?php } ?>> <?php echo html_select('cities', $cities, $city_id, array('onchange'=>"icms.geo.changeCity(this)")); ?> </div> </form> <div class="buttons" <?php if (!$city_id){?>style="display:none"<?php } ?>> <?php echo html_button(LANG_SELECT, 'select', "icms.geo.selectCity('{$field_id}')"); ?> </div> </div> </div>