Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

CIBlockElement::GetList ограничить количество выводимых товаров

00 голосов
6
Столкнулся с такой проблемой  необходимо выводить последние  40 элементов  , казалось бы необходим параметр "nTopCount" => 40   в массиве постраничной навигации, но проблема в том что потом не выводится постраничная навигация  а выводит сразу все элементы а на по 20 .  Перерыл документацию гуглил  не нашел ответа, помогите советом .
спросил 21 Сен, 13 от Tvvix (180 баллов)

6 Ответы

00 голосов
"nTopCount" => 40,
"nPageSize" => 20,

?
ответил 28 Сен, 13 от Ly (4,580 баллов)
00 голосов
Попробуйте функцию GetIBlockSectionList
ответил 28 Дек, 13 от FIL3 (180 баллов)
00 голосов
Цитата
Dmitry Ban пишет:
"nTopCount" => 40,
"nPageSize" => 20,

?
Да вот в том то и проблема что если так делать то будет выводится 40 элементов без постраничной навигации   вот пример кода как я формирую навигацию и выборку

Код
    /* we realise sample elements infoblock */
    $res = CIBlockElement::GetList($arOrder , $arFilter, false , Array("nTopCount" => 40, "nPageSize"=>$arParams["PAGER_COUNT"], "iNumPage"=>$ajaxpage , "bShowAll"=> false), $arSelect);

    /* we realise paginal navigation  */
    $arResult["NAV_STRING"] = $res->GetPageNavStringEx($navComponentObject, "", $arParams["PAGER_TEMPLATE"]);
 

Без значения  "nTopCount" => 40   постраничная навигация есть но нет ограничения выборки, со значением nTopCount  есть ограничение но нет выборки  :(

Цитата
Виктор Курогашев пишет:
Попробуйте функцию GetIBlockSectionList
Не понимаю для чего мне этот класс , мне необходимо сделать выборку элементов инфоблока,   а не разделов инфоблока .
ответил 13 Апр, 14 от Tvvix (180 баллов)
00 голосов
Ну, можно вот так извратиться:
Код
$arElementID = array();
$res = CIBlockElement::GetList(
   false,
   $arFilter,
   false,
   array('nTopCount' => 40),
   array('ID')
);
while ($el = $res->Fetch())
   $arElementID[] = $el['ID'];

if (count($arElementID))
   $arFilter['ID'] = $arElementID;

$res = CIBlockElement::GetList(
   $arOrder,
   $arFilter,
   false,
   array('nPageSize' => 20),
   $arSelect
); 
ответил 06 Авг, 14 от Ly (4,580 баллов)
00 голосов
Поправка: в первом вызове GetList тоже нужно применить $arOrder, а то у вас выведутся 40 последних элементов.
ответил 10 Дек, 14 от Ly (4,580 баллов)
00 голосов
Dmitry Ban

Большое спасибо за изящное решение,  все прекрасно  работает .
Мне кажется это глюк который был не замечен :)
ответил 02 Апр, 15 от Tvvix (180 баллов)

Похожие вопросы

0 голосов
3 ответов
0 голосов
5 ответов
спросил 08 Ноя, 13 от vitar (100 баллов)
0 голосов
3 ответов
спросил 12 Ноя, 13 от Snezhka (2,240 баллов)
0 голосов
1 ответ
0 голосов
0 ответов
спросил 07 Май, 14 от IRISH (100 баллов)