Как применить диапозон значений для фильтра?

голоса: 0
Как применить диапозон значений для фильтра в запросе uAPI?   К примеру: 'filter1' => array(1, 2, 3, 4)  Пробовал получить все эллементы что бы фильтровать уже методами js.  Но скрипт не работает, как мне кажется время выполнения долгое
| Автор: | Категория: PHP и API на uCoz
Уточните ссылку на сайт и также уточните, к какому модулю вы хотите это применить.Также не мешало бы предоставить пример скрипта, что у вас получилось.
Yuri_Geruk,

feenet.net, модуль "каталог файлов".

 
films.php
 
ошибка

 

Ответов: 1

Голоса: +1
 
Лучший ответ

Никак. uApi в точности повторяет работу сайта. Раз на странице категорий нет возможности выбрать сразу 2 значения в одном и том же фильтре, то значит и в uApi такой возможности нет.

Пробовал получить все эллементы что бы фильтровать уже методами js.  Но скрипт не работает, как мне кажется время выполнения долгое

Таким способом и нужно действовать. Только сразу много материалов получать не нужно, ограничивать например 200 материалами за раз. 

Еще посоветовал бы все это дело кешировать в файл. Поставить проверку на время создания файла и если после создания файла прошло к примеру 24 часа, то обновлять его. 

Фильтровать тоже лучше сразу на php. 

| Автор:
Выбор ответа лучшим | | Автор: Игорь Светлов
кешировать, это конечно хорошо, но вот как это реализовать, вопрос трудный. Как организовать это я ума не приложу. если учитывать что на сайте так же имеется сортировка кроме фильтров и запрос моджет прийти и с фильтром и с сортировкой.
Игорь Светлов,
Создаете БД
try {
    $db = new PDO('sqlite:dbfilename.db');
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ) {
    exit("Ошибка в строке: " . $e->getLine() . ": " .$e->getMessage()."<br>");
}

В ней таблицу

try {
    $db->exec("CREATE TABLE IF NOT EXISTS `tablename` (
`id` INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
`title` TEXT  NOT NULL,
`filters` TEXT  NOT NULL,
`rate_sum` VARCHAR(3)  DEFAULT NULL,
.. и т.д. (какие строки нужно сохранять такие и добавляете)
);");
} catch ( PDOException $e ) {
    exit("Ошибка в строке: " . $e->getLine() . ": " .$e->getMessage()."<br>");
}
В эту таблицу пишите данные полученные по api.
Потом просто делаете выборку из таблицы с учетом фильтров и сортировки
Например, сортировка по рейтингу и фильтром1 с id 2,4,5:
$row = $db->query("SELECT * FROM `tablename` WHERE `filters` = '2,4,5' ORDER BY `rate_sum` desc")->fetchAll(PDO::FETCH_ASSOC);
print_r($row);

А проверять дату создания файла dbfilename.db можно так:

$now_time = time(); // текущее время 
$file = "dbfilename.db";
$file_time = filemtime($file); // время изменения файла 
$time = $now_time - $file_time; // сколько прошло времени после создания/изменения файла (в секундах)
$cache_time = 86400; (столько секунд в сутках)
 
if ( $time >= $cache_time || filesize($file) <= 10000) {
//если прошло больше суток или размер файла подозрительно маленький, то удаляем его и создаем заново
}

Что касается ошибки  CURLOPT_FOLLOWLOCATION . В файле uAPImodule удалите строчки 83,160,240 и 263

Что касается второй ошибки, то у вас там в переменной не массив. Перед каждым запуском форейча надо поставить проверку/, что-то вроде 

if ( isset( $f1[0] ) ) 

if ( isset( $f2[0] ) ) 

Александр Леонов,
никогда не работал с PDO, те таблицы которые там создаются, где они хранятся? И хранятся ли они вообще после выполнения скрипта?
...