Я думаю, что периодически многие сталкиваются с отладкой ошибки, возникающей при перекодировке ваших модулей в маркеплейсе в демо-режим.
Некоторый функционал по сперва непонятным причинам отваливается.
Делюсь найденными наблюдениями, а также как это можно избежать и учесть.
Оказывается, нельзя использовать одноименные параметры функций и переменные-члены классов внутри.
вот пример обработчика из файла 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 возможно, это пофиксят в кодировщике, это было бы предпочтительнее.