return; } $layer['div'] = Template::parse(array($layer['divtpl']), $layer); }, 'div:env,config,external'); Event::handler('layer.isshow', function (&$layer) { if (empty($layer['div']) && !empty($layer['parent'])) { return false; } //Такой слой игнорируется, события onshow не будет, но обработка пройдёт дальше у других дивов $start = false; if (Run::exec(Controller::$layers, function (&$l) use(&$layer, &$start) { //Пробежка не по слоям на ветке, а по всем слоям обрабатываемых после.. .то есть и на других ветках тоже if (!$start) { if (Each::isEqual($layer, $l)) { $start = true; } return; } if (@$l['div'] !== @$layer['div']) { return; } //ищим совпадение дивов впереди if (Controller::fire('layer.isshow', $l)) { $layer['is_save_branch'] = Layer::isParent($l, $layer); return true; //Слой который дальше показывается в томже диве найден } })) { return false; } }, 'div:is');
public static function check(&$layer) { if (!isset($layer['env'])) { return; } $r = null; //Слои myenv надо показывать тогдаже когда и показывается сам слой $myenv = null; $ll = null; Run::exec(Controller::$layers, function (&$l) use(&$layer, &$myenv, &$ll) { //Есть окружение и мы не нашли ни одного true для него if (!isset($l['myenv'])) { return; } if (!Event::fire('layer.ischeck', $l)) { return; } //В back режиме выйти нельзя.. смотрятся все слои if (Each::isEqual($l, $layer)) { return; } //Значение по умолчанию смотрится отдельно if (!isset($l['myenv'][$layer['env']])) { return; } if (is_null($l['myenv'][$layer['env']])) { return; } if (Event::fire('layer.isshow', $l)) { //Ищим последнюю установку на счёт env $myenv = $l['myenv'][$layer['env']]; $ll =& $l; } }); if (!is_null($myenv)) { //Если слой скрываем слоем окружения который у него в родителях числиться он после этого сам всё равно должен показаться if ($myenv) { //Значение по умолчанию смотрим только если myenv undefined $r = true; } else { $r = false; $layer['is_save_branch'] = !!Layer::isParent($ll, $layer); //infrajs_isSaveBranch($layer,false); } } if (is_null($r) && @$layer['myenv']) { //Значение по умолчанию $myenv = $layer['myenv'][$layer['env']]; if (!is_null($myenv)) { //Оо есть значение по умолчанию для самого себя if ($myenv) { $r = true; } else { //Если слой по умолчанию скрыт его детей не показываем $r = false; $layer['is_save_branch'] = false; } } } $layer['envval'] = $myenv; if ($r) { return !!$myenv; } return false; }