//Возможно у родителей обновился 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 _getHtml(&$layer) { //Вызывается как для основных так и для подслойв tpls frame. Расширяется в tpltpl.prop.js if (@$layer['data'] || @$layer['json'] || @$layer['tpls'] || @$layer['tplroot']) { $tpls = Template::make($layer['tpl']); //С кэшем перепарсивания Template::includes($tpls); $repls = array(); //- подшаблоны для замены, Важно, что оригинальный распаршеный шаблон не изменяется Each::fora($layer['tplsm'], function ($tm) use(&$repls) { //mix tpl $t = Template::make($tm); //С кэшем перепарсивания array_push($repls, $t); //for(var i in t)repls[i]=t[i];//Нельзя подменять в оригинальном шаблоне, который в других местах может использоваться без подмен //^ из-за этого обработчики указанные в tplsm срабатывают постоянно, так как нельзя поставить отметку о том что обработчик сохранён }); $layer['data'] =& self::getData($layer); //подменили строку data на объект data $alltpls = array(&$repls, &$tpls); $html = Template::exec($alltpls, $layer, @$layer['tplroot'], @$layer['dataroot']); } else { $tpl = self::getTpl($layer); $html = $tpl; } if (!$html) { $html = ''; } return $html; }