<?php namespace infrajs\layer\env; use infrajs\path\Path; use infrajs\event\Event; use infrajs\controller\Layer; use infrajs\config\Config; Config::get('controller'); Event::handler('Infrajs.oninit', function () { Env::init(); Layer::parsedAdd('envval'); }); Event::handler('layer.oncheck', function (&$layer) { Env::checkinit($layer); }, 'env:config,external'); Event::handler('layer.oncheck', function (&$layer) { Env::envtochild($layer); }, 'env:config,external'); Event::handler('layer.oncheck', function (&$layer) { Env::envframe($layer); }, 'env:config,external'); Event::handler('layer.oncheck', function (&$layer) { Env::envframe2($layer); }, 'env:config,external'); Event::handler('layer.oncheck', function (&$layer) { Env::envmytochild($layer); }, 'env:config,external'); Event::handler('layer.isshow', function (&$layer) { return Env::check($layer); }, 'env:counter,tpl,div,is');
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');
<?php namespace infrajs\layer\css; use infrajs\controller\Layer; use infrajs\event\Event; Event::handler('layer.onshow', function (&$layer) { if (Layer::pop($layer, 'onlyclient')) { return; } Css::check($layer); }, 'css');
namespace infrajs\controller; use infrajs\view\View; use infrajs\ans\Ans; use infrajs\path\Path; use infrajs\config\Config; use infrajs\event\Event; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array(); $ans['title'] = 'Проверка функции Controller::check'; View::html('<div id="oh"></div>', true); Config::get('controller'); //Нужно инициализировать Crumb с Контроллером, crumb может работать самостоятельно. Crumb::init(); $layer = array('tpl' => array('хой<div id="test"></div>'), 'div' => 'oh'); $html = Controller::check($layer); if ($html != '<div id="oh">хой<div id="test"></div></div>') { return Ans::err($ans, 'Ошибка'); } $layer = array('tpl' => array('опа'), 'div' => 'test'); $html = Controller::check($layer); if ($html != '<div id="oh">хой<div id="test">опа</div></div>') { return Ans::err($ans, 'Ошибка ' . $html); } Layer::$start_id = 1; Layer::$ids = array(); View::html('', true); return Ans::ret($ans, 'Работает две генерации');
public static function getHtml(&$layer) { //Вызывается как для основных так и для подслойв tpls frame. Расширяется в tpltpl.prop.js //if(@$layer['tplclient'])return ''; $row = Layer::parsed($layer); //$row=$_SERVER['QUERY_STRING'],$layer['id']; //Нельзя кэшировать слои в которых показываются динамические данные, данные пользователя определяется заголовком у данных //Кэш создаётся от любого пользователя. //Чтобы узнать что кэш делать не нужно... это знают данные они либо js либо php //При загрузки данных те должны выкидывать заголовки не кэшировать, либо не выкидывать если это просто парсер Excel //Нас интересует зависит ли html слоя от пользователя, если зависит кэшировать нельзя //Зависит если используется $_SESSION, infra_session, infra_admin //примечательно что конект к базе не запрещает кэширование этого слоя //Узнавать о всём этом мы будем по заголовкам //Так чтобы следующий слой взялся уже нормально заголовки нужно заменять... //Тем более заменять заголовки нужно в любом случае если кэшируется чтобы и браузер кэшировал //Проблема при первом session_get конект к базе и вызов session_init в следующем подключении init не вызывается //но для следующего подключения нам нужно понять что есть динамика// По этому загловки отправляются в том числе и руками в скритпах Cache-Control:no-cache $html = Access::cache('infrajs_getHtml', function () use(&$layer) { //Здесь мог быть установлен infrajs['com'] его тоже нужно вернуть/ А вот после loadTEXT мог быть кэш и ничего не установится $html = Tpl::_getHtml($layer); return $html; }, array($row)); //Кэш обновляемый с последней авторизацией админа определяется строкой parsed слоя return $html; }
<?php namespace infrajs\controller; use infrajs\router\Router; use infrajs\load\Load; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; Router::init(); } $data = Controller::$conf['index']; Run::exec($data, function &(&$layer) { while (@$layer['external'] && !Layer::pop($layer, 'onlyclient')) { $ext =& $layer['external']; External::checkExt($layer, $ext); } $r = null; return $r; }); $data = Load::json_encode($data); ?> infrajs.checkAdd(<?php echo $data; ?> ); Event.handler('Crumb.onchange', function () { infrajs.check(); }, 'infrajs');<?php
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; }