<?
define('NO_AGENT_CHECK', true);
define('DisableEventsCheck', true);
define('NO_KEEP_STATISTIC', true);
define('NO_AGENT_STATISTIC', true);
define('NOT_CHECK_PERMISSIONS', true);
define('STOP_STATISTICS', true);
require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php");
// Дальше подключение компонента который уже подключит все нужные модули
|
use Bitrix\Main,
Bitrix\Main\Loader,
Bitrix\Iblock\ElementTable,
Bitrix\Main\Entity;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
class CUpdateOldestProducts {
const IBLOCK_TYPE = "1c_catalog";
const IBLOCK_DATE_IMPORT_PROPERTY_CODE = "DATE_IMPORT";
private $iNPageSize = 10;
private $arIblockData = array();
private $arIblockIds = array();
/**
* Подключаем модули. Формируем необходимые данные
*
* CUpdateOldestProducts constructor.
* @param int $iTopCount
*/
public function __construct($iTopCount = 10)
{
try {
Loader::IncludeModule("iblock");
} catch (Exception $obException) {
\AddMessage2Log($obException->getMessage(), "iblock");
return false;
}
$rsIblock = \CIBlock::GetList(
array("SORT"=>"ASC"),
array(
"TYPE" => self::IBLOCK_TYPE,
"ACTIVE" => "Y",
)
);
while ($arIblock = $rsIblock->Fetch()) {
$this->arIblockIds[] = $arIblock["ID"];
$rsDataImportProp = \CIBlockProperty::GetList(
array(
"sort" => "asc",
"name" => "asc"
),
array(
"ACTIVE" => "Y",
"IBLOCK_ID" => $arIblock["ID"],
"CODE" => self::IBLOCK_DATE_IMPORT_PROPERTY_CODE
)
);
if ($arDataImportProp = $rsDataImportProp->GetNext()) {
$this->arIblockData[] = array(
"IBLOCK_ID" => $arIblock["ID"],
$arDataImportProp["CODE"] . "_IBLOCK_PROPERTY_ID" => $arDataImportProp["ID"]
);
}
}
$this->iNPageSize = $iTopCount;
return true;
}
/**
* Метод выбирает N товаров с самой старой датой импорта и вызывает для каждого из них метод updateGood
*
* @return bool
*/
public function execute() {
$arRunTime = array();
$arSubFilter = array();
$arSelect = array(
"ID",
"XML_ID",
"IBLOCK_ID",
"DATE_IMPORT"
);
foreach ($this->arIblockData as &$arData) {
try {
// Описываем сущность таблицы со свойством Даты импорта для каждого ИБ.
$obEntityPropDateImport = Entity\Base::compileEntity(
"DATE_IMPORT" . $arData["IBLOCK_ID"],
[
"IBLOCK_ELEMENT_ID" => [
"data_type" => "integer"
],
"PROPERTY_" . $arData[self::IBLOCK_DATE_IMPORT_PROPERTY_CODE . "_IBLOCK_PROPERTY_ID"] => [
"data_type" => "datetime"
],
],
[
"table_name" => sprintf("b_iblock_element_prop_s%s", $arData["IBLOCK_ID"]),
]
);
$arSelect[] = "DATE_IMPORT" . $arData["IBLOCK_ID"] . ".*";
$arSubFilter["!DATE_IMPORT".$arData["IBLOCK_ID"].".PROPERTY_".$arData[self::IBLOCK_DATE_IMPORT_PROPERTY_CODE . "_IBLOCK_PROPERTY_ID"]] = false;
try {
// Джойним таблицу со свойствами
$arRunTime[] = new Entity\ReferenceField(
"DATE_IMPORT" . $arData["IBLOCK_ID"],
$obEntityPropDateImport,
array(
"=this.ID" => "ref.IBLOCK_ELEMENT_ID"
),
array(
"join_type" => "LEFT"
)
);
// Заполняем свойство Даты импорта, конвертируя в число для дальнейшей сортировки по нему
$arRunTime[] = new Entity\ExpressionField(
"DATE_IMPORT",
"%s",
array(
"DATE_IMPORT".$arData["IBLOCK_ID"] . "." . "PROPERTY_".$arData[self::IBLOCK_DATE_IMPORT_PROPERTY_CODE."_IBLOCK_PROPERTY_ID"]
)
);
} catch (Main\ArgumentException $obException) {
\AddMessage2Log($obException->getMessage(), "main");
return false;
}
} catch (Main\ArgumentException $obException) {
\AddMessage2Log($obException->getMessage(), "main");
return false;
}
}
$arFilter = array(
"IBLOCK_ID" => $this->arIblockIds,
$arSubFilter = array_merge($arSubFilter, array("LOGIC" => "OR"))
);
try {
$rsElements = ElementTable::getList([
"select" => $arSelect,
"filter" => $arFilter,
"order" => [
"DATE_IMPORT" => "ASC"
],
"limit" => $this->iNPageSize,
"runtime" => $arRunTime
]);
while ($arElement = $rsElements->fetch()) {
echo"<pre>";print_r($arElement);echo"</pre>";
// TODO: вызвать метод updateGood
}
} catch (Main\ArgumentException $obException) {
\AddMessage2Log($obException->getMessage(), "main");
return false;
}
return true;
}
}
$obUpdateOldestProduct = new \CUpdateOldestProducts(10);
$obUpdateOldestProduct->execute(); |
Array ( [ID] => 30938 [XML_ID] => 2263 [IBLOCK_ID] => 26 [DATE_IMPORT] => [IBLOCK_ELEMENT_DATE_IMPORT24_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT24_PROPERTY_2387] => [IBLOCK_ELEMENT_DATE_IMPORT21_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT21_PROPERTY_2386] => [IBLOCK_ELEMENT_DATE_IMPORT26_IBLOCK_ELEMENT_ID] => 30938 [IBLOCK_ELEMENT_DATE_IMPORT26_PROPERTY_2388] => 2018-11-30 13:29:00 [IBLOCK_ELEMENT_DATE_IMPORT27_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT27_PROPERTY_2389] => [IBLOCK_ELEMENT_DATE_IMPORT28_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT28_PROPERTY_2390] => [IBLOCK_ELEMENT_DATE_IMPORT29_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT29_PROPERTY_2391] => [IBLOCK_ELEMENT_DATE_IMPORT30_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT30_PROPERTY_2392] => [IBLOCK_ELEMENT_DATE_IMPORT106_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT106_PROPERTY_2395] => [IBLOCK_ELEMENT_DATE_IMPORT107_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT107_PROPERTY_2396] => [IBLOCK_ELEMENT_DATE_IMPORT108_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT108_PROPERTY_2397] => [IBLOCK_ELEMENT_DATE_IMPORT109_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT109_PROPERTY_2398] => [IBLOCK_ELEMENT_DATE_IMPORT38_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT38_PROPERTY_2393] => [IBLOCK_ELEMENT_DATE_IMPORT40_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT40_PROPERTY_2394] => ) Array ( [ID] => 46752 [XML_ID] => 2488 [IBLOCK_ID] => 24 [DATE_IMPORT] => 2018-11-07 13:30:00 [IBLOCK_ELEMENT_DATE_IMPORT24_IBLOCK_ELEMENT_ID] => 46752 [IBLOCK_ELEMENT_DATE_IMPORT24_PROPERTY_2387] => 2018-11-07 13:30:00 [IBLOCK_ELEMENT_DATE_IMPORT21_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT21_PROPERTY_2386] => [IBLOCK_ELEMENT_DATE_IMPORT26_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT26_PROPERTY_2388] => [IBLOCK_ELEMENT_DATE_IMPORT27_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT27_PROPERTY_2389] => [IBLOCK_ELEMENT_DATE_IMPORT28_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT28_PROPERTY_2390] => [IBLOCK_ELEMENT_DATE_IMPORT29_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT29_PROPERTY_2391] => [IBLOCK_ELEMENT_DATE_IMPORT30_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT30_PROPERTY_2392] => [IBLOCK_ELEMENT_DATE_IMPORT106_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT106_PROPERTY_2395] => [IBLOCK_ELEMENT_DATE_IMPORT107_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT107_PROPERTY_2396] => [IBLOCK_ELEMENT_DATE_IMPORT108_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT108_PROPERTY_2397] => [IBLOCK_ELEMENT_DATE_IMPORT109_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT109_PROPERTY_2398] => [IBLOCK_ELEMENT_DATE_IMPORT38_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT38_PROPERTY_2393] => [IBLOCK_ELEMENT_DATE_IMPORT40_IBLOCK_ELEMENT_ID] => [IBLOCK_ELEMENT_DATE_IMPORT40_PROPERTY_2394] => ) |
Добрый день!
В компании Sercons открыта вакансия «Программист Битрикс»!
Обязанности:
- Разработка Landing page
- Разработка и поддержка сайтов 1С-Битрикс
- HTML-верстка
- Своевременное добавление / обновление информации на сайтах
Требования:
- Уверенное знание HTML5
- CSS (кроссбраузерная, адаптивная вёрстка)
- Начальное знание JavaScript / PHP – будут плюсом
- Знание библиотек jQuery
- Знание основ MySQL
Условия:
- Заработная плата от 100 000 руб.
- м. Павелецкая шаговая доступность
- Оформление по ТК РФ
- 5/2 с 9 до 18; пятница до 17
- Корпоративный фитнес и английский
Контактное лицо – Ольга
+7 (926) 141-59-96
function getAvailableElementsCount(array $arSections)
{
$res = \Bitrix\Iblock\SectionElementTable::getList(array(
'select' => array('CNT', 'IBLOCK_SECTION_ID'),
'filter' => array(
'IBLOCK_SECTION_ID' => $arSections,
'PRODUCT.AVAILABLE' => 'Y',
'ELEMENT.ACTIVE' => 'Y'
),
'runtime' => array(
new \Bitrix\Main\Entity\ExpressionField('CNT', 'COUNT(*)'),
'PRODUCT' => array(
'data_type' => '\Bitrix\Catalog\ProductTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
),
'ELEMENT' => array(
'data_type' => '\Bitrix\Iblock\ElementTable',
'reference' => array(
'=this.IBLOCK_ELEMENT_ID' => 'ref.ID'
),
'join_type' => 'left'
)
)
));
return $res->fetchAll();
}
|

....
if($USER->IsAuthorized()) {
$arOrder['USER_ID'] = $USER->GetID();
}
CSaleDiscount::DoProcessOrder($arOrder, array(), $arErrors);
|
if (\Bitrix\Main\Loader::includeModule('sale')) {
$basket = \Bitrix\Sale\Basket::loadItemsForFUser(
\CSaleBasket::GetBasketUserID(), "s1")->getOrderableItems();
$discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId(true)));
$discounts->calculate();
$arBasketDiscounts = $discounts->getApplyResult(true);
$sum = 0;
// массив объектов \Bitrix\Sale\BasketItem
$basketItems = $basket->getBasketItems();
/** @var \Bitrix\Sale\BasketItem $basketItem */
foreach ($basketItems as $basketItem ) {
// чтоб в этом цикле их вывести
$basketCode = $basketItem->getBasketCode();
if (isset($arBasketDiscounts["PRICES"]['BASKET'][$basketCode]))
{
$sum += $arBasketDiscounts["PRICES"]['BASKET'][$basketCode]["PRICE"]*$basketItem->getQuantity();
} else {
$sum += $basketItem->getFinalPrice();
}
}
echo number_format($sum, '2', ',', ' ') . ' руб.';
} |
protected function listKeysSignedParameters()
{
return [
'IBLOCK_ID',
'ACTIVE_SECTION_ID'
];
}
|
//Инициализация модуля в шаблоне компонента
new myModule({
csrf: '<?=bitrix_sessid()?>',
signedParameters: '<?=$this->getComponent()->getSignedParameters()?>'
});
|
myModule.prototype.send = function (action, params, callback) {
params.signedParameters = this.options.signedParameters;
params.sessid = this.options.csrf;
params.action= action;
var data = new FormData();
$.each(params, function (i, v) {
data.append( i, v);
});
$.ajax({
url: this.options.ajax,
type: 'POST',
data: data,
success: callback,
processData: false,
contentType: false,
error: function (jqXHR, textStatus, errorThrown) {
$.error('ОШИБКИ AJAX запроса: ' + textStatus );
}
});
}
//Использование send
myModule.prototype.foo = function()
{
this.send('getMyData', {param1: 1, param2: 2}, function(response){
// работаю с ответом
});
}
|