0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 400 Просмотров
*

orsy

  • Давно я тут
  • 393
  • 21
  • Web-Factor Ukraine
Ну точнее проблема не в них, а непосредственно в поиска по полям типа multicheckbox и multiselect.

Короче есть у меня такие поля в объявлениях. При наполнении объявления они имеют тип checkbox, а для поиска выводятся в виде выпадающего списка.

Так вот проблема в том что они в той части компонента, которая отвечает за поиск объявлений, обрабатываются как-то неправильно.

Подробнее:
поле имеет значение rus, en, ua
пытаюсь искать по значению rus
включил отладку в Joomla и в запросе вижу вот такую вот картину:

Код
SELECT adext.*, a.*, p.name as parent, p.id as parentid, c.name as cat, c.id as catid,u.username as user,u.name as fullname  
  FROM acatf_adsmanager_ads as a
  LEFT JOIN acatf_paidsystem_ads as adext
  ON a.id = adext.id  
  INNER JOIN acatf_adsmanager_adcat as adcat
  ON adcat.adid = a.id  
  LEFT JOIN acatf_users as u
  ON a.userid = u.id  
  INNER JOIN acatf_adsmanager_categories as c
  ON adcat.catid = c.id  
  LEFT JOIN acatf_adsmanager_categories as p
  ON c.parent = p.id  
  WHERE  1  
  [b]AND (a.ad_poliglot LIKE '%,r,%' )[/b]
  AND  a.published = 1
  AND c.published = TRUE  
  AND c.id IN (10,1,2,3,4,5,6,7,8,9)  
  GROUP BY a.id
  ORDER BY a.date_created DESC ,a.id  DESC
  LIMIT 0, 20

 AND (a.ad_poliglot LIKE '%,r,%' )
почему то в запросе нет запрошенyого значения rus, а только буковка r

полез разбираться, нашел место где формируется этот запрос
находиться это счастье в файле /administrator/components/com_adsmanager/models/field.php
и выглядит этот участок кода вот так:

Код
foreach($fields as $fsearch){
switch($fsearch->type)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;
            ...

Может кто пояснит мне, почему в запрос не попадает значение, выбранное в выпадающем списке, а на его месте оказывается буковка r?

Забивал приведенный выше запрос непосредственно в phpMyAdmin, и если буковку r заменить на rus то все норм ищется.

В чем проблема? Помогите! !
« Последнее редактирование: 13.05.2016, 16:28:08 от orsy »
*

orsy

  • Давно я тут
  • 393
  • 21
  • Web-Factor Ukraine
ПОБЕДИЛ!

Проблема была в том, что оператор switch в качестве аргумента case принимал тип поля, который был указан при создании поля в как основной, а нужно было ему передать тип, который был указан как тип поля для поиска.

Теперь все заработало!

Для тех кому интересно вот исправленный код

Код

foreach($fields as $fsearch){
$searchTypeVal = json_decode(JRequest::getVar( $fsearch->name, array() ));
//switch($fsearch->type)
switch($searchTypeVal->searchtype_render)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;
...

*

orsy

  • Давно я тут
  • 393
  • 21
  • Web-Factor Ukraine
Фигню я какую-то намутил (( не работает пока поиск, копаю дальше, ибо получить тип поля не получилось пока что...
*

orsy

  • Давно я тут
  • 393
  • 21
  • Web-Factor Ukraine
Короче вот будет самое правильное как показано ниже. Пришлось добавить еще один кейс обработки поля на тот случай когда изначально тип полу мультивыборный, а тип для поиска одиночная выпадашка + добавил под это логику

Код

function getSearchFieldsSql($fields)
    {
    if (isset($this->searchSQL)&&($this->searchSQL != ""))
    return $this->searchSQL;
   
    $search = "";
$plugins = $this->getPlugins();
foreach($fields as $fsearch){
$searchTypeRender = $fsearch->options->searchtype_render;
if($fsearch->type == 'multicheckbox' || $fsearch->type == 'multiselect'){
if($searchTypeRender == 'select'){
$searchTypeRender = 'selecttosheck';
}
}
if(!$searchTypeRender){
$searchTypeRender = $fsearch->type;
}
//switch($fsearch->type)
switch($searchTypeRender)
{
case 'multicheckbox':
case 'multiselect':
$value = JRequest::getVar( $fsearch->name, array() );
for($i = 0,$nb=count($value);$i < $nb;$i++)
{
if ($i == 0)
$search .= " AND (";
if (version_compare(JVERSION,'1.7.0','<')) {
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value[$i],true).",%'";
                        }else{
                            $search .= "a.$fsearch->name LIKE '%,".$this->_db->escape($value[$i],true).",%'";
                        }
if ($i < $nb - 1)
$search .= " OR ";
else
$search .= " )";
}
break;

case 'selecttosheck':
$value = JRequest::getVar( $fsearch->name, "");
if ($value != ""){
if (version_compare(JVERSION,'1.7.0','<')) {
$search .= " AND ( a.$fsearch->name LIKE '%,".$this->_db->getEscaped($value,true).",%' )";
}else{
$search .= " AND ( a.$fsearch->name LIKE '%,".$this->_db->escape($value,true).",%' )";
}
}
break;
...

« Последнее редактирование: 17.05.2016, 23:29:00 от orsy »
*

Ramil8009

  • Осваиваюсь на форуме
  • 144
  • 0
У меня тоже не работает поиск, указанный код проблему не решил. У вас работает?
*

moonaway

  • Осваиваюсь на форуме
  • 25
  • 0
Указывайте версию, пожалуйста...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблема с изображениями

Автор ExpertZews

Ответов: 0
Просмотров: 344
Последний ответ 26.07.2016, 21:08:12
от ExpertZews
Проблема с объявлениями на русском - AdsManager

Автор svkpro

Ответов: 24
Просмотров: 2872
Последний ответ 13.10.2015, 12:26:18
от IzrA
Проблема в фильтре AdsManager - mod_adsmanager_search

Автор Pavel_H

Ответов: 0
Просмотров: 382
Последний ответ 04.09.2015, 19:51:07
от Pavel_H
Проблема AdsManager + gmap

Автор damirkazan

Ответов: 0
Просмотров: 471
Последний ответ 29.08.2015, 19:06:06
от damirkazan
Проблема с поиском на AdsManager

Автор globator

Ответов: 0
Просмотров: 475
Последний ответ 17.08.2015, 11:32:09
от globator