gastor-git
3/31/2017 - 5:24 AM

Просмотренные товары

Просмотренные товары

<?php

/*
 * Класс формирует массив ID просмотренных товаров.
 */

namespace Fismart\Core;

use Bitrix\Catalog\CatalogViewedProductTable;

class ViewProduct
{
    /**
     * @param int $limit
     * @param null|int $userId
     *
     * @return array
     */
    public function getLastProductIds($limit = 10, $userId = null)
    {
        $result = array();
        $fuserId = \CSaleBasket::GetBasketUserID();
        if ($userId && $userId > 0) {
            $fuserId = $userId;
        }

        $viewedIterator = CatalogViewedProductTable::getList(array(
            'order' => array('DATE_VISIT' => 'DESC'),
            'filter' => array('FUSER_ID' => $fuserId, 'SITE_ID' => SITE_ID),
            'select' => array('ID', 'PRODUCT_ID'),
            'limit' => $limit,
        ));

        while($arItem = $viewedIterator->fetch()) {
            $result[] = $arItem['PRODUCT_ID'];
        }

        return $result;
    }
}
<?php // catalog/element.php - там где нужно вывести viewed products
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
  die();
  
use Fismart\Core\ViewProduct;

<?/*------------------- ... ---------------------------*/?>
<?/*---------- вывод просмотренных товаров ------------*/?>

// собираем ID просмотренных товаров
$viewProduct = new ViewProduct();
$arViewed = $viewProduct->getLastProductIds();

// формируем фильтр
if (!empty($arViewed)) {
    
    global $arrFilter;
    $arrFilter["ID"] = $arViewed;
    $arrFilter["!ID"] = $ElementID;
    $arrFilter['>CATALOG_QUANTITY'] = 0;

    \Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID('watched');?>
    <?$APPLICATION->IncludeComponent(
        "bitrix:catalog.section",
        "",
        Array(
            // ........  
            "FILTER_NAME" => "arrFilter",
            // ........
        )
    );?>
    <?\Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID('watched', '');
  } else {
    echo "<p class='non-items'>В вашем списке еще нет товаров.</p>";
  }?>
</div>

<?php
// в шаблон catalog.element добавляем скрипт
?>
<script type="text/javascript">
    var viewedCounter = {
        path: '/bitrix/components/bitrix/catalog.element/ajax.php',
        params: {
            AJAX: 'Y',
            SITE_ID: "<?= SITE_ID ?>",
            PRODUCT_ID: "<?= $arResult['ID'] ?>",
            PARENT_ID: "<?= $arResult['ID'] ?>"
        }
    };
    BX.ready(
        BX.defer(function(){
            BX.ajax.post(
                viewedCounter.path,
                viewedCounter.params
            );
        })
	
    );
</script>