$service = \Bitrix\Sale\Delivery\Services\Manager::getById($deliveryId);
$deliveryData = [
'DELIVERY_ID' => $service['ID'],
'DELIVERY_NAME' => $service['NAME'],
'ALLOW_DELIVERY' => 'Y',
'PRICE_DELIVERY' => $deliveryPrice,
'CUSTOM_PRICE_DELIVERY' => 'Y'
];
$shipment->setFields($deliveryData);
/etc/cron.d
- здесь можно создавать файлы с заданиями крону, которые он будет загружать и исполнять по указанному расписанию. в этих файлах нужно указывать пользователя, от имени которого будет исполнено задание*/10 * * * * root /root/backup.db.sh
/etc/cron.daily
, /etc/cron.hourly
, /etc/cron.monthly
, /etc/cron.weekly
- здесь кладем скрипты, которые будут исполняться ежедневно, ежечасно, ежемесячно и еженедельно. это такие себе подготовленные расписания, которые подгружаются и исполняются в определенное времяcrontab -e
- исполнение этой команды с ключом откроет текстовый редактор для редактирования заданий крону текущего пользователя. будьте внимательны - эти задания относятся к текущему пользователю и будут исполняться от его имени/etc/cron.d
CModule::IncludeModule("catalog");
$products = [537, 547];
$amount = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => [
'PRODUCT_ID' => $products
]
])->fetchAll();
print_r($amount);
$rsProp = CIBlockElement::GetProperty($IBLOCK_ID, $ELEMENT_ID, array('sort' => 'asc'), array('CODE' => 'FILES'));
while($arProp = $rsProp->Fetch())
$PROPERTY_VALUE[$arProp['PROPERTY_VALUE_ID']] = array('VALUE' => array('del'=>'Y'));
$PROPERTY_VALUE[] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/new_image.jpg");
CIBlockElement::SetPropertyValues($ELEMENT_ID, $IBLOCK_ID, $PROPERTY_VALUE, 'FILES');
$ibpenum = new CIBlockPropertyEnum;
if($PropID = $ibpenum->Add()
{CIBlockElement::SetPropertyValues
RewriteCond %{REQUEST_URI} !$ваш_урл1$ [NC,OR]
RewriteCond %{REQUEST_URI} !$ваш_урл2$ [NC,OR]
RewriteCond %{REQUEST_URI} !$ваш_урл3$ [NC,OR]
RewriteCond %{REQUEST_URI} !$ваш_урл4$ [NC]
# Последний без OR поскольку нет следующего или просто NC
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
<?php
$token = '**************************************';
$group_id = '1111111';
$vk = new Vk($token);
$image_path = 'image.png';
copy('https://www.google.ru/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 'image.png');
$upload_server = $vk->photosGetWallUploadServer($group_id);
$upload = $vk->uploadFile($upload_server['upload_url'], $image_path);
$save = $vk->photosSaveWallPhoto([
'group_id' => $group_id,
'photo' => $upload['photo'],
'server' => $upload['server'],
'hash' => $upload['hash']
]
);
$attachments = sprintf('photo%s_%s', $save[0]['owner_id'], $save[0]['id']);
$post = $vk->wallPost([
'owner_id' => "-$group_id",
'from_group' => 1,
'message' => "блаблабла",
'attachments' => $attachments
]);
class Vk
{
private $token;
private $v = '5.37';
public function __construct($token)
{
$this->token = $token;
}
public function wallPost($data)
{
return $this->request('wall.post', $data);
}
public function photosGetWallUploadServer($group_id)
{
$params = [
'group_id' => $group_id,
];
return $this->request('photos.getWallUploadServer', $params);
}
/**
* @param $params [user_id, group_id, photo, server, hash]
* @return mixed
* @throws \Exception
*/
public function photosSaveWallPhoto($params)
{
return $this->request('photos.saveWallPhoto', $params);
}
public function uploadFile($url, $path)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
if (class_exists('\CURLFile')) {
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => new \CURLFile($path)]);
} else {
curl_setopt($ch, CURLOPT_POSTFIELDS, ['file1' => "@$path"]);
}
$data = curl_exec($ch);
curl_close($ch);
return json_decode($data, true);
}
private function request($method, array $params)
{
$params['v'] = $this->v;
$ch = curl_init('https://api.vk.com/method/' . $method . '?access_token=' . $this->token);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data, true);
if (!isset($json['response'])) {
throw new \Exception($data);
}
usleep(mt_rand(1000000, 2000000));
return $json['response'];
}
}
$view
, получили название шаблона.// Исключаем поиск по описаниям
AddEventHandler("search", "BeforeIndex", array("SearchHandlers", "BeforeIndexHandler"));
class SearchHandlers
{
function BeforeIndexHandler($arFields)
{
if($arFields["MODULE_ID"] == "iblock")
{
if(array_key_exists("BODY", $arFields) && substr($arFields["ITEM_ID"], 0, 1) != "S") // Только для элементов
{
$arFields["BODY"] = "";
}
if (substr($arFields["ITEM_ID"], 0, 1) == "S") // Только для разделов
{
$arFields['TITLE'] = "";
$arFields["BODY"] = "";
$arFields['TAGS'] = "";
}
}
return $arFields;
}
}
public static function OnBasketUpdateHandler($ID, $arItem)
{
global $USER;
if(!is_object($USER)){
$USER = new CUser();
}
$userId=$USER->GetID();
$strGroups = $USER->GetUserGroupString();
$arUserGroups = explode(',', $strGroups);
$productID = $arItem['PRODUCT_ID'];
$quantity = $arItem['QUANTITY'];
if ($userId=="81035" ){//Пока выводим только для меня
\Bitrix\Main\Loader::IncludeModule('iblock');
\Bitrix\Main\Loader::IncludeModule('catalog');
\Bitrix\Main\Loader::IncludeModule('sale');
$fuser=\Bitrix\Sale\Fuser::getId();
$basket = \Bitrix\Sale\Basket::loadItemsForFUser( $fuser, \Bitrix\Main\Context::getCurrent()->getSite() );
$res=[];
$tovar=[];
foreach ($basket as $basketItem) {
if(!$basketItem->isDelay()){
$mxResult=[];
$aa = \CCatalogSku::GetProductInfo($basketItem->getProductId())['ID'];
$mxResult[$aa] = $aa;
\CIBlockElement::GetPropertyValuesArray($mxResult, 26, array(
'ID' => $mxResult,
'IBLOCK_ID' => 26,
));
$raschet='';
if(in_array($mxResult[$aa]['ROZNICHNAYA_SET']['VALUE_ENUM_ID'], [1753,1754]) && $mxResult[$aa]['RASPRODAZHA']['VALUE']=='true'){$raschet='raschet';}
$basketPropertyCollection = $basketItem->getPropertyCollection();
$res[]=[$basketItem->getProductId(),$basketItem->getPrice(), $basketItem->getQuantity(), $basketItem->getFinalPrice(), $basketPropertyCollection->getPropertyValues()['BAR_CODE']['VALUE'], $raschet];
$tovar[]=$basketPropertyCollection->getPropertyValues()['BAR_CODE']['VALUE'];
}
}
$coli=[];
$coli0=[];
foreach($res as $vl){
if($vl[5]=='raschet'){
for ($x=1; $x<=$vl[2]; $x++){
$coli[]=[$vl[0],$vl[1],$vl[5]];
}
}else{
$coli0[]=[$vl[0],$vl[1],$vl[5]];
}
}
$cont=count($coli);
usort($coli, function($a, $b){
return $a['1'] <=> $b['1'];
});
$skidka = floor($cont / 3);
for ($x=0; $x<$skidka; $x++){
$coli[$x][1]=0;
}
$coli = array_reverse($coli)+$coli0;
$arFilter = Array( "IBLOCK_ID"=>27, "PROPERTY_CML2_BAR_CODE"=>$tovar );
$res = \CIBlockElement::GetList(Array("SORT"=>"ASC",), $arFilter, false,false,array('ID',"PROPERTY_CML2_BAR_CODE",'CATALOG_QUANTITY','PROPERTY_CML2_LINK','IBLOCK_EXTERNAL_ID','XML_ID'));
$productsId=[];
$productsIdXml=[];
while($ar_fields = $res->GetNext())
{
$productsId[$ar_fields["PROPERTY_CML2_BAR_CODE_VALUE"]]=$ar_fields['ID'];
$productsIdXml[$ar_fields["PROPERTY_CML2_BAR_CODE_VALUE"]]=['IBLOCK_EXTERNAL_ID'=>$ar_fields['IBLOCK_EXTERNAL_ID'],'XML_ID'=>$ar_fields['XML_ID']];
$productsIdXml2[$ar_fields["ID"]]=['IBLOCK_EXTERNAL_ID'=>$ar_fields['IBLOCK_EXTERNAL_ID'],'XML_ID'=>$ar_fields['XML_ID']];
}
$itogTovar=[];
foreach($coli as $val){
$itogTovar[$val[0]][$val[1]]++;
}
$itogo=[];
foreach($itogTovar as $productID0=>$value){
$itogo[$productID0]['price']=0;
$itogo[$productID0]['quantity']=0;
$itogo[$productID0]['custom']='N';
foreach($value as $price0=>$qunt0){
if($price0>0){
$arPrice0 = \bh\catalog\tools::getPrc($productID0);
$itogo[$productID0]['price']=$itogo[$productID0]['price']+$arPrice0*$qunt0;
$itogo[$productID0]['quantity']=$itogo[$productID0]['quantity']+$qunt0;
}else{
$itogo[$productID0]['quantity']=$itogo[$productID0]['quantity']+$qunt0;
$itogo[$productID0]['custom']='Y';
}
}
$itogo[$productID0]['price']=floor($itogo[$productID0]['price']/$itogo[$productID0]['quantity']);
}
foreach ($basket as $basketItem) {
$id=$basketItem->getField('PRODUCT_ID');
if($itogo[$id]['custom']=='Y'){
$basketItem->setFields(array(
'CUSTOM_PRICE' => 'Y',
'PRICE' => $itogo[$id]['price'],
'CATALOG_XML_ID'=>$productsIdXml2[$id]['IBLOCK_EXTERNAL_ID'],
'PRODUCT_XML_ID'=>$productsIdXml2[$id]['XML_ID']
));
$basketItem->save();
$basketPropertyCollection = $basketItem->getPropertyCollection();
$basketPropertyCollection->setProperty(array(
'ACTION'=>array(
'NAME' => 'Акция',
'CODE' => 'ACTION',
'VALUE' => 'Товар по акции 2=3',
'SORT' => 1000,
),
'CATALOG_XML_ID'=>array(
'NAME' => 'Catalog XML_ID',
'CODE' => 'CATALOG.XML_ID',
'VALUE' => $productsIdXml2[$id]['IBLOCK_EXTERNAL_ID']
),
'PRODUCT_XML_ID'=>array(
"NAME" => "Product XML_ID",
"CODE" => "PRODUCT.XML_ID",
"VALUE" => $productsIdXml2[$id]['XML_ID']
)
));
$basketPropertyCollection->save();
}else{
$basketItem->setFields(array(
'CATALOG_XML_ID'=>$productsIdXml2[$id]['IBLOCK_EXTERNAL_ID'],
'PRODUCT_XML_ID'=>$productsIdXml2[$id]['XML_ID']
));
$basketItem->save();
$basketPropertyCollection = $basketItem->getPropertyCollection();
$basketPropertyCollection->setProperty(array(
'CATALOG_XML_ID'=>array(
'NAME' => 'Catalog XML_ID',
'CODE' => 'CATALOG.XML_ID',
'VALUE' => $productsIdXml2[$id]['IBLOCK_EXTERNAL_ID']
),
'PRODUCT_XML_ID'=>array(
"NAME" => "Product XML_ID",
"CODE" => "PRODUCT.XML_ID",
"VALUE" => $productsIdXml2[$id]['XML_ID']
)
));
$basketPropertyCollection->save();
}
}
}
}