/** * @return bool|int false on error, count of the orders on success (can be 0) */ public static function exportOrders() { set_time_limit(0); $data = array('shop_id' => Options::getShopID(), 'shop_secret' => Options::getShopSecret(), 'orders' => self::getOrdersForExport()); if (count($data['orders']) > 0) { self::sendData($data); } return count($data['orders']); }
/** * get item params for view push * * @param int $id * @param bool $more * @return array */ public static function getItemArray($id, $more = false) { if (isset(self::$itemArraysMoreCache[$id])) { return self::$itemArraysMoreCache[$id]; } if (isset(self::$itemArraysCache[$id]) && !$more) { return self::$itemArraysCache[$id]; } $libProduct = new \CCatalogProduct(); $libIBlockElem = new \CIBlockElement(); $libPrice = new \CPrice(); $item = $libProduct->GetByID($id); // maybe we have complex item, let's find its first child entry if ($item === false) { $list = $libIBlockElem->GetList(array('ID' => 'ASC'), array('PROPERTY_CML2_LINK' => $id)); if ($itemBlock = $list->Fetch()) { $item = $libProduct->GetByID($itemBlock['ID']); } else { return null; // c'est la vie } // now $item points to the earliest child } else { // we have simple item or child $itemBlock = $libIBlockElem->GetByID($id)->Fetch(); $itemFull = $libProduct->GetByIDEx($id); if (!empty($itemFull['PROPERTIES']['CML2_LINK']['VALUE'])) { $id = $itemFull['PROPERTIES']['CML2_LINK']['VALUE']; } // set id of the parent if we have child } $return = array('item_id' => intval($id)); if (empty($item)) { return null; } // Get categories $categories = array(); $item_categories = CIBlockElement::GetElementGroups($id, true); while ($category = $item_categories->Fetch()) { $categories[] = $category['ID']; } $return['categories'] = $categories; $has_price = false; $return['price'] = self::getFinalPriceInCurrency($return['item_id'], self::getSaleCurrency()); if (!empty($return['price'])) { $has_price = true; } if (isset($item['QUANTITY'])) { $quantity = $item['QUANTITY'] > 0; $return['is_available'] = $quantity && $has_price ? 1 : 0; } if (Options::getRecommendNonAvailable()) { $return['is_available'] = 1; } if ($more) { $libMain = new \CMain(); $libFile = new \CFile(); $itemFull = $libProduct->GetByIDEx($id); $host = ($libMain->IsHTTPS() ? 'https://' : 'http://') . SITE_SERVER_NAME; $return['name'] = $itemFull['NAME']; $return['url'] = $host . $itemFull['DETAIL_PAGE_URL']; $picture_id = Data::getProductPhotoId($id); if ($picture_id !== null) { $return['image_url'] = $host . $libFile->GetPath($picture_id); } self::$itemArraysMoreCache[$id] = $return; } else { self::$itemArraysCache[$id] = $return; } return $return; }
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 }
</div> <div style="margin-top: 40px; display: none;"> <label for="REES46_css"><?= GetMessage('REES_OPTIONS_CSS_FIELD') ?></label> <br/> <textarea id="REES46_css" style="width: 500px; height: 250px;" name="css"><?= strip_tags(\Rees46\Options::getRecommenderCSS()) ?></textarea> </div> <?php $tabControl->BeginNextTab(); ?> <?php if ($export_state === \Rees46\Service\Export::STATUS_NOT_PERFORMED): ?> <p> <?= GetMessage('REES_QUICK_EXPORT_DESC') ?> </p> <?php if(\Rees46\Options::getShopSecret() == ''): ?> <p><strong><?= GetMessage('REES_QUICK_EXPORT_DESC_NO_SECRET') ?></strong></p> <?php else: ?> <div> <input class="adm-btn-save" type="submit" value="<?= GetMessage('REES_QUICK_EXPORT_BUTTON') ?>" name="do_export"> </div> <?php endif ?> <?php elseif ($export_state === \Rees46\Service\Export::STATUS_SUCCESS && $export_count === 0): ?> <div> <?= GetMessage('REES_QUICK_EXPORT_EMPTY') ?> </div> <?php elseif ($export_state === \Rees46\Service\Export::STATUS_SUCCESS && $export_count !== 0): ?> <div> <?= GetMessage('REES_QUICK_EXPORT_SUCCESS') ?> </div>
public static function showRecommenderCSS() { global $APPLICATION; static $css_sent = false; $shop_id = Options::getShopID(); if ($APPLICATION && $shop_id && $css_sent === false) { $APPLICATION->AddHeadString('<link href="http://rees46.com/shop_css/' . $shop_id . '" rel="stylesheet" type="text/css" />'); } $css_sent = true; // $prefix = SITE_DIR ?: '/'; // // if ($APPLICATION && $css_sent === false) { // $APPLICATION->AddHeadString('<link href="'. $prefix .'include/rees46-handler.php?action=css" rel="stylesheet" />'); // $css_sent = true; // } }
public static function renderCss() { header('Content-type: text/css'); echo Options::getRecommenderCSS(); }
/** * handler for include/rees46-recommender.php, render recommenders */ public static function run() { CModule::IncludeModule('catalog'); CModule::IncludeModule('sale'); CModule::IncludeModule("iblock"); global $USER; $recommended_by = ''; // get recommender name if (isset($_REQUEST['recommended_by'])) { $recommender = strval($_REQUEST['recommended_by']); $recommended_by = '?recommended_by=' . urlencode($recommender); switch ($recommender) { case 'buying_now': $recommender_title = GetMessage('REES_INCLUDE_BUYING_NOW'); break; case 'see_also': $recommender_title = GetMessage('REES_INCLUDE_SEE_ALSO'); break; case 'recently_viewed': $recommender_title = GetMessage('REES_INCLUDE_RECENTLY_VIEWED'); break; case 'also_bought': $recommender_title = GetMessage('REES_INCLUDE_ALSO_BOUGHT'); break; case 'similar': $recommender_title = GetMessage('REES_INCLUDE_SIMILAR'); break; case 'interesting': $recommender_title = GetMessage('REES_INCLUDE_INTERESTING'); break; case 'popular': $recommender_title = GetMessage('REES_INCLUDE_POPULAR'); break; default: $recommender_title = ''; } } $libCatalogProduct = new CCatalogProduct(); $libFile = new CFile(); // render items if (isset($_REQUEST['recommended_items']) && is_array($_REQUEST['recommended_items']) && count($_REQUEST['recommended_items']) > 0) { $found_items = 0; // Currency to display $sale_currency = Data::getSaleCurrency(); $html = ''; $html .= '<div class="recommender-block-title">' . $recommender_title . '</div>'; $html .= '<div class="recommended-items">'; foreach ($_REQUEST['recommended_items'] as $item_id) { $item_id = intval($item_id); $item = $libCatalogProduct->GetByIDEx($item_id); // Get price $final_price = Data::getFinalPriceInCurrency($item_id, $sale_currency); // Check price if ($final_price == false) { continue; } // Url to product with recommended_by attribute $link = $item['DETAIL_PAGE_URL'] . $recommended_by; // Get photo $picture_id = Data::getProductPhotoId($item_id); if ($picture_id === null) { continue; } $file = $libFile->ResizeImageGet($picture_id, array('width' => Options::getImageWidth(), 'height' => Options::getImageHeight()), BX_RESIZE_IMAGE_PROPORTIONAL, true); $html .= '<div class="recommended-item"> <div class="recommended-item-photo"><a href="' . $link . '"><img src="' . $file['src'] . '" class="item_img"/></a></div> <div class="recommended-item-title"><a href="' . $link . '">' . $item['NAME'] . '</a></div> ' . ($final_price ? '<div class="recommended-item-price">' . CCurrencyLang::CurrencyFormat($final_price, $sale_currency, true) . '</div>' : '') . ' <div class="recommended-item-action"><a href="' . $link . '">' . GetMessage('REES_INCLUDE_MORE') . '</a></div> </div>'; $found_items++; } $html .= '</div>'; if ($found_items > 0) { echo $html; } } }