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

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

Дата последнего входа: 1 час назад
Дата регистрации: 7 февраля 2012 21:17
День рождения: 7 ноября
Пол: Мужской
показать полностью
Михаил Базаров -> Всем
апр 29 4:25 pm
Быстрые примеры использования Firebase в Cordova + Битрикс
<script>
document.addEventListener("deviceready", function(){ // Врубаем deviceready

// Получаем токен устройства
   window.FirebasePlugin.getToken(function(token) {
console.log(token);
var UserDeviceToken = token//  в UserDeviceToken собственно токен
   }, function(error) {
      console.log(error);
   });

// Запрашиваем разрешение на отправку уведомлений
window.FirebasePlugin.grantPermission(function(){
//alert("Спасибо, вы подписались на уведомления"); // Просто пример, сделайте красивое окно или вообще уберите  
}, function(error){
//alert(error); // Если произошла ошибка подписки
});

// Установка значка не прочитанных на иконку
// Обрабатывайте модулем PUSH-PULL Битрикса, получайте значение от пользователя
window.FirebasePlugin.setBadgeNumber(5);

// Вывод количества не прочитанных пользователю
window.FirebasePlugin.getBadgeNumber(function(n) {
alert("У вас сообщений: " + n);
});

// Проверка разрешил ли пользователь уведомления
// Чисто служебное, для тестирований
window.FirebasePlugin.hasPermission(function(hasPermission){
if (hasPermission)
//alert("Permission to receive notification is granted.");
else
//alert("Permission to receive notification is NOT granted.");
});


// Установка ID пользователя, что бы уникализировать пуши под них
var myUserId="35009a79-1a05-49d7-b876-2b884d0f825b"; // Используйте ID пользователей битрикс
window.FirebasePlugin.setUserId("user_id");
// alert("Ваш ID: " + myUserId);

// Предложение отменить получение push ей
/*
window.FirebasePlugin.unregister(function(){
alert("Stop receiving push notifications.");
}, function(error){
alert(error);
});
*/

}, false);
</script>

2021-04-29_16-08-52.png
Посмотреть и скачать с Яндекс.Диска
показать полностью
Михаил Базаров -> Всем
апр 28 2:15 pm
Ошибка pod install на процессоре Apple M1
Если при добавлении firebase в Cordova получаете ошибку установки pod install на процессоре с Apple M1

В терминале выполняем
sudo arch -x86_64 gem install ffi

В директории cordova проекта
cd ios && arch -x86_64 pod install && cd ../


показать полностью
Михаил Базаров -> Всем
апр 14 2:47 pm
Применение умного фильтра при выборе параметра, без AJAX

Что бы сделать автоматическое применение фильтра достаточно немного jqery
Суть в том, что бы кнопка "Применить" нажималась сама при изменении параметра.

Под каждый параметр добавляем скрипт
<script>
                   $("#<?= $arItem['CODE']; ?>").change(function () {
                       $('.over_loading_filter').toggleClass('over_loading_filter_db2');
                       $('.set_filter').click();
                   });
</script>
Суть скрипта:
- При изменении текущего параметра (с id #<?= $arItem['КОД ПАРАМЕТРА']; ?>)
- Происходит клик по элементу с классом .set_filter (который у кнопки "Применить", класс можете назвать по своему)
- К элементу с классом .over_loading_filter добавляется класс .over_loading_filter_db

Элемент over_loading_filter не обязательный, просто для красоты. В него помещаем картинку gif или svg с "индикатором загрузки" и размещаем по центру страницы
(тут уже моменты чисто оформительские).
Нужно, что бы показать пользователю что что-то происходит.
У .over_loading_filter {display:none}
У .over_loading_filter_db {display:block}

Пример работы https://dvs-ok.ru/catalog/dvigatel_i_k...uyushchie/
Каталог запчастей
Каталог запчастей
показать полностью
Михаил Базаров -> Всем
апр 3 3:57 pm
Cordova - мобильное приложение, добавить уведомления о Геолокации и Доступа к камере

Если в своем, мобильном приложении, созданном на Apache Cordova - установили плагины геолокации и доступа к камере (или медиабиблиотеке).
При попытке опубликовать его в Appstore, получите отказ- так как, нужно добавить уведомление для пользователя: для чего приложение использует геолокацию или доступ к камере.

Что бы добавить это уведомление, разместите в config.xml следующие строки
<platform name="ios">

<!-- Для камеры -->
        <config-file parent="NSCameraUsageDescription" target="*-Info.plist">
           <string>Необходимо для поиска товаров по штрихкоду</string>
       </config-file>

<!-- Для геолокации -->
        <edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
           <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
       </edit-config>
       <edit-config target="NSLocationAlwaysAndWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
           <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
       </edit-config>
       <edit-config target="NSLocationAlwaysUsageDescription" file="*-Info.plist" mode="merge">
            <string>Необходимо для улучшения поиска товаров в Вашем регионе</string>
       </edit-config>

   </platform>
Само собой, причины пишите свои, для чего используете данный функционал.
После компиляции, в .plist файл попадут эти строки (приложенная картинка).

Как сделать и опубликовать мобильное приложение на Apache Cordova
https://camouf.ru/video/app_cordova/



Фото:
показать полностью
Михаил Базаров -> Всем
мар 19 10:11 am
Получить родительский раздел, с любого уровня разделов.

Если, в комплексном шаблоне каталога, на битрикс нужно получить информацию о родительском разделе
- с любого внутреннего уровня.
Можно использовать
CIBlockSection::GetNavChain

Пример. Нужно получить пользователское поле UF_SHOW_FILTER корневого, родительского раздела
$navChain = CIBlockSection::GetNavChain($arParams["IBLOCK_ID"], $arResult["SECTION_ID"]);
while ($arNav = $navChain->GetNext()) {
       $db_list = CIBlockSection::GetList(array($by => $order),
       $arFilter = array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" => $arNav["ID"]), true,
       $arSelect = array('NAME','UF_TOP_FILTER'));
       while ($ar_result = $db_list->Fetch()) {
                   echo $ar_result['UF_TOP_FILTER'];
         }
break;}
Более подробное описание тут https://camouf.ru/blog-note/9312/
показать полностью
Михаил Базаров -> Всем
янв 14 11:15 am
Получить метатеги раздела в CIBlockSection::GetList из настроек инфоблока

Если получить список разделов методами CIBlockSection::GetList или CIBlockSection::GetByID
В массиве, вы, не получите метатеги раздела из настроек SEO инфоблока.
Что бы их получить, нужно в цикле добавить дополнительный запрос к \Bitrix\Iblock\InheritedProperty\SectionValues

Пример:
$dbRes = CIBlockSection::GetList(
false,
array('IBLOCK_ID' => $IBLOCKID),
false,
false,
false,
);
while ($arDbRes = $dbRes->Fetch())
{
   echo '<pre>';
   print_r($arDbRes); // Все данные раздела
   echo '<pre>';

   $ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($IBLOCKID, $arDbRes["ID"]);
   echo '<pre>';
   print_r($ipropValues->getValues()) // Все метатеги раздела
   echo '<pre>';
}
 
показать полностью
Михаил Базаров -> Всем
декабря 26, 2020 7:45 am
Аргументы phpstorm для yuicompressor-2.4.8.jar

Сжатие css
Тип CSS
путь к yuicompressor-2.4.8.jar
$FileName$ -o $FileNameWithoutExtension$.min.css
$FileNameWithoutExtension$.min.css

Сжатие js
Тип JS
путь к yuicompressor-2.4.8.jar
$FileName$ -o $FileNameWithoutExtension$.min.js
$FileNameWithoutExtension$.min.js
yuicompressor-2.4.8.jar ( 769.07 КБ)
показать полностью
Михаил Базаров -> Всем
декабря 5, 2020 2:45 am
Очистка highloadblock -блока через 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, 2020 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, 2020 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

Авторизация

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