Author: Рамиль Юналиев

Битрикс ЧПУ, правила 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));
}

....

Отключение обработчиков событий [1С-Битрикс]

class HandlerTest
{
    static $b_HandlerRun = true;

    function OnAfterIBlockElementAddHandler(&$arFields)
    {
	AddMessage2Log(var_export( self::$b_HandlerRun , true), "my_module_id");
    }
}

/****** В init.php *****/
AddEventHandler("iblock", "OnAfterIBlockElementAdd", Array("HandlerTest", "OnAfterIBlockElementAddHandler"));


/************************************/
HandlerTest::$b_HandlerRun = false;

$oElement = new CIBlockElement();
$oElement->Add(array("IBLOCK_ID" => 43, "NAME" => "Название элемента"));

В логе получим false, тем самым мы можем отключать или включать там где нужно события.

Отработка событий *::Add, *::Update, *::Delete

Иногда нужно чтобы события не срабатывали у разных методов системы. Пока этого нет, то пишем свои методы в обход. Редактирование полей пользователя прямым запросом.

function updateUserField($i_UserID, $ar_Fields)
{
	$ID = intval($i_UserID);
	
	if(intval($ID) <= 0 || count($ar_Fields) == 0) return false; global $DB; $res = $DB->Query("UPDATE b_user SET ".$DB->PrepareUpdate("b_user", $ar_Fields)." WHERE ID=".$ID, true);
	return (!$res) ? false : true;
}

BX идея, голосуем

OnAfterUserUpdate не все данные

На заметку, OnAfterUserUpdate в массиве $arFields вы будите долго искать XML_ID, ну а зачем он, и без него можно… :(

function OnAfterUserUpdateHandler(&$arFields)
{
    # Зато б..дь есть все UF_* 
    $_ar = CUser::GetByID($arFields['ID'])->Fetch();
    $arFields['XML_ID'] = $_ar['XML_ID']; 
    self::_handler($arFields, 'update');
}

XML to Array and Array to XML

Сейчас много приходится работать с XML (интеграция 1C-Битрикс и 1С), сложная логика проекта не позволяет использовать типового импорта, и задача стоит как можно больше перенести на сторону 1с, ну суть не в этом, задача постоянно парсить XML или собирать и отдавать в 1с, хочу сохранить пару очень удобных классов которые как раз подходят для этих задач. Array2XML и XML2Array

Ссылка 1
Ссылка 2