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

Постраничная навигация AJAX

00 голосов
2

Добрый день!

При попытке сделать подгрузку товаров AJAX вылезают повторяющиеся товары!

Подскажите как сделать так что бы выводимые товары не повторялись?

Основная страница с товарами:

<?$APPLICATION->IncludeComponent(
"bitrix:catalog", 
".default", 
array(
) Всё как обычно
);?>
 
JavaScript код:
$('.content').on('scroll', function(event){
var scrollTop = $(this).scrollTop();
var contentY = $(this).height();
var overflowContentY = $(".overflowContent").height();
//console.log(contentY);
//console.log(scrollTop + ' >= ' + (overflowContentY - contentY));
if((scrollTop >= (overflowContentY - contentY)) && ajaxContentFlag == "Y"){
ajaxContentFlag = "N";
ajaxPageCounter++;
alert(ajaxPageCounter);
var aIbId = $(".catalog-item-list").attr("ibId");
if($(".catalog-item-list").attr("sId")){
var PSID = "&SID=" + $(".catalog-item-list").attr("sId"); //По id раздела
}
if($(".catalog-item-list").attr("bId")){
var PSID = "&BID=" + $(".catalog-item-list").attr("bId"); //По бренду
}
if($(".catalog-item-list").attr("pt")){
var PSID = "&PT=" + $(".catalog-item-list").attr("pt"); //По дате добавления
}
var aSort = $(".catalog-item-list").attr("sort");
$.ajax({
type: "POST",
url: "/m/ajax/catalogPageMobile.php",
data: "PAGEN_1=" + ajaxPageCounter + "&SORT=" + aSort + "&IBID=" + aIbId + PSID,
success: function(msg){
//alert(123);
//if(msg != prevMsgAjaxPage){
$(".catalog-item-list").append(msg);
prevMsgAjaxPage = msg;
ajaxContentFlag = "Y";
//}
}
});
 
}
    });
 
Код /m/ajax/catalogPageMobile.php
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
if(CModule::IncludeModule("iblock") && CModule::IncludeModule("sale")){
if($_POST["PAGEN_1"]){
$_POST["SID"] = explode("|", $_POST["SID"]);
$_POST["SORT"] = explode("|", $_POST["SORT"]);
$arSort = array($_POST["SORT"][0] => $_POST["SORT"][1]);
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DETAIL_PAGE_URL", "PREVIEW_PICTURE", "IBLOCK_SECTION_ID", "CATALOG_GROUP_1", "CATALOG_GROUP_3", "PROPERTY_*");
$arFilter = Array("IBLOCK_ID" => $_POST["IBID"], "ACTIVE_DATE" => "Y", "ACTIVE" => "Y", "INCLUDE_SUBSECTIONS" => "Y");
if(isset($_POST["SID"])){
$arFilter["SECTION_ID"] = $_POST["SID"];
unset($arFilter["PROPERTY_BRAND"]);
unset($arFilter[">=DATE_CREATE"]);
}
if(isset($_POST["BID"])){
$arFilter["PROPERTY_BRAND"] = $_POST["BID"];
unset($arFilter["SECTION_ID"]);
unset($arFilter[">=DATE_CREATE"]);
}
if(isset($_POST["PT"])){
$arFilter[">=DATE_CREATE"] = ConvertTimeStamp(time()-(86400*$_POST["PT"]))." 00:00:00";
unset($arFilter["SECTION_ID"]);
unset($arFilter["PROPERTY_BRAND"]);
}
//echo "<pre>"; print_r($arFilter); echo "</pre>";
$res = CIBlockElement::GetList($arSort, $arFilter, false, array('nPageSize' => 6, "iNumPage" => $_POST["PAGEN_1"]), $arSelect);
if($res->SelectedRowsCount()){
//echo $_POST["PAGEN_1"];
while($ob = $res->GetNextElement()){
$arFields = $ob->GetFields();
$arProps = $ob->GetProperties();
$resBrand = CIBlockElement::GetByID($arProps["BRAND"]["VALUE"]);
if($ar_res = $resBrand->GetNext()){
$brand = $ar_res['NAME'];
}
$razdel = CIBlockElement::GetElementGroups($arFields["ID"]);
if($arEl = $razdel->GetNext()){
$rsPath = GetIBlockSectionPath($arEl["IBLOCK_ID"], $arEl["ID"]); 
while($arPath=$rsPath->GetNext()) { 
if($arPath["DEPTH_LEVEL"] == 1){
$arFields["DETAIL_PAGE_URL"] = str_replace("/" . $arFields["IBLOCK_TYPE_ID"], "", $arFields["DETAIL_PAGE_URL"]);
$href = "/m/" . $arFields["IBLOCK_TYPE_ID"] . "/" . $arPath["CODE"] . $arFields["DETAIL_PAGE_URL"];
}
}
}
$file = CFile::ResizeImageGet($arFields['PREVIEW_PICTURE'], array('width'=>200, 'height'=>200), BX_RESIZE_IMAGE_PROPORTIONAL, true);?>
<div style="display: inline-block; width: 48%; text-align: center; vertical-align: top;/* padding: 5px 1%;*/">
<a href="<?=$href?>">
<div><img style="width: 100%;" src="<?=$file["src"];?>"></div>
<div style="margin: 5px 0 0 0; font-size: 35px;">
<b><?=$brand;?></b>
</div>
<div style="font-size: 20px;">
<?=$arFields["NAME"];?>
</div>
<div  style="font-size: 20px;">
Цена: <?=$arFields["CATALOG_PRICE_1"];?> руб.
</div>
</a>
</div>
<?//echo "<pre>"; print_r($arFields); echo "</pre>";
}
}
}
}?>

 

спросил 20 Май, 15 от miron8888 (510 баллов)
редактировать 20 Май, 15 от miron8888

2 Ответы

+11 голос
 
Лучший ответ

Очень похоже, что вы при первом скроле передаёте PAGEN_1=1 , а нужно уже следующие товары подгрузить. То есть, в js коде до обработки события ajaxPageCounter=1; попробовать добавить.

ответил 21 Май, 15 от root (25,590 баллов) 1 отметил
выбран 21 Май, 15 от miron8888
Спасибо! Проблема действительно была ajaxPageCounter
00 голосов

Проще говоря:

1) выводим список товаров с помощью bitrix:catalog

2) при прокрутке в самый низ AJAX'ом стучимся в файлик catalogPageMobile.php и предаём туда id инфоблока, id раздела, информацию о том как сортировать и номер страницы товары которой нам надо получить

3) В файле catalogPageMobile.php с помощью CIBlockElement::GetList получаем товары по заданным праметрам и отдаём через AJAX на страницу с товарами

ответил 20 Май, 15 от miron8888 (510 баллов)

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

0 голосов
1 ответ
спросил 18 Фев, 14 от аноним
0 голосов
3 ответов
0 голосов
3 ответов
спросил 18 Фев, 14 от Ye6aK (220 баллов)
0 голосов
4 ответов
спросил 27 Янв, 14 от oPs (380 баллов)