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 срабатывают постоянно, так как нельзя поставить отметку о том что обработчик сохранён $r = null; return $r; }); $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; }
<?php namespace infrajs\controller; use infrajs\controller\Controller; use infrajs\controller\Run; use infrajs\view\View; use infrajs\ans\Ans; use infrajs\template\Template; use infrajs\path\Path; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array(); $obj = array(); $obj['tpl'] = array('1{:add}'); $obj['tplsm'] = array('{add:}2'); $obj['data'] = array('asdf' => 1); $tpls = Template::make($obj['tpl']); //С кэшем перепарсивания $repls = array(); $t = Template::make($obj['tplsm']); $repls[] = $t; $alltpls = array(&$repls, &$tpls); $html = Template::exec($alltpls, $obj['data']); if ($html != '12') { return Ans::err($ans, 'err'); } return Ans::ret($ans, 'ret');