Как получить имя скрипта (сценария)? - Хранение скриптов в файлах
Добавлено: Пт янв 03, 2020 1:21 pm
Подскажите как получить имя (название) исполняемого скрипта (сценарии) в самом скрипте (сценарии)?
ничего не возвращает. Это глюк или я что-то делаю не так?
возвращает
object_title в $this даже нет.
Это вообще возможно сделать средствами mjdm?
Нашел в БЗ:
Считаю недоработкой. Прошу sergejey обратить на это внимание!
Если бы переменная $this работала в сценариях не пришлось бы создавать костыль описаный ниже.
И изначальный вопрос, как тогда вытянуть имя? Может обходные способы?
Вариант передать в параметре при вызове через rs("test", "name_stript" => "test") - это не решение
Через $_SERVER также не решение. Так нельзя достать имя сценария, разве что через $_SERVER[REQUEST_URI] в некоторых случаях (если вызывать выполнение вручную из админки) можно вытянуть его ID из
но это не то что нужно и вообще полная ерунда.
UPD / Сам спросил, сам ответил.
Нашел решение:
Не уверен пока на счет универсальности. Ещё тестирую...
Для чего мне это понадобилось?
Я предпочитаю хранить сценарии в виде файла на диске, а не в виде записи в БД, надежность которой оставляет желать лучшего.
Были случаи потери данных из-за ошибок БД при внезапном отключении электроэнергии.
Теперь, код каждого сценария сохраняем в виде файла по адресу "./my/scripts/ИМЯ_СЦЕНАРИЯ.php", а в тело каждого сценария в админке Мажордомо помещаем универсальный код:
Хранение скриптов в виде файлов, кроме надежности, дает преимущество редактирования в любой удобной для вас IDE.
А если бы в админке в разделе
Код: Выделить всё
print_r($this->object_title);
Код: Выделить всё
print_r($this);
Код: Выделить всё
scripts Object ( [name] => scripts [data] => [instance] => [template] => [result] => [owner] => [config] => [title] => <#LANG_MODULE_SCRIPTS#> [module_category] => <#LANG_SECTION_OBJECTS#> )
Это вообще возможно сделать средствами mjdm?
Нашел в БЗ:
Так понимаю, что $this не работает в сценариях? Если да, то почему? Как так, почему работает в методах, но не работает в сценариях?При вызове любого метода (но не сценария!) доступны переменные:
$prevRun -- время последнего вызова (в формате timestamp)
$prevRunPassed -- сколько секунд прошло с последнего вызова
$this -- Указатель на себя. Используется в методах классов. Например:
Считаю недоработкой. Прошу sergejey обратить на это внимание!
Если бы переменная $this работала в сценариях не пришлось бы создавать костыль описаный ниже.
И изначальный вопрос, как тогда вытянуть имя? Может обходные способы?
Вариант передать в параметре при вызове через rs("test", "name_stript" => "test") - это не решение
Через $_SERVER также не решение. Так нельзя достать имя сценария, разве что через $_SERVER[REQUEST_URI] в некоторых случаях (если вызывать выполнение вручную из админки) можно вытянуть его ID из
Код: Выделить всё
[REQUEST_URI] => /admin.php?pd=c2NyaXB0czp7aW5zdGFuY2U9YWRtfQ%3D%3Dpz_cGFuZWw6e2FjdGlvbj1zY3JpcHRzfQ%3D%3Dpz_&md=scripts&inst=adm&view_mode=run_script&id=85
UPD / Сам спросил, сам ответил.
Нашел решение:
Код: Выделить всё
$arr = get_defined_vars();
$script_title = $arr['rec']['TITLE'];
print_r($script_title);
Для чего мне это понадобилось?
Я предпочитаю хранить сценарии в виде файла на диске, а не в виде записи в БД, надежность которой оставляет желать лучшего.
Были случаи потери данных из-за ошибок БД при внезапном отключении электроэнергии.
Теперь, код каждого сценария сохраняем в виде файла по адресу "./my/scripts/ИМЯ_СЦЕНАРИЯ.php", а в тело каждого сценария в админке Мажордомо помещаем универсальный код:
Код: Выделить всё
$arr = get_defined_vars();
$script_title = $arr['rec']['TITLE'];
$script_file = "./my/scripts/" . $script_title . ".php";
if (is_file($script_file)) {
include_once($script_file);
} else {
say("Системная ошибка, не найден сценарий " . $script_title . "!", 2);
}
А если бы в админке в разделе
был бы реализован выбор "Из файла сценария" и этот выбор подставлял бы код представленный выше, было бы вообще супер. Предложение для разработчика.Код Использовать для программирования:
PHP Blockly Устройства