Как выгрузить все разделы, если фильтр не работает?
В общем игнорирует фильтр, есть ли другие способы, или как можно переделать данный?
public static function sections() { $data = []; $method = 'crm.productsection.list'; $b24_result = self::callFull( $method, $data, ); var_dump($b24_result); die; return $b24_result; } private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов { $res = []; $lastId = 0; $finish = false; $data['order']['ID'] = 'ASC'; $data['start'] = -1; $i = 0; while (!$finish && $i <= 2) { var_dump($lastId); $i++; $data['filter'][">ID"] = $lastId; $result = CRest::call( $method, $data ); if (count($result['result']) > 0) { $lastId = end($result['result'])['ID']; $res = array_merge($res, $result['result']); } else { $finish = true; } usleep(200000); } return $res; } |
public static function sections() { $data = []; $method = 'crm.productsection.list'; $b24_result = self::callFull( $method, $data, ); var_dump($b24_result); die; return $b24_result; } private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов { $res = []; $lastId = 0; $finish = false; $data['order']['ID'] = 'ASC'; $data['start'] = -1; $i = 0; while (!$finish && $i <= 2) { var_dump($lastId); $i++; $data['filter'][">ID"] = $lastId; $result = CRest::call( $method, $data ); if (count($result['result']) > 0) { $lastId = end($result['result'])['ID']; $res = array_merge($res, $result['result']); } else { $finish = true; } usleep(200000); } return $res; }
ps Решил вопрос через параметр 'start' (работает в качестве NAV_PARAMS)
private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов { $res = []; $finish = false; $pages = 0; $data['order']['ID'] = 'ASC'; //$data['start'] = -1; $i = 0; $n = 0; while (!$finish && $i <= 2) { if ($i == 0) { $result = CRest::call( $method, $data ); unset($data); $pages = ceil($result['total'] / 50); $res[] = $result['result']; } else { $data[$i] = [ 'method' => $method, 'params' => [ 'order' => [ 'ID' => 'ASC' ], 'start' => $i * 50 ], ]; if ($n == 50) { $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']); unset($data); $n = 0; } } $i++; if ($i <= $pages) { } else { $finish = true; } usleep(200000); } $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']); $result = []; foreach ($res as $val) { $result = array_merge($result, $val); } return $res; } |
private static function callFull($method, $data) // работает для юзеров, не работает для департаментов, разделов { $res = []; $finish = false; $pages = 0; $data['order']['ID'] = 'ASC'; //$data['start'] = -1; $i = 0; $n = 0; while (!$finish && $i <= 2) { if ($i == 0) { $result = CRest::call( $method, $data ); unset($data); $pages = ceil($result['total'] / 50); $res[] = $result['result']; } else { $data[$i] = [ 'method' => $method, 'params' => [ 'order' => [ 'ID' => 'ASC' ], 'start' => $i * 50 ], ]; if ($n == 50) { $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']); unset($data); $n = 0; } } $i++; if ($i <= $pages) { } else { $finish = true; } usleep(200000); } $res = array_merge($res, CRest::callBatch($data, 50)['result']['result']); $result = []; foreach ($res as $val) { $result = array_merge($result, $val); } return $res; }
Дополнительно:
Для начало объясни зачем это?
var_dump($b24_result); die; return $b24_result; |
var_dump($b24_result); die; return $b24_result;
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для выгрузки всех разделов, даже если фильтр не работает, можно воспользоваться другими способами доступа к данным. В зависимости от того, какая у вас система управления контентом или какой сервис вы используете, есть несколько общих способов для решения данной проблемы.
1. **SQL запрос**: Если у вас есть доступ к базе данных, вы можете написать SQL запрос, который выберет все разделы из соответствующей таблицы. Например, для WordPress вы можете использовать следующий запрос:
SELECT * FROM wp_terms WHERE taxonomy = 'category';
2. **API запрос**: Если у вашего сервиса есть API, вы можете воспользоваться им для получения всех разделов. Например, для GitHub API запрос может выглядеть следующим образом:
https://api.github.com/repos/:owner/:repo/contents
3. **Парсинг страницы**: Если у вас нет прямого доступа к данным через базу данных или API, можно воспользоваться парсингом страницы. Для этого нужно использовать библиотеки для работы с HTML, такие как BeautifulSoup для Python или Simple HTML DOM Parser для PHP.
4. **Экспорт данных**: Если у вас есть возможность экспортировать данные, это также может быть хорошим способом получить все разделы. Например, вы можете экспортировать все разделы в CSV файл и затем работать с этим файлом.
5. **Кэширование данных**: Если фильтр не работает из-за проблем с кэшем, можно попробовать очистить кэш или отключить его временно, чтобы убедиться, что проблема не связана с кэшированием.
Надеюсь, что один из этих способов поможет вам решить проблему с выгрузкой всех разделов, даже если фильтр не работает.