Vladimir_K

Пользовательский фильтр не ищет так как нужно.

Recommended Posts

4 минуты назад, Vladimir_K сказал:

И как это исправить?

У вас это автогенерированный код?

Или сами писали?

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


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, rumantic сказал:

У вас это автогенерированный код?

Или сами писали?

Это автогенерированный код. Это код Пользовательской формы поиска. Дефолтную пока не трогаем. Тут хотя бы эту запустить пока.

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


Ссылка на сообщение
Поделиться на других сайтах
21 час назад, Vladimir_K сказал:

Это автогенерированный код. Это код Пользовательской формы поиска. Дефолтную пока не трогаем. Тут хотя бы эту запустить пока.

Поздравляю!

Вы нашли баг! )

И мы его поправили, обновите table у себя в админке до версии 1.2.6 и будет теперь checkbox как нужно икаться.

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


Ссылка на сообщение
Поделиться на других сайтах
25 минут назад, rumantic сказал:

Поздравляю!

Вы нашли баг! )

И мы его поправили, обновите table у себя в админке до версии 1.2.6 и будет теперь checkbox как нужно икаться.

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

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


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, doma сказал:

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

Это баг в том, что checkbox для формочек созданных в Редакторе поисковых форм в редакторе форм, работал неправильно.

Нужно обновлять apps.table.

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rumantic сказал:

И мы его поправили, обновите table у себя в админке до версии 1.2.6 и будет теперь checkbox как нужно икаться.

А как его обновить отдельно? У меня в разделе с обновлениями можно только всю систему обновить. Отдельно не обновляется.

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, Vladimir_K сказал:

А как его обновить отдельно? У меня в разделе с обновлениями можно только всю систему обновить. Отдельно не обновляется.

Как вариант поднимите систему на тестовом хосте.

Обновите на этой тестовой системе приложения все.

Заберите с тестовой системы /apps/table/ на свой рабочий сайт.

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Как вариант поднимите систему на тестовом хосте.

Обновите на этой тестовой системе приложения все.

Заберите с тестовой системы /apps/table/ на свой рабочий сайт.

А можно просто патч? Прям сюда?

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Vladimir_K сказал:

А можно просто патч? Прям сюда?

Тут apps\table\admin\search_forms_admin.php

Строка 457

Находим

		foreach($els['public'][$this->getConfigValue('default_tab_name')] as $e){
			$_els[$e['name']]=$e;
		}

И меняем на

		foreach($els['public'][$this->getConfigValue('default_tab_name')] as $e){
			$_els[$e['name']]=$e;
			if ( $_els[$e['name']]['type'] == 'checkbox' ) {
			    $_els[$e['name']]['html'] = str_replace('value="0"', 'value="1"', $_els[$e['name']]['html']);
			}
		}

 

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Это баг в том, что checkbox для формочек созданных в Редакторе поисковых форм в редакторе форм, работал неправильно.

Нужно обновлять apps.table.

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

или что то не правильно делаем или не то?

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


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, doma сказал:

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

или что то не правильно делаем или не то?

Эти чекбоксы вы добавляли не через редактор поисковых форм, а вручную составляли код в шаблонах, поэтому у вас работает.

Я писал про исправления автогенерируемых форм поиска.

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


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Эти чекбоксы вы добавляли не через редактор поисковых форм, а вручную составляли код в шаблонах, поэтому у вас работает.

Я писал про исправления автогенерируемых форм поиска.

возможно, так как мы ранее создали форму поиска и там был чекбокс, но когда пытались попробовать найти объявления через чекбокс, они не искались, потом ругали и ругали мол вам надо вручную править и мол ни фига ничего не читаете -мол была  на форуме тема где нужно все добавлять вручную-чтобы искала.
Оказывается мы были правы что не работает :)   не смотря на наши подсказки

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rumantic сказал:

Тут apps\table\admin\search_forms_admin.php

Строка 457

Находим


		foreach($els['public'][$this->getConfigValue('default_tab_name')] as $e){
			$_els[$e['name']]=$e;
		}

И меняем на


		foreach($els['public'][$this->getConfigValue('default_tab_name')] as $e){
			$_els[$e['name']]=$e;
			if ( $_els[$e['name']]['type'] == 'checkbox' ) {
			    $_els[$e['name']]['html'] = str_replace('value="0"', 'value="1"', $_els[$e['name']]['html']);
			}
		}

 

Ну checkbox и select_box вроде заработали (уже боюсь сглазить).

По Пользовательской осталось два вопроса:

  1. Поле с ценой сделать диапазоном (ползунками). Так как оно выглядит и главное РАБОТАЕТ в дефолтной форме. 
  2. Поле "Расстояние до моря". Это поле у нас типа safe_string c rules=Type:int.  Так вот по нему параметры в адресную строку браузера передаются но поиск не происходит. В файле template_search.php код отвечающий за это поле присутствует. 

 

 

 

 

 

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


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

В процессе тестирования формы всплыла ещё одна проблема.

Ранее я писал, что в справочнике (и соответственно в форме поиска) у нас есть:

Регион (новый справочник, сами добавляли)
Район (на базе стандартного Регион)
Город (на базе стандартного Город)

Так вот как раз по нашему справочнику новому (он у нас в разделе "Пользовательские " находится) - фильтр не ищет. Т.е. в адресную строку браузера параметр передаётся, но объявления не фильтруются. Просто вываливаются все что есть. Точно так же как с "Расстоянием до моря".

В файле template_search.php код отвечающий за поиск по справочнику присутствует. Добавлено по аналогии с остальным:

if(''!==$this->getRequestValue('regionareas_id')){
        $params['regionareas_id'] = (int)$this->getRequestValue('regionareas_id');
     }

и

if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

Что не так?

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


Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, Vladimir_K сказал:

В процессе тестирования формы всплыла ещё одна проблема.

Ранее я писал, что в справочнике (и соответственно в форме поиска) у нас есть:

Регион (новый справочник, сами добавляли)
Район (на базе стандартного Регион)
Город (на базе стандартного Город)

Так вот как раз по нашему справочнику новому (он у нас в разделе "Пользовательские " находится) - фильтр не ищет. Т.е. в адресную строку браузера параметр передаётся, но объявления не фильтруются. Просто вываливаются все что есть. Точно так же как с "Расстоянием до моря".

В файле template_search.php код отвечающий за поиск по справочнику присутствует. Добавлено по аналогии с остальным:


if(''!==$this->getRequestValue('regionareas_id')){
        $params['regionareas_id'] = (int)$this->getRequestValue('regionareas_id');
     }

и


if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

Что не так?

Надо точно также включить вывод результатов массива в конце вашего файла и смотреть что там в переменных приходит.

Скопируйте результат отладки массива сюда.

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rumantic сказал:

Надо точно также включить вывод результатов массива в конце вашего файла и смотреть что там в переменных приходит.

Скопируйте результат отладки массива сюда.

В адресной строке браузера:

index.php?regionareas_id=3&region_id=&city_id=&topic_id=0&animals_id=0&seadist_id=&price=0

Сверху сайта:

Array ( ) Array ( )

В выдаче фильтра - все объявления сайта.

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


Ссылка на сообщение
Поделиться на других сайтах
49 минут назад, rumantic сказал:

Еще для отладки удобно использовать вот такое решение

 

Сделал я такое. Добавил в template_search.php:

$this->writeLog('regionareas_id = '.$regionareas_id);

А в админке вот такое:

 

Clip2net_170703104944.png

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


Ссылка на сообщение
Поделиться на других сайтах
if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){
Вот это неправильное условие

У вас ведь там может быть не только 1, поэтому 

$params['regionareas_id'] == 1 

Вообще убрать надо тогда.

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


Ссылка на сообщение
Поделиться на других сайтах
18 минут назад, rumantic сказал:

if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){
Вот это неправильное условие

У вас ведь там может быть не только 1, поэтому 


$params['regionareas_id'] == 1 

Вообще убрать надо тогда.

Хм...

Ну во-первых, если вместо

  if($params['regionareas_id'] == 1 && isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

Написать

if(isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

То фильтр начинает работать, но пропадают все объявления, если зайти просто на главную. Либо просто по категориям походить. Тоже ничего нет на сайте.

А во-вторых, как тогда работает остальное? Т.е. чекбоксы и селекты? Там ведь тоже может быть не только 1.

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


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

Мои двухнедельные online курсы по программированию JAVA/C/C++/C#/Ruby/Python/JavaScript "От новичка до Senior Developer DevOps Guru Hardcore Coder" и внутренний загубленный гений программирования подсказывает, что можно сделать так:

if($params['regionareas_id'] && isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

Т.е. просто передавать в качестве параметра regionareas_id явно не указывая чему он равен. Вроде работает в таком варианте. Но не знаю насколько это корректно. Можно так?

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


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Vladimir_K сказал:

Мои двухнедельные online курсы по программированию JAVA/C/C++/C#/Ruby/Python/JavaScript "От новичка до Senior Developer DevOps Guru Hardcore Coder" и внутренний загубленный гений программирования подсказывает, что можно сделать так:


if($params['regionareas_id'] && isset($data_model_array['regionareas_id'])){
            $where_array[]=DB_PREFIX.'_data.regionareas_id='.$params['regionareas_id'];
     }

Т.е. просто передавать в качестве параметра regionareas_id явно не указывая чему он равен. Вроде работает в таком варианте. Но не знаю насколько это корректно. Можно так?

Извинияюсь.

Условие тогда так надо писать

if($params['regionareas_id'] != '' && isset($data_model_array['regionareas_id'])){

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


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, rumantic сказал:

Извинияюсь.

Условие тогда так надо писать


if($params['regionareas_id'] !=  && isset($data_model_array['regionareas_id'])){

Да, это заработало. Спасибо.

По Пользовательской форме осталось вот это:

В 30.06.2017 в 15:17, Vladimir_K сказал:

По Пользовательской осталось два вопроса:

  1. Поле с ценой сделать диапазоном (ползунками). Так как оно выглядит и главное РАБОТАЕТ в дефолтной форме. 
  2. Поле "Расстояние до моря". Это поле у нас типа safe_string c rules=Type:int.  Так вот по нему параметры в адресную строку браузера передаются но поиск не происходит. В файле template_search.php код отвечающий за это поле присутствует. 

 

И вот это ещё тоже не понятно:

12 минуты назад, Vladimir_K сказал:

как тогда работает остальное? Т.е. чекбоксы и селекты? Там ведь тоже может быть не только 1.

Я к тому, что может стоить всё заменить с

 == 1 && isset

на

 != '' && isset

???

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


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

Бегунок цены - где-то тут на форуме была про это тема 

Расстояние до моря опять же по схеме что и с предыдущими переменными отлаживать нужно. 

У чекбоксов может быть только 1, поэтому и условие сравнения с единицей.

Все заменять не нужно, все зависит от конкретных целей.

 

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


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, rumantic сказал:

Расстояние до моря опять же по схеме что и с предыдущими переменными отлаживать нужно. 

Да вот как раз этим и занимаюсь.

В файле template_search.php просто при

if($params['seadist_id']  == 1 && isset

не ищет вообще. 

При

if($params['seadist_id'] != '' && isset

Ищет, но находит только те объявления в которых прямое совпадение. Т.е. если я задаю 500, то он находит только те, где явно указано 500. Те, что с 150, 200, 300 и т.д. туда не попадают. А нужно, грубо говоря, что бы всё, что ДО 500 + само 500 туда попадало.

В адресной:

Array ( [0] => re_data.seadist_id=500 ) Array ( [0] => re_data.seadist_id=500 )


 

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


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

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

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

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

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

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

Войти

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

Войти сейчас