development

Ajax загрузка, минимальное время работы

Иногда ajax запросы получаются очень быстрыми, но не исключена вероятность что запрос может задержаться по разным причинам. Ajax loader как раз и нужен для того чтобы показать пользователю что что-то происходит, идет работа и нужно подождать.

Но что делать если запросы быстрые, пользователь не знает что это такое, что это фоновый ajax запрос, это ему вообще не интересно, в итоге он увидит быстрое отображение и скрытие загрузчика и может вообще нечего не понять, и воспринять как ошибку сайта или что-то подобное.

Задача, сделать ajax loader с минимальным времени работы, допустить 1,5 секунды.

Continue reading

Bitrix, MAMP, Mysql query error: (1364)

На локальном сервере под MAMP как всегда не вовремя появилась ошибка:

Mysql query error: (1364) Field ‘DELIVERY_ID’ doesn’t have a default value (400) INSERT INTO b_sale_order_delivery

Дело в sql-mode, нужно убрать строгий режим STRICT_TRANS_TABLES

Если нет доступа к my.cnf, можно так:

/bitrix/php_interface/after_connect.php добавить строку

$DB->Query(«set sql_mode=»»)

Очистка корзины Bitrix24 коробка [сниппет]

use \Bitrix\Recyclebin\Internals\Models\RecyclebinTable;
use \Bitrix\Recyclebin\Recyclebin;
use \Bitrix\Main\Loader;

Loader::includeModule('recyclebin');

$list = RecyclebinTable::getList([
        'limit'  => 5000,
        'filter' => ['MODULE_ID' => 'CRM'],
        'select' => ['ID']
    ]
)->fetchAll();
foreach ($list as $item) {
    Recyclebin::remove(intval($item['ID']));
}

Если нужно сделать User Update и сразу Authorize(id)

Задача:

Если обновлять пользователя (в моем случае ajax) и пытаться сразу авторизовать по ID, это не получится сделать или будет выкидывать после 1 хита.

Решение:

$user = new \CUser();
$resultUpdate = $user->Update($userId, $filedsUpdate);
if ($resultUpdate) {
    $user->Authorize($userId);
    $user->CheckAuthActions(); // вся соль тут
}

Битрикс ЧПУ, правила urlrewrite.php

Самые часто используемые правила ЧПУ в битриксе это страницы детального описания элемента, например /section/125/ 125 это ID элемента, в основном это дополнительные разделы сайта, для магазинов используется комплексный компонент каталога и там 1 правило для всего компонента, но речь не о ней.

Continue reading

Перевод текста из английской раскладки в русскую [javascript]

    
autoKeyboardLang : function(str)
{
    var s = [
        "й","ц","у","к","е","н","г","ш","щ","з","х","ъ",
        "ф","ы","в","а","п","р","о","л","д","ж","э",
        "я","ч","с","м","и","т","ь","б","ю"
    ];

    var r = [
        "q","w","e","r","t","y","u","i","o","p","\\[","\\]",
        "a","s","d","f","g","h","j","k","l",";","'",
        "z","x","c","v","b","n","m",",","\\."
    ];

    for (var i = 0; i < r.length; i++)
    {
        var reg = new RegExp(r[i], 'mig');
        str = str.replace(reg, function (a) {
            return a == a.toLowerCase() ? s[i] : s[i].toUpperCase();
        });
    }

    return str;
}


...

if( ! /^[а-яё ]*$/i.test(s) ){
    $(input).val(autoKeyboardLang(s));
}

....