function t_me($tgText, $files=false, $chats_id = ["-xxx"]){
$token = "11111:aaaaa";
$site = $_SERVER['SERVER_NAME'];//$_SERVER['HTTP_ORIGIN']
foreach ($chats_id as $chat) {
$url = "https://api.telegram.org/bot{$token}/sendMessage";
$arrayQuery = [
"chat_id" => $chat,
"text" => $tgText.$site . $files[0],
"parse_mode" => "html",
"message_thread_id"=> 2//id нужного топика
];
if (is_array($files)) {
if(count($files) == 1) {
$url = 'https://api.telegram.org/bot' . $token . '/sendDocument';
$arrayQuery['document'] = $site . $files[0];
$arrayQuery["caption"] = $tgText;
}else {
$arMedia = array();
$url = 'https://api.telegram.org/bot' . $token . '/sendMediaGroup';
foreach ($files as $key => $path) {
if($key == 0) {
$arMedia[] = array('type' => 'photo', 'media' => $site.$path, "caption" => $tgText, "parse_mode"=>"html");
}else{
$arMedia[] = array('type' => 'photo', 'media' => $site.$path);
}
}
$arrayQuery['media'] = json_encode( $arMedia );
}
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close ($ch);
return $res;
}
}
вторник, 4 октября 2022 г.
send telegram
среда, 20 июля 2022 г.
Обрезать изображение
$arFile = CFile::GetFileArray($file_id);
$renderImg = CFile::ResizeImageGet($arFile, Array("width" => 170, "height" => 117));
вывод
$renderImg['src']
вторник, 31 мая 2022 г.
bitrix парсер телефона
подключаем
use Bitrix\Main\UserPhoneAuthTable;
use Bitrix\Main\Analytics\Catalog;
$phone = '+7 999 999-99-99';
var_dump(Bitrix\Main\UserPhoneAuthTable::normalizePhoneNumber($phone, 'ru'));//+79999999999
var_dump(Bitrix\Main\Analytics\Catalog::normalizePhoneNumber($phone));//79999999999
понедельник, 25 апреля 2022 г.
универсальный print_r для bitrix
пихаем в inti
function printr($array) {
//GLOBAL $USER;
//if (!$USER->IsAdmin()) return false;
if (!is_array($array)) return false;
$args = func_get_args();
if (count($args) > 1) {
foreach ($args as $values)
printr($values);
} else {
echo "<pre>";
print_r($array);
echo "</pre>";
}
}
// printr($arr1,$arr2);
/**************************** КОНЕЦ универсальный print_r**********************************/
четверг, 24 марта 2022 г.
Шпора по JS
загрузка документа
(() => {
})();
слушать click, keyup, change и др
document.addEventListener('click', async (event) => {
if (event.target.closest('.set-item__add')) {
if (!event.target.closest('.set-item__add')) return;
const block = event.target.closest('.set-item');
const elem = block.getAttribute('data-elem');
}
})
Подниматься выше по дереву пока не встретишь родителя
const block = event.target.closest('.set-item');
ajax
$.ajax({
url: "json/save_global_box.php",
type: "POST",
dataType: "json",
data: { 'global_box_id': global_box_id, 'title': title, "box_id": box_id },
success: function (datajson) {
$.fancybox.close();
if (!datajson.status) {
document.location.href = "?ID=" + datajson.id;
}
}
});
fetch
const form = document.querySelector(".form-dialog-content");
let url = "/ajax/forms/add_protocol_post.php";
let successUrl = "/ajax/forms/custom_success.php";
form.addEventListener('submit', function (e){
e.preventDefault();
const formData = new FormData(e.target)
formData.append('key1', 'value1');fetch(url,{
method:'post',
body:formData
})
.then((response)=>response.json())
.then((result)=>{
console.log(result);
if(result.status === 200){
setTimeout(window.location.reload(), 3000);
}else{
document.getElementById("err_form").innerHTML = result.error;
}
})
})
четверг, 23 сентября 2021 г.
Bitrix Генерация sitemap из highloadblock
Появилась задача добавить в карту сайта ссылки из HL
<?php
use \Bitrix\Main\Application;
use \Bitrix\Main\IO\File;
use \Bitrix\Seo\SitemapRuntime;
use \Bitrix\Seo\SitemapIndex;
use Bitrix\Highloadblock\HighloadBlockTable as HLBT;
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
$arSitemapSettings = array('SITE_ID' => 's1', 'PROTOCOL' => 'https', 'DOMAIN' => 'vash_site.ru');
$sitemapFile = new SitemapRuntime(1, 'sitemap-hl.xml', $arSitemapSettings );//создание нового xml
CModule::IncludeModule('highloadblock');
function GetEntityDataClass($HlBlockId) {
if (empty($HlBlockId) || $HlBlockId < 1) {return false; }
$hlblock = HLBT::getById($HlBlockId)->fetch();
$entity = HLBT::compileEntity($hlblock);
$entity_data_class = $entity->getDataClass();
return $entity_data_class;
}
$entity_data_class = GetEntityDataClass(6);//нужный hl
$rsData = $entity_data_class::getList(array('order' => array('ID'=>'ASC'), 'select' => array('UF_URL')));
while($el = $rsData->fetch()){
$sitemapFile->appendIBlockEntry($el['UF_URL'], getmicrotime());//добавляем url в xml
$sitemapFile->finish();
}
//Добавим новый xml в sitemap.xml
$sitemapFile = new SitemapIndex('sitemap.xml', $arSitemapSettings);
$arFiles = new \Bitrix\Main\IO\File($_SERVER["DOCUMENT_ROOT"] . '/sitemap-hl.xml', 's1');
$sitemapFile->appendIndexEntry($arFiles);
Теперь можно запихнуть это в крон или нужное вам место
среда, 22 сентября 2021 г.
Bitrix оплата половины заказа баллами
Итак задача: при заказе если человек использует внутренний счёт можно оплатить только половину заказа без учёта доставки
например заказан товар на 120р
доставка 270
итого 390руб
пользователь может оплатить баллами не больше половины заказа т.е. 60руб от 120руб
для начала копируем весь компонент(не только шаблон)
/bitrix/components/bitrix/sale.order.ajax/
к себе например
/bitrix/components/my/sale.order.ajax/
*my вы создаёте сами
дальше чтобы не путаться переименовал шаблон .default в custom
/bitrix/components/my/sale.order.ajax/templates/.default
в
/bitrix/components/my/sale.order.ajax/templates/custom
в файле .parameters.php добавляем поле для управления сколько процентов пользователь может потратить на заказ
$arTemplateParameters["MAXPAYINNER"] = array(
"NAME" => 'Максимальный % оплатой баллами',
"TYPE" => "STRING",
"DEFAULT" => 100
);
тут можно сразу указать процент в нашем случае это будет 50
дальше открываем файл /bitrix/components/my/sale.order.ajax/ajax.php внизу прописываем наш шаблон должно получиться так
$APPLICATION->IncludeComponent(
'my:sale.order.ajax',
'custom',
$params
);
и последний файл /bitrix/components/my/sale.order.ajax/class.php собственно из за него и пришлось копировать весь компонент
ищем protected function obtainPaySystem()
меняем
$arResult['PAYED_FROM_ACCOUNT_FORMATED'] = SaleFormatCurrency($innerPayment->getSum(), $this->order->getCurrency());
$arResult['ORDER_TOTAL_LEFT_TO_PAY'] = $this->order->getPrice() - $innerPayment->getSum();
$arResult['ORDER_TOTAL_LEFT_TO_PAY_FORMATED'] = SaleFormatCurrency($this->order->getPrice() - $innerPayment->getSum(), $this->order->getCurrency());
на
$maxPayInner = ($this->arParams['MAXPAYINNER'] > 0)? $this->arParams['MAXPAYINNER'] : 100;
$halfTotalPrice = ($this->order->getPrice()-$this->order->getDeliveryPrice())*$maxPayInner/100;
if ($halfTotalPrice >= $innerPayment->getSum()) {
$arResult['PAYED_FROM_ACCOUNT_FORMATED'] = SaleFormatCurrency($innerPayment->getSum(), $this->order->getCurrency());
$arResult['ORDER_TOTAL_LEFT_TO_PAY'] = $this->order->getPrice() - $innerPayment->getSum();
$arResult['ORDER_TOTAL_LEFT_TO_PAY_FORMATED'] = SaleFormatCurrency($this->order->getPrice() - $innerPayment->getSum(), $this->order->getCurrency());
}else{
$arResult['PAYED_FROM_ACCOUNT_FORMATED'] = SaleFormatCurrency($halfTotalPrice, $this->order->getCurrency());
$arResult['ORDER_TOTAL_LEFT_TO_PAY'] = $halfTotalPrice + $this->order->getDeliveryPrice();
$arResult['ORDER_TOTAL_LEFT_TO_PAY_FORMATED'] = SaleFormatCurrency($halfTotalPrice + $this->order->getDeliveryPrice(), $this->order->getCurrency());
}
теперь ищем
$remainingSum = empty($innerPayment) ? $order->getPrice() : $order->getPrice() - $innerPayment->getSum();
заменяем на
if (!empty($innerPayment)) {
$maxPayInner = ($this->arParams['MAXPAYINNER'] > 0)? $this->arParams['MAXPAYINNER'] : 100;
$halfTotalPrice = ($order->getPrice()-$order->getDeliveryPrice())*$maxPayInner/100;
if ($halfTotalPrice >= $innerPayment->getSum()) {
$remainingSum = $order->getPrice() - $innerPayment->getSum();
}else{
$remainingSum = $halfTotalPrice + $order->getDeliveryPrice();
}
}else{
$remainingSum = $order->getPrice();
}
Всё применяем новый шаблон, устанавливаем максимальный процент(если процент не установлен или равен 0 то пользователь может оплатить полный заказ без учета доставки)