public static function run($arParams)
    {
        if (isset($arParams['recommender'])) {
            $recommender = $arParams['recommender'];
        } else {
            error_log('recommender not specified');
            return;
        }
        $params = isset($arParams['params']) ? $arParams['params'] : array();
        // get current cart items
        $cart = Functions::getCartItemIds();
        if (isset($params['cart']) === false) {
            $params['cart'] = $cart;
        }
        if (empty($params['item_id']) === false) {
            $params['item_id'] = Functions::getRealItemID($params['item_id']);
        }
        if (empty($params['cart']) === false) {
            $params['cart'] = Functions::getRealItemIDsArray($params['cart']);
        }
        $jsonParams = array('recommender_type' => $recommender, 'limit' => Options::getRecommendCount());
        // check required params for recommenders
        switch ($recommender) {
            case 'buying_now':
                if (isset($params['cart']) && is_array($params['cart'])) {
                    $jsonParams['cart'] = array_values($params['cart']);
                }
                if (isset($params['item_id']) && is_numeric($params['item_id'])) {
                    $jsonParams['item'] = json_encode($params['item_id']);
                }
                break;
            case 'see_also':
                if (isset($params['cart']) && is_array($params['cart'])) {
                    $jsonParams['cart'] = array_values($params['cart']);
                } else {
                    error_log('recommender see_also requires cart');
                    return;
                }
                break;
            case 'recently_viewed':
                if (isset($params['cart']) && is_array($params['cart'])) {
                    $jsonParams['cart'] = array_values($params['cart']);
                }
                // cart is not required
                break;
            case 'also_bought':
                if (isset($params['item_id']) && is_numeric($params['item_id'])) {
                    $jsonParams['item'] = json_encode($params['item_id']);
                } else {
                    error_log('recommender also_bought requires item_id');
                    return;
                }
                break;
            case 'similar':
                if (isset($params['item_id']) && is_numeric($params['item_id'])) {
                    $jsonParams['item'] = json_encode($params['item_id']);
                } else {
                    error_log('recommender similar requires item_id');
                    return;
                }
                // params2
                if (isset($params['cart']) && is_array($params['cart'])) {
                    $jsonParams['cart'] = array_values($params['cart']);
                }
                // cart is not required
                break;
            case 'interesting':
                // no params
                break;
            case 'popular':
                if (isset($params['category'])) {
                    $jsonParams['category'] = intval($params['category']);
                }
                break;
            default:
                error_log('unknown recommender: ' . $recommender);
        }
        $uniqid = uniqid('rees46-recommend-');
        // render recommender placeholder and corresponding js
        ?>
		<div id="<?php 
        echo $uniqid;
        ?>
" class="rees46-recommend"></div>
		<script>
			BX.ready(function(){
				REES46.addReadyListener(function () {
					REES46.recommend(<?php 
        echo json_encode($jsonParams);
        ?>
, function (items) {
						if (items.length > 0) {

							var data_string = BX.ajax.prepareData({
								action: 'recommend',
								recommended_by: <?php 
        echo json_encode($recommender);
        ?>
,
								recommended_items: items
							});

							BX.ajax({
								url: '<?php 
        echo SITE_DIR;
        ?>
include/rees46-handler.php?' + data_string,
								method: 'GET',
								dataType: 'html',
								async: true,
								onsuccess: function (html) {
									if (REES46.showPromotion) {
										html = html + REES46.getPromotionBlock();
									}
									BX('<?php 
        echo $uniqid;
        ?>
').innerHTML = html;
								}
							});
						}
					});
				});
			});
		</script>
	<?php 
    }
Beispiel #2
0
	</div>

	<div style="margin-top: 10px;">
		<label for="REES46_shopsecret"><?= GetMessage('REES_OPTIONS_SHOP_SECRET') ?></label>
		<br/>
		<input type="text" id="REES46_shopsecret" value="<?= \Rees46\Options::getShopSecret() ?>" name="shop_secret" style="width: 300px"/>
	</div>

	<div style="margin-top: 60px;">
		<table>
			<tr>
				<td style="padding-left: 0">
					<label for="REES46_recommend_count"><?= GetMessage('REES_OPTIONS_RECOMMEND_COUNT') ?></label>
				</td>
				<td style="padding-left: 10px">
					<input type="text" id="REES46_recommend_count" value="<?= \Rees46\Options::getRecommendCount() ?>" name="recommend_count" style="width: 50px"/>
				</td>
			</tr>
			<tr>
				<td style="padding-left: 0">
					<label for="REES46_recommend_nonavailable"><?= GetMessage('REES_OPTIONS_RECOMMEND_NONAVAILABLE') ?></label>
				</td>
				<td style="padding-left: 10px">
					<input type="checkbox" id="REES46_recommend_nonavailable" value="1" <?php if (\Rees46\Options::getRecommendNonAvailable()): ?>checked="checked"<? endif ?> name="recommend_nonavailable" style="margin: 0"/>
				</td>
			</tr>
	</div>

	<?php $tabControl->BeginNextTab(); ?>

	<div>