|
|
12.10.2012, 10:00
|
|
Гость
Гость
|
netcat 4.7 не работает стандартная выборка по названию товара если в названии есть символ "+" (например "Комплект (шина + цепь)") подскажите пожалуйста как поправить
|
|
|
18.10.2012, 15:00
|
|
MipH
Спирин Дмитрий

Зарегистрирован: 2004-12-22
Сообщений: 252
|
Что еще за стандартная выборка?..
bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
|
|
|
18.10.2012, 16:39
|
|
Гость
Гость
|
Стандартный поиск
|
|
|
18.10.2012, 16:44
|
|
MipH
Спирин Дмитрий

Зарегистрирован: 2004-12-22
Сообщений: 252
|
Полагаю, причина в http://http11.ru/post.php?post=14
bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
|
|
|
18.10.2012, 17:01
|
|
Гость
Гость
|
меняет "+" на '%2B'
|
|
|
19.10.2012, 17:45
|
|
Гость
Гость
|
а где это все правится?
|
|
|
20.10.2012, 01:40
|
|
MipH
Спирин Дмитрий

Зарегистрирован: 2004-12-22
Сообщений: 252
|
Я глубоко не копал, но кажется мне, что это проблема в неткете.
Дело в том, что неткет ПЕРЕОПРЕДЕЛЯЕТ стандартный массив $_GET в файле nc_input.class.php
Код: // validate query parameter
if ( is_array($parsed_url) && array_key_exists('query', $parsed_url) && $parsed_url['query']) {
parse_str($parsed_url['query'], $parsed_query_arr);
// validate
$parsed_query_arr = $this->clear_system_vars($parsed_query_arr);
// in error_document $_GET is empty, so set them at this line
$_GET = $parsed_query_arr ? $parsed_query_arr : array();
}
Функция parse_str выглядит так:
Код: static function parse_str($query)
{
if ($query === null) {
return null;
}
$parts = explode('&', $query);
$new_parts = array();
for ($i = 0; $i < count($parts); $i++) {
$pair = explode('=', $parts[$i]);
if (count($pair) != 2) {
continue;
}
list($key, $value) = $pair;
$new_parts[urldecode($key)] = urldecode($value);
}
return $new_parts;
}
Однако, в мануале PHP четко написано, что массив _GET НЕ НАДО urldecode'ить, он это делает автоматически.
Получается, что над параметром 2 раза производится операция urldecode, первая конвертирует закодированный знак %2B обратно в знак +, а вторая как раз уже знак + в пробел.
Поэтому ваша строка с плюсом превращается в строку с пробелом.
Если вы используете какой-то кастомный поиск через системные настройки шаблона, просто возьмите аккуратно (с экранирование кавычек, если у вас вдруг выключены magic_quote_gpc) нужны вам параметр из массива $_REQUEST, он неткетовцами не портится вроде как.
Ну а вообще эта задача чисто для саппорта неткета, пусть разбираются.
bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
|
|
|
29.10.2012, 10:56
|
|
Гость
Гость
|
когда-нибудь, как-нибудь исправят
|
|
|
29.10.2012, 22:14
|
|
dimidroll
Егоровых Дмитрий

Зарегистрирован: 2007-10-05
Сообщений: 81
|
Если вам нужен простой поиск в каталоге, гляньте здесь осуществил поиск по 3 полям в таблице, в вашем случае задача упрощается. Если интересно, могу предложить свой вариант реализации с морфологическим анализом, если можно так назвать - проще говоря находит корни слов в введенной строке поиска, формирует запрос и выдает результат. В вашем случае (например "Комплект (шина + цепь)" - вырежет лишние символы, оставит комплект шин цеп - отсюда сформирует запрос вида " and Name LIKE %комплект%шин%цеп%"
ася - 97336016
|