Я думаю, что периодически многие сталкиваются с отладкой ошибки, возникающей при перекодировке ваших модулей в маркеплейсе в демо-режим.
Некоторый функционал по сперва непонятным причинам отваливается.
Делюсь найденными наблюдениями, а также как это можно избежать и учесть.
Оказывается, нельзя использовать одноименные параметры функций и переменные-члены классов внутри.
вот пример обработчика из файла include.php реального модуля :
битрикс кодировщик превращает данный код в файле include.php для демо-версии в подобное:
естественно, поля класса $adminMenu->_319480480 просто нет, и событие не работает.
поэтому следует избегать совпадение имен параметров и используемых полей объектов внутри методов, дабы избежать подобной коллизии
(по крайней мере в кодируемых для демо-режима файлах include.php и install.php).
PS возможно, это пофиксят в кодировщике, это было бы предпочтительнее.
Некоторый функционал по сперва непонятным причинам отваливается.
Делюсь найденными наблюдениями, а также как это можно избежать и учесть.
Оказывается, нельзя использовать одноименные параметры функций и переменные-члены классов внутри.
вот пример обработчика из файла include.php реального модуля :
public function OnBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu) { /* @var $adminMenu \CAdminMenu */ global $adminMenu; if (! is_array($adminMenu->aGlobalMenu)) { return; } |
битрикс кодировщик превращает данный код в файле include.php для демо-версии в подобное:
public function OnBuildGlobalMenu(&$_319480480, &$_678570816) { global $adminMenu; if (!is_array($adminMenu->_319480480)) { return; } |
естественно, поля класса $adminMenu->_319480480 просто нет, и событие не работает.
поэтому следует избегать совпадение имен параметров и используемых полей объектов внутри методов, дабы избежать подобной коллизии
(по крайней мере в кодируемых для демо-режима файлах include.php и install.php).
PS возможно, это пофиксят в кодировщике, это было бы предпочтительнее.