Last active
November 17, 2023 21:14
-
-
Save Dok11/68704fb68dbd7fe416b717e25f833246 to your computer and use it in GitHub Desktop.
Bitrix Classes Extending
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if (\Bitrix\Main\Loader::includeModule('iblock')) { | |
\Bitrix\Main\Loader::registerAutoLoadClasses(null, [ | |
'CIBlockCMLImport' => __DIR__ . '/ciblockcmlimport.php', | |
]); | |
} | |
$pathToOriginalCode = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/iblock/classes/general/cml2.php'; | |
$originalCode = file_get_contents($pathToOriginalCode); | |
$modifiedCode = str_replace('__FILE__', "'$pathToOriginalCode'", $originalCode); | |
$modifiedCode = str_replace('class CIBlockCMLImport', 'class OriginalCIBlockCMLImport', $modifiedCode); | |
eval('?>' . $modifiedCode); | |
class CIBlockCMLImport extends OriginalCIBlockCMLImport | |
{ | |
public function DeactivateSections($action): void | |
{} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// init.php: | |
// Объявляем свой класс импорта вместо класса Битрикса по умолчанию | |
if (\Bitrix\Main\Loader::includeModule('iblock')) { | |
\Bitrix\Main\Loader::registerAutoLoadClasses(null, [ | |
'CIBlockCMLImport' => __DIR__ . '/ciblockcmlimport.php', | |
]); | |
} | |
// ciblockcmlimport.php: | |
// Указываем путь к исходному файлу cml2.php, содержащему класс CIBlockCMLImport | |
$pathToOriginalCode = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/iblock/classes/general/cml2.php'; | |
// Считываем содержимое исходного файла | |
$originalCode = file_get_contents($pathToOriginalCode); | |
// Заменяем __FILE__ на фактический путь к исходному файлу. | |
// Это необходимо, потому что внутри исходного класса может использоваться __FILE__, | |
// и его значение должно оставаться корректным даже после изменения кода. | |
$modifiedCode = str_replace('__FILE__', "'$pathToOriginalCode'", $originalCode); | |
// Заменяем имя класса на OriginalCIBlockCMLImport, чтобы избежать конфликта имен | |
// при последующем определении нашего собственного класса CIBlockCMLImport | |
$modifiedCode = str_replace('class CIBlockCMLImport', 'class OriginalCIBlockCMLImport', $modifiedCode); | |
// Выполняем модифицированный код, создавая класс OriginalCIBlockCMLImport | |
eval('?>' . $modifiedCode); | |
/** | |
* Класс наследуется от оригинального CIBlockCMLImport. | |
*/ | |
class CIBlockCMLImport extends OriginalCIBlockCMLImport | |
{ | |
public function DeactivateSections($action): void | |
{ | |
// Чтобы не деактивировать разделы при импорте XML, оставляем метод пустым. | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment