Ответы пользователя по тегу 1С-Битрикс
  • Почему не регистрируется обработчик события в своем модуле?

    @Nentra
    После установки модуля нужно проверить в таблице битрикс "b_module_to_module" установилось ли событие.
    И дальше уже отталкиваться от этого.

    Если использовать автозагрузку классов из модуля, то файлы с классами нужно называть полностью маленький буквами, а не верблюжьим стилем как в файле с классом.

    Файл с классом должен лежать в модуле в папке lib
    Если используются пространства имён, то делать в этой папке соответствующей пространству имён подпапки

    Пример для обработки события обновления поля Highload-блока.
    Конкретно для Highload-блоков имя модуля, событие которого перехватываем не указывается,
    к самому названию события приписывается название Highload-блока.

    Файл
    www\local\modules\red.october\install\index.php

    <?php
    	......................
    	class red_october extends CModule
    	{
    		function installDB()
    		{
    			Loader::includeModule($this->MODULE_ID);
    			
    			//Регистрация события
    			$eventManager = \Bitrix\Main\EventManager::getInstance();
    			$eventManager->registerEventHandlerCompatible(
    			'',
    			'DollarExchangeRateOnAfterUpdate',
    			'red.october',
    			'\\red\\october\\Events\\RecordDataFinalSellingPrice',
    			'RecordData'
    			);
    			
    			...................
    		}
    		
    		........................
    		
    		function unInstallDB()
    		{
    			
    			//Отмена регистрации события
    			$eventManager = \Bitrix\Main\EventManager::getInstance();
    			$eventManager->unRegisterEventHandler(
    			'',
    			'DollarExchangeRateOnBeforeUpdate',
    			'red.october',
    			'\\red\\october\\Events\\RecordDataFinalSellingPrice',
    			'RecordData'
    			);
    			
    		}	
    	}	
    	?>


    Файл с обработчиком события
    \www\local\modules\red.october\lib\events\recorddatafinalsellingprice.php

    <?
    	namespace red\october\Events;
    
    
    class RecordDataFinalSellingPrice
    { 
        public static function RecordData($recordId)
        {
    	\Bitrix\Main\Diag\Debug::writeToFile($recordId, $varName = __DIR__, $fileName = "/local/debug/debug.log");
    	}
    }
    Ответ написан
    Комментировать
  • Как правильно подключить обработчик событий для highload-блоков в своем модуле?

    @Nentra
    Имя файла с подключаемым классом надо писать всё маленькими буквами как название самого класса только все буквы маленькие, иначе будет падать в ошибку.

    После установки модуля нужно проверить в таблице битрикс "b_module_to_module" установилось ли событие.
    И дальше уже отталкиваться от этого.

    Если использовать автозагрузку классов из модуля, то файлы с классами нужно называть полностью маленький буквами, а не верблюжьим стилем как в файле с классом.

    Файл с классом должен лежать в модуле в папке lib
    Если используются пространства имён, то делать в этой папке соответствующей пространству имён подпапки

    Пример для обработки события обновления поля Highload-блока.
    Конкретно для Highload-блоков имя модуля, событие которого перехватываем не указывается,
    к самому названию события приписывается название Highload-блока.

    Файл
    www\local\modules\red.october\install\index.php

    <?php
    	......................
    	class red_october extends CModule
    	{
    		function installDB()
    		{
    			Loader::includeModule($this->MODULE_ID);
    			
    			//Регистрация события
    			$eventManager = \Bitrix\Main\EventManager::getInstance();
    			$eventManager->registerEventHandlerCompatible(
    			'',
    			'DollarExchangeRateOnAfterUpdate',
    			'red.october',
    			'\\red\\october\\Events\\RecordDataFinalSellingPrice',
    			'RecordData'
    			);
    			
    			...................
    		}
    		
    		........................
    		
    		function unInstallDB()
    		{
    			
    			//Отмена регистрации события
    			$eventManager = \Bitrix\Main\EventManager::getInstance();
    			$eventManager->unRegisterEventHandler(
    			'',
    			'DollarExchangeRateOnBeforeUpdate',
    			'red.october',
    			'\\red\\october\\Events\\RecordDataFinalSellingPrice',
    			'RecordData'
    			);
    			
    		}	
    	}	
    	?>


    Файл с обработчиком события
    \www\local\modules\red.october\lib\events\recorddatafinalsellingprice.php

    <?
    	namespace red\october\Events;
    
    
    class RecordDataFinalSellingPrice
    { 
        public static function RecordData($recordId)
        {
    	\Bitrix\Main\Diag\Debug::writeToFile($recordId, $varName = __DIR__, $fileName = "/local/debug/debug.log");
    	}
    }
    Ответ написан
    Комментировать
  • Почему не работает Контроллер?

    @Nentra
    В моём случае к имени метода класса к которому обращаюсь забыл приписать "Action".
    Дописал и всё заработало.
    Ответ написан
    Комментировать
  • Как автоматически подключить класс модуля битрикс?

    @Nentra
    Вот тут можно прочитать и ознакомиться
    Пространство имён класса должно быть таким же как имя модуля, точку заменить слешем.
    Использовать верблюжий стиль при наименовании пространства имен
    https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    Комментировать
  • Почему не грузится сайт с битриксом на виртуалке?

    @Nentra
    В моём случае вот это помогло, когда с такой же проблемой столкнулся.
    66a203e449516462576166.png
    66a203ec18dfb776432479.png
    Ответ написан
    Комментировать
  • Как получить из массива значение [date] => 2022-11-14 09:53:22.000000 и потом поменять его и снова записать в этот же массив?

    @Nentra Автор вопроса
    Получить значение
    $productUser = $Date_Modify[0]["DATE_MODIFY"]->format("Y-m-d H:i:s");

    Записать значение ( Bitrix\Landing\Landing Object)
    $contentBlocks = 'Тут написаны слова';	
    $allBlocksResult[142]->saveContent($contentBlocks, false);
    Ответ написан
    Комментировать
  • В каком файле находится класс CBitrixComponent?

    @Nentra Автор вопроса
    scottparker @scottparker
    ну если сильно надо то bitrix/modules/main/classes/general/component.php
    Написано 10 часов назад
    Ответ написан
    Комментировать
  • Как прекратить установку модуля и вывести сообщение что модуль ставиться не будет потому что у вас php 8.0 или выше?

    @Nentra Автор вопроса
    В итоге в функцию DoInstall() вот так написал
    global $APPLICATION, $errors;
    
    			if(CheckVersion(phpversion(), "8.0.0")){
    				$APPLICATION->ThrowException(
    				GetMessage("PHP_ERROR_VERSION")
    				);
    				return false;
    			}
    Ответ написан
    Комментировать
  • По какой причине может не отрабатывать событие добавления пользовательского типа поля зарегистрированное с помощью RegisterModuleDependences?

    @Nentra Автор вопроса
    Не crm, а main
    Не посмотрел какой модуль прописан, кучу времени убил на поиск ошибки.
    Сегодня ещё раз всё перепроверил и нашёл.

    Правильно вот так будет
    RegisterModuleDependences("main", "OnUserTypeBuildList", "test345345.module", '\\test345345.module\\CrmEventUserField\\Handlers', 'GetUserTypeDescription');
    Ответ написан
    Комментировать
  • Мультирегиональность АСПРО, не работает, ошибка 500 - как сделать чтобы работало?

    @Nentra Автор вопроса
    В итоге восстановил старый .htaccess и всё заработало.
    Ответ написан
    Комментировать
  • Как получить по ID группы (Сервисы->техподдержка->группы) её имя?

    @Nentra Автор вопроса
    Ответ написан
    Комментировать