Михаил Базаров: Сообщения

Михаил Базаров

Дата последнего входа: вчера в 16:51
Дата регистрации: 7 февраля 2012 21:17
День рождения: 7 ноября
Пол: Мужской
показать полностью
Михаил Базаров -> Всем
вчера, 2:45 am
Очистка Hiload-блока через API битрикс
CModule::IncludeModule('highloadblock');
use Bitrix\Highloadblock as HL;
use Bitrix\Main\Entity;

$hlblockId = HL\HighloadBlockTable::getById(4)->fetch();
$entity = HL\HighloadBlockTable::compileEntity($hlblockId);
$entity_data_class = $entity->getDataClass();
$rsData = $entity_data_class::getList(array(
    "select" => array("ID"),
     "filter" => array()
));
while ($arItem = $rsData->Fetch()) {
    $entity_data_class::delete($arItem["ID"]);
}

показать полностью
Михаил Базаров -> Всем
дек 1 11:53 am
Скрипт который создаст и сразу удалит 10 000 заказов.
Нужно было на одном из проектов, начать отсчет ID заказов (не номеров а именно ID)
с 10 000  (ох уж эти 1С ники).

После удаления заказов, даже всех, отсчет ID продолжается с последнего созданого.
Потому, просто создаем и сразу удаляем 10 000 заказов.
PS: Скрипт удалит все заказы. Если нужны те- которые созданы до запуска скрипта, доработайте цикл - на удаление именно созданного им заказа.
Вариант "в лоб" - поменять ID прямо в базе, меня не устраивал.

Bitrix\Main\Loader::includeModule('sale');
Bitrix\Main\Loader::includeModule('catalog');

for ($i=0; $i<10000; $i++) {   // ПОМЕНЯТЬ НА СВОЮ ЦИФРУ - если нужно больше/меньше заказов
   $products = array(
       array('PRODUCT_ID' => 1811, 'NAME' => 'Товар 1', 'PRICE' => 500, 'CURRENCY' => 'RUB', 'QUANTITY' => 5)
   );

   $basket = Bitrix\Sale\Basket::create(SITE_ID);

   foreach ($products as $product) {
       $item = $basket->createItem("catalog", $product["PRODUCT_ID"]);
       unset($product["PRODUCT_ID"]);
       $item->setFields($product);
   }

   $order = Bitrix\Sale\Order::create(SITE_ID, 1);
   $order->setPersonTypeId(2);
   $order->setBasket($basket);

   $shipmentCollection = $order->getShipmentCollection();
   $shipment = $shipmentCollection->createItem(
       Bitrix\Sale\Delivery\Services\Manager::getObjectById(1)
   );

   $shipmentItemCollection = $shipment->getShipmentItemCollection();

   /** @var Sale\BasketItem $basketItem */

   foreach ($basket as $basketItem) {
       $item = $shipmentItemCollection->createItem($basketItem);
       $item->setQuantity($basketItem->getQuantity());
   }

   $paymentCollection = $order->getPaymentCollection();
   $payment = $paymentCollection->createItem(
       Bitrix\Sale\PaySystem\Manager::getObjectById(1)
   );
   $payment->setField("SUM", $order->getPrice());
   $payment->setField("CURRENCY", $order->getCurrency());

   $result = $order->save();
   if (!$result->isSuccess()) {
       //$result->getErrors();
   }
}

// УДАЛЕНИЕ ВСЕХ ЗАКАЗОВ - можно перенести в цикл на создание и сразу удаление именно этого заказа
$orders = CSaleOrder::GetList(array("ID" => "DESC"), array(), false, false, array('ID'));
   while ($order = $orders->Fetch()) {
        $result = CSaleOrder::Delete($order['ID']);
   }


показать полностью
Михаил Базаров -> Всем
авг 13 1:55 pm

Стартовое приложение Cordova для начала разработки

Установлены все официальные плагины Cordova. Установлены платформы android и ios5.1.1 Дополнительные плагины:

  • cordova-plugin-wkwebview-engine
  • yandex-appmetrica-plugin-cordova
  • cordova-plugin-remote-injection

Движек рендеринга переключен на wkwebview (иначе, не пройдет публикацию в AppStore).

Заготовка для разработки мобильного приложения на #Cordova
Обновление от августа 2020:
- Платформы обновлены до ios-6.1.1 и android-9;
- Обновлен плагин remote-injection (удален UIWeb, не проходил проверку в Appstore);
- Удален плагин inappbrowser (не поддерживается ios6)

PS: Если inappbrowser нужен:
- cordova platform rm ios
- cordova platform add ios@5.1.1
- cordova plugin add cordova-plugin-inappbrowser

https://github.com/mibazarow/Cordova-S...rt-Project
mibazarow/Cordova-Start-Project
Стартовое приложение Cordova для начала разработки - mibazarow/Cordova-Start-Project
показать полностью
Михаил Базаров -> Всем
июн 20 4:45 pm
Скелет-шаблон для создания мобильного приложения в Cordova.
Базовая верстка для 1С-Битрикс, включены js плагины:
- SNAP : боковая панель при протягивании по контенту
- Pull To Refresh : Обновление контейнера с контентом при протягивании вниз

Видео работы:
https://www.youtube.com/watch?v=XJ2q86-LAWE

Скачать:
https://camouf.ru/upload/fo_all/mobile...late-bx.7z

Плейлист - создание мобильного приложения для любого сайта:
https://www.youtube.com/playlist?list=...SGZcyhbgx3
Скелет-шаблон для мобильного приложения (#Cordova) для 1С-Битрикс
Заготовка скелет-шаблон для создания мобильного приложения в Cordova. Включены js плагины: Snap panel и Putt to refresh. Скачать: https://camouf.ru/club/user...
показать полностью
Михаил Базаров -> Всем
июн 3 12:28 am
Вывести минимальную и максимальную цену в разделе каталога Битрикс.

Что бы вывести минимальную и максимальную цены в разделе каталога (до товаров  например) вставляем:
$resPrice = CIBlockElement::GetList(
  Array("CATALOG_PRICE_2" => "ASC"),
  Array("SECTION_ID"=>$arResult['~ID']),
  false,
  false,
   Array("CATALOG_GROUP_2")
);
while($getPrices = $resPrice->Fetch()) {
          $arPrices[] = $getPrices['CATALOG_PRICE_2'];
}
$minPrice = array_shift($arPrices);
$maxPrice = array_pop($arPrices);

Пояснения:
- С помощью CIBlockElement::GetList получили список элементов раздела с ID равным "$arResult['~ID']" (текущий раздел инфоблока)
- Отсортировали их по полю стоимости по возрастанию "CATALOG_PRICE_2" (ID нужного типа цен, в моем случае, 2)
- Создали массив  $arPrices - который наполнили ценами всех товаров (по возрастанию соответственно).
- C помощью array_shift и array_pop - выдернули первый и последний элемент массива (таки минимальную и максимальную цену)

В переменных minPrice и maxPrice  - минимальная и максимальная цена товаров текущего раздела инфоблока.
PS: Использован Fetch вместо GetNext и явно указано поле для получения, для скорости работы.


показать полностью
Михаил Базаров -> Всем
май 10 12:53 pm
Вывести количество не прочитанных, персональных сообщений форума в любом месте сайта.

Что бы вывести количество не прочитанных (именно персональных) сообщений из модуля форума.
В любом, нужном, месте сайта вызываем метод
<?
CModule::IncludeModule("forum");
      $messs = CForumPrivateMessage::GetNewPM(
              array("FOLDER_ID" => 1)
     );
?>

<?
 echo $messs['UNREAD_PM']
?>

показать полностью
Михаил Базаров -> Всем
фев 25 3:48 pm
Компонент добавления элемента в инфоблок с отправкой письма о добавлении и AJAX отправкой.

Сделан по быстрому, в качестве базовой заготовки для дальнейшего развития.
Развиваться будет, в полноценный компонент, в рамках видеокурса "Разработка доски объявлений на Битрикс" https://bxstore.ru/

Пока, можно использовать как форму обратной связи, с записью в инфоблок и отправкой письма.

На данный момент умеет:
- Выводить, на заполнение,  свойства инфоблока. Только не множественные.
- Загружать файлы в свойство "Файл". Использует штатный компонент main.file.input (dragn_n_drop).
- Защита, от совсем простых ботов (проверка скрытого поля на заполнение)
- Поддерживает AJAX
- Отправляет письмо о добавлении элемента
- Все параметры управляемые (картинка 1)
- Шаблон маскимально простой (картинка 2)
- Легко дорабатывается, управляется и расширяется.

Письма отправляет обычной функцией php-mail, но в файле component.php есть закомментированый участок
(картинка 3):
Можно использовать штатный метод Битрикс Event::send - который передаст поля в штатное же почтовое событие FEEDBACK_FORM

Пример работы: https://camouf.ru/1/index.php

PS: В рамках видеокурса будет превращен в полноценный компонент добавления объявления на доску. С гугло капчей, работой с любыми типами полей И так далее.

Фото:
feedback.form.element.zip ( 25.08 КБ)
Михаил Базаров
Создаем массив со свойствами файлов, методом CFile::MakeFileArray и передаем в $PROP["MORE_PHOTO"] (в моем случае, свойство с доп картинками)
$arMorePhoto["VALUE"];
$i = 0;    
foreach ($_POST["MORE_PHOTO"] as $morePhoto) {        
      $arMorePhoto['n'.$i] = array("VALUE"=>CFile::MakeFileArray($morePhoto));        
      $i++;
}
$PROP["MORE_PHOTO"] = $arMorePhoto;

показать полностью
Михаил Базаров -> Всем
апр 1 11:05 am
Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства элемента.

Перенесено в блог: https://camouf.ru/blog-note/9255/
показать полностью
Михаил Базаров -> Всем
марта 20, 2019 10:57 am
bitrix.sale.order.ajax раскрыть блоки доставки и оплаты.

Если в компоненте одношагового оформления заказа, нужно раскрыть блоки доставки и оплаты:
В самый низ template.php добавляем
$(window).on('ready', function(event){
    BX.Sale.OrderAjaxComponent.editDeliveryBlock(true);
    BX.Sale.OrderAjaxComponent.editPaySystemBlock(true);
});
Для блоков оплаты и доставки добавляем селектор bx-selected

Тоже самое, можно делать со всеми блоками:
BX.Sale.OrderAjaxComponent.editActiveBasketBlock(true);
BX.Sale.OrderAjaxComponent.editActiveRegionBlock(true);
BX.Sale.OrderAjaxComponent.this.editActiveDeliveryBlock(true);
BX.Sale.OrderAjaxComponent.editActivePaySystemBlock(true);
BX.Sale.OrderAjaxComponent.editActivePickUpBlock(true);
BX.Sale.OrderAjaxComponent.editActivePropsBlock(true);

И можно убрать кнопки "Далее - Назад" в файле order_ajax.js

Для доставки: найти и закомментировать
this.getBlockFooter(deliveryContent);
Для оплаты:
this.getBlockFooter(paySystemContent);

Денис Чучумашев
работает, только после выбора доставки или оплаты, блоки все равно оказываются закрытыми.
Денис Чучумашев
Запускать

   BX.Sale.OrderAjaxComponent.editActiveDeliveryBlock(true);
   BX.Sale.OrderAjaxComponent.editActivePaySystemBlock(true);
...

после каждой валидации - тоже не вариант. Должно быть более гибкое решение
Денис Чучумашев
Нашел способ другой. Причем, блоки изначально остаются открытыми. Я сделал так:

1. комментируем строчки:
/*if (this.activeSectionId !== this.regionBlockNode.id)
this.editFadeRegionContent(this.regionBlockNode.querySelector('.bx-soa-section-content'));

if (this.activeSectionId != this.propsBlockNode.id)
this.editFadePropsContent(this.propsBlockNode.querySelector('.bx-soa-section-content'));*/

2. меняем:
var active = section.id == this.activeSectionId,

на:
var active = true,

3. скрываем кнопки "далее" и "назад" и изменить стилями:
.pull-left.btn-default.btn-md, .pull-right.btn-default.btn-md, .bx-soa-editstep {
   display: none!important;
}
показать полностью
Михаил Базаров -> Всем
мар 10 1:26 pm
Вывести дату создания файла в формате сайта

Что бы это сделать можно воспользоваться методом
CFile::GetFileArray

В параметр передаем ID нужного файла или переменную с нужным ID и классом DateTime
приводим к строке:
<?
$arItem = 123; // ID нужного файла
$rsFile = CFile::GetFileArray($arItem);
echo $rsFile['TIMESTAMP_X']->toString();
?>
Если нужна вся информация о конкретном файле (вес, формат, путь на сервере, описание итд)
Распечатываем массив
<?
print_r($rsFile);
?>

Авторизация

На сайте работает вход через социальные сети. Просто, выберите наиболее удобную сеть и авторизация произойдет автоматически:
Проходя авторизацию, Вы безоговорочно принимаете условия политики конфеденциальности