Сайты на инстант 2.0

#1 17 июня 2014 в 20:41
Темы не нашел, поэтому создам.
Делимся, кому не жалко, ссылками на свои сайты на двоечке.

Я вот никак не могу родить на стандартных типах контента афишу… Подсмотреть бы у кого…
#2 24 июня 2014 в 19:20
toppor.ru/
Пока что на дефолтном шаблоне, играюсь с функционалом, в основном работа идет над доской объявлений
#3 25 июня 2014 в 08:36


toppor.ru/
Пока что на дефолтном шаблоне, играюсь с функционалом, в основном работа идет над доской объявлений

kosolapus
Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.
#4 25 июня 2014 в 09:34
Топпорняк, с айфона вид гаувно.
#5 25 июня 2014 в 11:03


Топпорняк, с айфона вид гаувно.

SpaceSel

Спс, дизайн пока не трогал, мобильную версию буду чуть позже пилить. Не дезигнер я… а вот кодить любо — после opencart'a такая красота с MVC smile
#6 25 июня 2014 в 11:05


Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.

Adjuster

В принципе, оно даже работает. Иногда. Ща есть фильтрация по городам/регионам, но стандартный виджет не радует ни разу — конечно, удобный, но страшненький какой-то… да и поломал я его чутка…
#7 25 июня 2014 в 11:46



Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.

Adjuster

В принципе, оно даже работает. Иногда. Ща есть фильтрация по городам/регионам, но стандартный виджет не радует ни разу — конечно, удобный, но страшненький какой-то… да и поломал я его чутка...

kosolapus

Захожу в board, нажимаю Город Выбрать, открывается модальное окно с одной кнопкой Выбрать. Тишина.
Захожу в Поиск, копирую туда Воронеж, жму найти — Ничего не найдено.
#8 8 июля 2014 в 05:04


Как зачинишь фильтр по городу — пиши! Как раз над этим работаю.

Adjuster

Немного поправил доску — теперь работает фильтр по городам и регионам. С поисковиком немного хуже — по сути, в бд хранятся только индексы городов, так что найти их ооочень непросто таким образом. Другой вопрос, что можно засовывать название города, скажем, в облако тегов — это решит сразу несколько вопросов. Но мне как-то без необходимости пока)
#9 8 июля 2014 в 09:31

Немного поправил доску

kosolapus
Вот теперь работает! Поделишься фильтром?
#10 8 июля 2014 в 09:46
Что, кроме топора, сайтов на двойке нет?)
#11 8 июля 2014 в 10:25


Что, кроме топора, сайтов на двойке нет?)

Raiden

пока не вижу смысла сырой выкладывать — мне осталось только фильтр этот внедрить и можно будет показывать.
#12 8 июля 2014 в 15:09
смотри, я его поправлял по ночам — исходники могут быть ужасными, тк с инстантом возиться начал месяца 2 назад.

1. Стандартный фильтр по городам (ну который из коробки). В нем произошли некоторые изменения:
-Кнопк "Выбрать" больше не прячется, если выбран хотя бы регион
-Если выбран регион, но не выбран город, то возвращать id не города, но региона (соответственно, в поле фильтра меняем id поля с citiy на region)


Изменения здесь:
  1.  
  2. if (id != 0 && child_list_id=='cities') {
  3. $('.buttons', geo_window).show();
  4. }
  5.  
и здесь соответственно:
  1.  
  2. if(id==0){
  3. var list = $('#geo_window form select[name=regions]');
  4. var id = list.val();
  5. $('.city-id', widget).attr('name','region');
  6. }
  7.  
Весь файлик:
  1.  
  2. var icms = icms || {};
  3.  
  4. icms.geo = (function ($) {
  5.  
  6. //====================================================================//
  7.  
  8. this.changeParent = function(list, child_list_id) {
  9.  
  10. var geo_window = $('#geo_window');
  11. var geo_form = $('form', geo_window);
  12.  
  13. var id = $(list).val();
  14. console.log(id);
  15. var child_list = $('select[name='+child_list_id+']', geo_form);
  16.  
  17. if (id == 0 && child_list_id=='regions') {
  18. child_list.parent('.list').hide();
  19. if (child_list_id=='regions'){
  20. $('select[name=cities]', geo_form).parent('.list').hide();
  21. }
  22.  
  23. $('.buttons', geo_window).hide();
  24. return false;
  25. }
  26. if (id != 0 && child_list_id=='cities') {
  27. $('.buttons', geo_window).show();
  28. }
  29.  
  30.  
  31. var url = geo_form.data( 'items-url' );
  32.  
  33. $.post(url, {type: child_list_id, parent_id: id}, function(result){
  34.  
  35. if (result.error) { return false; }
  36.  
  37. child_list.html('');
  38.  
  39. for(var item_id in result.items){
  40.  
  41. var item_name = result.items[item_id];
  42.  
  43. child_list.append( '<option value="'+ item_id +'">' + item_name +'</option>' );
  44.  
  45. }
  46.  
  47. child_list.parent('.list').show();
  48.  
  49. if (child_list_id != 'cities'){
  50. icms.geo.changeParent(child_list, 'cities');
  51. }
  52.  
  53. }, 'json');
  54.  
  55. }
  56.  
  57. //====================================================================//
  58.  
  59. this.changeCity = function(list){
  60.  
  61. var geo_window = $('#geo_window');
  62. var geo_form = $('form', geo_window);
  63.  
  64. var id = $(list).val();
  65.  
  66. }
  67.  
  68. //====================================================================//
  69.  
  70. this.selectCity = function(target_id){
  71.  
  72. var list = $('#geo_window form select[name=cities]');
  73.  
  74. var id = list.val();
  75.  
  76. if(id==0){
  77. var list = $('#geo_window form select[name=regions]');
  78. var id = list.val();
  79. $('.city-id', widget).attr('name','region');
  80. }
  81. var name = $('option:selected', list).html();
  82.  
  83. if (!id){ return false; }
  84.  
  85. var widget = $('#geo-widget-'+target_id);
  86. console.log(id);
  87. $('.city-id', widget).val(id);
  88.  
  89. $('.city-name', widget).html(name).show();
  90.  
  91. icms.modal.close();
  92.  
  93. }
  94.  
  95. //====================================================================//
  96.  
  97. return this;
  98.  
  99. }).call(icms.geo || {},jQuery);
  100.  
2. В БД добавил поле к объявлениям, назвал, как ни странно, region (Пробовал прикол с расчетом всех городов в процессе фильтрации с плясками от id региона, но забил — нуу оочень много расчетов, мне не нравится, хотя можно было при фильтрации устроить что-то вроде "foreach($cities as $city){$items_all[]=$items->filter($city);}" — точный синтаксис не приведу, не делал, но смысл, думаю, понятен)

3. Для того, чтоб поле региона заполнялось, написал простенькую функцию вычисления региона по городу. Возможно, зря, но закинул ее в core.php.


После строки
  1.  
  2. $item = $this->model->addContentItem($ctype, $item, $fields);
  3.  
в создании добавил такую конструкцию:
  1.  
  2. //Регион для объявлений
  3. if($item['city']){
  4. $region=cmsCore::getRegion($item['city']);
  5. $this->model->update('con_board', $item['id'], array(
  6. 'region' => $region
  7. ));
  8. }
  9.  
Сама функция (положил в кору, скорее всего можно как-то упростить, но сейчас вопрос не в красоте кода, к сожалению — со временем доработаю)
  1.  
  2. public static function getRegion($id){
  3. $sql="SELECT `region_id` FROM `cms_geo_cities` WHERE `id`='$id'";
  4. $inDB = cmsDatabase::getInstance();
  5. $sql=$inDB->query($sql);
  6. $sql=mysqli_fetch_array($sql);
  7.  
  8. return $sql['region_id'];
  9. }
  10.  
Если интересно, могу намутить то же самое, но без доп.полей — чисто на переборе в процессе фильтрации. Будет нагрузка больше значительно, но зато -1 поле в бд.
#13 9 июля 2014 в 13:42
Сделал изменения в файлах.
Где и как вывести кнопку в фильтр?
Можно измененные файлы архивчиком получить?
#14 9 июля 2014 в 19:10


Сделал изменения в файлах.
Где и как вывести кнопку в фильтр?
Можно измененные файлы архивчиком получить?

Adjuster
Да там, по сути, 2 файлика. Один я привел, второй пока не безопасен — уж извини, в открытый доступ не кину, пока не добью (для своих нужд видоизменял добавление объявления, там ща все плохо. Если скажешь, где можно почитать про оформление дополнений к инстанту — с уовольствием запакую).
Вывести в фильтр. Есть 3 способа. Простой (Читерский), умный и обычный. Обычный — добавить в БД запись о фильтре. Умный — найти типы полейй, разрешенных для фильтрации и добавить туда город. Читерский (как я делал).
1. Создаешь поле для фильтра. Любое
2. Открываешь исходный код страницы (в хроме, например, отладчик со скрина)
3. Меняешь у любого поля value на city
4. Сохраняем. Профит! Естественно, поле должно "отображать в фильтре". Однако, есть нюанс. Для отображения в списке надо брать значения из БД. Т.е., если хочешь, скажем, не только фильтровать контент по городу, но и выводить город для каждого элемента контента, то тебе потребуется что-то вроде
  1.  
  2. if($field['name']=='city'){
  3. echo cmsCore::getCity($item['city']);
  4. }
  5.  
где
  1.  
  2. public static function getCity($id){
  3. $sql="SELECT `name` FROM `cms_geo_cities` WHERE `id`='$id'";
  4. $inDB = cmsDatabase::getInstance();
  5. $sql=$inDB->query($sql);
  6. $sql=mysqli_fetch_array($sql);
  7. return $sql['name'];
  8. }
также лежит в core.php

Вообще, решение не самое красивое, но пока подробной документации нет, будем делать чтоб ходя бы работало

Вдруг понадобится. geo.widget.tpl (У меня всего одна страна, поэтому смысла ее выбирать не вижу — здесь, собственно, только выбор региона оставлен)
  1.  
  2. <div id="geo_window">
  3.  
  4. <div class="wrapper container" style="padding:10px 15px">
  5. <div id="sizecity" style="width:200px;height: 100px"></div>
  6. <form data-items-url="<?php echo $this->href_to('get_items'); ?>">
  7. <div class="list" style="display:none" >
  8. <?php echo html_select('countries', $countries, 3159, array('onchange'=>"icms.geo.changeParent(this, 'regions')", 'rel'=>'regions','id'=>'country_main')); ?>
  9. </div>
  10. <script type="text/javascript">
  11. $(document).ready(function (){
  12. var obj=$('#country_main');
  13. icms.geo.changeParent(obj, 'regions');
  14. $("#sizecity").css({"display":"none"});//после отключения отрисованного окна со страной стал грустить размер окошка - не пересчитывается и все тут. как всегда, решение топорное, зато рабочее
  15.  
  16. });
  17. </script>
  18.  
  19. <div class="list">
  20. <?php echo html_select('regions', $regions, $region_id, array('onchange'=>"icms.geo.changeParent(this, 'cities')", 'rel'=>'cities')); ?>
  21. </div>
  22.  
  23. <div class="list" <?php if (!$city_id){?>style="display:none"<?php } ?>>
  24. <?php echo html_select('cities', $cities, $city_id, array('onchange'=>"icms.geo.changeCity(this)")); ?>
  25. </div>
  26.  
  27. </form>
  28.  
  29. <div class="buttons" <?php if (!$city_id){?>style="display:none"<?php } ?>>
  30. <?php echo html_button(LANG_SELECT, 'select', "icms.geo.selectCity('{$field_id}')"); ?>
  31. </div>
  32.  
  33. </div>
  34.  
  35. </div>
  36.  
Прикрепленный файл
Untitled1_pvkmp.png 93 Кб
#15 9 июля 2014 в 21:51
aksucity.info вот мой ещё совсем пустой. Жду конструктивной критики. диз дефолтный только малость переделенный.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.