//Возможно у родителей обновился crumb из-за child у детей тоже должен обновиться хотя они не в child }, 'crumb:external'); Event::handler('layer.oninit', function (&$layer) { //crumb child if (@(!$layer['child'])) { return; } //Это услвие после Crumb::set $crumb =& $layer['crumb']->child; if ($crumb) { $name = $crumb->name; } else { $name = '###child###'; } Each::fora($layer['child'], function (&$l) use(&$name) { Crumb::set($l, 'crumb', $name); }); }, 'crumb:external'); Event::handler('layer.oninit', function (&$layer) { Each::forx($layer['childs'], function (&$l, $key) { //У этого childs ещё не взять external if (empty($l['crumb'])) { Crumb::set($l, 'crumb', $key); } }); }, 'crumb:external'); Event::handler('layer.ischeck', function (&$layer) { if (!$layer['crumb']->is) { return false; } }, 'crumb:external');
public static function set(&$layer, $name, &$value) { if (!isset($layer['dyn'])) { $layer['dyn'] = array(); } $layer['dyn'][$name] = $value; if (isset($layer['parent'])) { $root =& $layer['parent'][$name]; } else { $root =& Crumb::getInstance(); } if ($layer['dyn'][$name]) { $layer[$name] =& $root->getInst($layer['dyn'][$name]); } else { $layer[$name] =& $root; } }