public static function parse($data) { $gid = 0; $pid = 0; $groups = array(); $poss = array(); $conf = static::$conf; if (!$conf['name']) { throw new \Exception('В конфиге yml требуется указать name. Наименование компании без организационный формы'); } if (!$conf['company']) { throw new \Exception('В конфиге yml требуется указать company, название компании с организационной формой ООО'); } Xlsx::runPoss($data, function (&$pos) { $pos['Описание'] = Yml::tostr($pos['Описание']); }); Xlsx::runGroups($data, function (&$group, $i, &$parent) use(&$gid, &$groups) { $group['id'] = ++$gid; if ($parent) { $group['parentId'] = $parent['id']; } $groups[] =& $group; }); Xlsx::runPoss($data, function (&$pos, $i, &$group) use(&$pid, &$poss) { $pos['id'] = ++$pid; $pos['categoryId'] = $group['id']; $poss[] =& $pos; }); $d = array("conf" => $conf, "support" => Access::$conf["admin"]["support"], "site" => View::getPath(), "poss" => $poss, "groups" => $groups); $html = Template::parse('-yml/yml.tpl', $d); return $html; }
public function check(&$layer) { if (!empty($layer['seojsontpl'])) { $layer['seojson'] = Template::parse(array($layer['seojsontpl']), $layer); } if (empty($layer['seojson'])) { return; } $item = self::load($layer['seojson']); if (!$item) { return; } $html = View::html(); if (!empty($item['image_src'])) { self::meta($html, $item, 'link', 'image_src'); self::meta($html, $item, 'property', 'og:image', $item['image_src']); self::meta($html, $item, 'name', 'twitter:image', $item['image_src']); //self::meta($html, $item, 'itemprop', 'image', $item['image_src']); } if (!empty($item['canonical'])) { self::meta($html, $item, 'link', 'canonical'); self::meta($html, $item, 'name', 'twitter:site', $item['canonical']); self::meta($html, $item, 'property', 'og:url', $item['canonical']); //self::meta($html, $item, 'property', 'business:contact_data:website', $item['canonical']); } if (!empty($item['description'])) { self::meta($html, $item, 'name', 'description'); self::meta($html, $item, 'property', 'og:description', $item['description']); self::meta($html, $item, 'name', 'twitter:description', $item['description']); } self::meta($html, $item, 'name', 'keywords'); if (!empty($item['title'])) { self::meta($html, $item, 'title', 'title'); self::meta($html, $item, 'property', 'og:title', $item['title']); self::meta($html, $item, 'name', 'twitter:title', $item['title']); } if (!empty($item['site_name'])) { self::meta($html, $item, 'property', 'site_name'); self::meta($html, $item, 'itemprop', 'name', $item['site_name']); self::meta($html, $item, 'property', 'og:site_name', $item['site_name']); } if (!empty($item['properties'])) { foreach ($item['properties'] as $k => $v) { self::meta($html, $item['properties'], 'property', $k); } } if (!empty($item['names'])) { foreach ($item['names'] as $k => $v) { self::meta($html, $item['names'], 'name', $k); } } if (!empty($item['itemprops'])) { foreach ($item['itemprops'] as $k => $v) { self::meta($html, $item['itemprops'], 'itemprop', $k); } } View::html($html, true); }
public static function configtpl(&$layer) { $name = 'config'; //stencil// $nametpl = $name . 'tpl'; if (isset($layer[$nametpl])) { if (!isset($layer[$name])) { $layer[$name] = array(); } foreach ($layer[$nametpl] as $i => $v) { $layer[$name][$i] = Template::parse(array($layer[$nametpl][$i]), $layer); } } }
public static function jsontpl(&$layer) { $prop = 'json'; $proptpl = $prop . 'tpl'; if (@(!$layer[$proptpl])) { return; } $p = $layer[$proptpl]; $ar = is_array($p); if (!$ar) { $p = array($p); } $p = Template::parse($p, $layer); if ($ar) { $layer[$prop] = array($p); } else { $layer[$prop] = $p; } }
} } $res['src'] = $finfo['src']; $res['name'] = $finfo['file']; //имя тестируемого файла if (!$res['result']) { $errors[] = $name . ' ' . $res['name'] . ' ' . $res['msg']; } if ($type == 'errors') { if (!$res['result']) { $data['list'][$name][] = $res; } } else { $data['list'][$name][] = $res; } } } /*if ($type=='errors' && !sizeof($data['list'])) { header('Location: '.View::getPath().'-tester/'); exit; }*/ if ($type == 'auto') { $ans['result'] = !$errors; if (!$ans['result']) { $ans['msg'] = implode(', ', $errors) . '.'; } return Ans::ans($ans); } $data['type'] = $type; $html = Template::parse('-tester/index.tpl', $data); echo $html;
} $r = View::html($layer['html'], $div); if (!$r && (!isset($layer['divcheck']) || !$layer['divcheck'])) { echo 'Не найден div ' . $layer['div'] . ' infra_html<br>'; } unset($layer['html']); //нефиг в памяти весеть }, 'tpl:div'); Run::runAddList('layers'); Layer::parsedAdd('is'); Event::handler('Layer.isshow', function (&$layer) { $prop = 'is'; $proptpl = $prop . 'tpl'; if (isset($layer[$proptpl])) { $p = $layer[$proptpl]; $p = Template::parse(array($p), $layer); $layer[$prop] = $p; } if (!isset($layer['is']) || is_null($layer['is'])) { $is = true; } else { $is = $layer['is']; } if ($is == '0') { $is = false; } //В шаблоне false не удаётся вернуть return $is; }, 'is:div'); Event::handler('Layer.isshow', function (&$layer) { //tpl depricated
public static function parse($html, $soft = false) { if (!$soft) { $html = preg_replace('/<table>/', '<table class="table table-striped">', $html); } if (!$soft) { $html = preg_replace('/<img/', '<img alt="" class="img-thumbnail"', $html); } $html = preg_replace("/<\\/a>/", "</a>\n", $html); //youtube $ptube = rub_ptube(); $pattern = '/<a[^>]*>' . $ptube . '(<\\/a>)/i'; $youtpl = <<<END \t\t<center><div class="embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" width="640" height="480" src="https://www.youtube.com/embed/{3}" frameborder="0" allowfullscreen></iframe></div></center> END; do { $match = array(); preg_match($pattern, $html, $match); if (sizeof($match) > 1) { $a = $match[1]; $aa = $match[4]; $files[] = $match[2]; $youhtml = Template::parse(array($youtpl), $match); $html = preg_replace($pattern, $youhtml, $html, 1); } } while (sizeof($match) > 1); //youtube2 $ptube = rub_ptube2(); $pattern = '/<a[^>]*>' . $ptube . '(<\\/a>)/i'; $youtpl = <<<END \t\t<center><div class="embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item" width="640" height="480" src="https://www.youtube.com/embed/{1}" frameborder="0" allowfullscreen></iframe></div></center> END; do { $match = array(); preg_match($pattern, $html, $match); if (sizeof($match) > 1) { $a = $match[1]; $aa = $match[4]; $files[] = $match[2]; $youhtml = Template::parse(array($youtpl), $match); $html = preg_replace($pattern, $youhtml, $html, 1); } } while (sizeof($match) > 1); //files //setlocale(LC_ALL, 'ru_RU.UTF-8'); $files = array(); $pattern = '/(<a.*href="\\/\\-rubrics\\/?[^"]*id=(\\w+)&type=(\\w+)&[^"]*load".*>)([^~<]*?)(<\\/a>)/u'; do { $match = array(); preg_match($pattern, $html, $match); if (sizeof($match) > 1) { $a = $match[1]; $id = $match[2]; $type = $match[3]; $title = $match[4]; $aa = $match[5]; $files[] = array('id' => $id, 'type' => $type); $html = preg_replace($pattern, $a . '~' . $title . $aa, $html, 1); } } while (sizeof($match) > 1); $filesd = array(); foreach ($files as $f) { $filed = rub_get($f['type'], $f['id'], array()); if ($filed) { $filed['type'] = $f['type']; $filesd[$f['id']] = $filed; } } $pattern = '/(<a.*href="\\/\\-rubrics\\/\\?[^"]*id=(\\w+)&type=(\\w+)&[^"]*load".*>)~([^~<]*?)(<\\/a>)/u'; $tpl = <<<END \t\t\t<nobr><a href="/-rubrics/?id={id}&type={type}&load" title="{name}">{title}</a> <img alt="" style="margin-right:3px;" src="/-imager/?src=-autoedit/icons/{ext}.png&w=16" title="{name}"> {size} Мб</nobr> END; do { preg_match($pattern, $html, $match); if (sizeof($match) > 1) { $a = $match[1]; $title = $match[4]; $aa = $match[5]; $type = $match[3]; $id = $match[2]; if ($filesd[$id]) { $d = $filesd[$id]; $d['title'] = $title; $t = Template::parse(array($tpl), $d); $html = preg_replace($pattern, $t, $html, 1); } else { $html = preg_replace($pattern, $a . $title . $aa, $html, 1); } } } while (sizeof($match) > 1); $html = preg_replace("/<\\/a>\n/", '</a>', $html); return $html; }
} if (!is_file($dir . $file)) { return; } $ext = Path::getExt($file); if ($ext != 'md') { return; } $res = array('src' => $dir . $file, 'vendor' => $vendor, 'name' => $name, 'file' => $file); $map['vendors'][$vendor][$name]['list'][] = $res; $map['names'][$dir] =& $map['vendors'][$vendor][$name]; }, scandir($dir)); }, scandir($dir)); }, scandir($dir)); return $map; }); $fd = Load::srcInfo($src); if (isset($map['names'][$fd['folder']])) { $namedata = $map['names'][$fd['folder']]; } else { $namedata = array(); } $text = file_get_contents(Path::theme($src)); $body = Markdown::defaultTransform($text); //$data['files']=$files; $data['map'] = $map; $data['src'] = $src; $data['namedata'] = $namedata; $data['body'] = $body; $html = Template::parse(Path::theme('-mdreader/index.tpl'), $data); echo $html;
<?php namespace infrajs\infra; use infrajs\access\Access; use infrajs\event\Event; use infrajs\ans\Ans; use infrajs\template\Template; use infrajs\sequence\Sequence; use infrajs\load\Load; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array('title' => 'Проверяем простые функции шаблонизатора'); $data = array('Artur' => 'Yanturin', 'company' => array('UzDaewoo' => array(array('title' => 'Cobalt', 'year' => 2033, 'mileage' => 1000), array('title' => 'Malibu', 'year' => 2014, 'mileage' => 100), array('title' => 'Nexia', 'year' => 2012, 'mileage' => 100000)), 'Lada' => array(array('title' => 'Vesta', 'year' => 2006, 'mileage' => 65452), array('title' => 'Largus', 'year' => 2010, 'mileage' => 36974), array('title' => 'Priora', 'year' => 2008, 'mileage' => 7852)), 'Mercedes' => array(array('title' => 'CLA 45 AMG', 'year' => 2010, 'mileage' => 78674), array('title' => 'МL 63 AMG ', 'year' => 2011, 'mileage' => 852126), array('title' => 'A 45 AMG', 'year' => 2011, 'mileage' => 654212)))); $html = Template::parse('-template/tests/resources/simpletpl.html', $data, 'text', 'company.UzDaewoo'); if ($html == 'title:MalibuVestayear:2014Vestamileage:100Vesta') { $ans['result'] = 1; } else { $ans['result'] = 0; } return $ans;
public static function check(&$layer) { if (!empty($layer['seojsontpl'])) { $layer['seojson'] = Template::parse(array($layer['seojsontpl']), $layer); } if (empty($layer['seojson'])) { return; } $item = self::load($layer['seojson']); if (!$item) { return; } $html = View::html(); if (!empty($item['image_src'])) { self::meta($html, $item, 'link', 'image_src'); self::meta($html, $item, 'property', 'og:image', $item['image_src']); self::meta($html, $item, 'name', 'twitter:image', $item['image_src']); //self::meta($html, $item, 'itemprop', 'image', $item['image_src']); } if (empty($item['canonical'])) { $query = preg_replace('/^\\//', '', $_SERVER['REQUEST_URI']); $item['canonical'] = View::getPath() . $query; } if (!empty($item['canonical'])) { self::meta($html, $item, 'link', 'canonical'); self::meta($html, $item, 'name', 'twitter:site', $item['canonical']); self::meta($html, $item, 'property', 'og:url', $item['canonical']); //self::meta($html, $item, 'property', 'business:contact_data:website', $item['canonical']); } if (!empty($item['description'])) { self::meta($html, $item, 'name', 'description'); self::meta($html, $item, 'property', 'og:description', $item['description']); self::meta($html, $item, 'name', 'twitter:description', $item['description']); } self::meta($html, $item, 'name', 'keywords'); if (!empty($item['title'])) { self::meta($html, $item, 'title', 'title'); self::meta($html, $item, 'property', 'og:title', $item['title']); self::meta($html, $item, 'name', 'twitter:title', $item['title']); } if (!empty($item['site_name'])) { self::meta($html, $item, 'property', 'site_name'); self::meta($html, $item, 'itemprop', 'name', $item['site_name']); self::meta($html, $item, 'property', 'og:site_name', $item['site_name']); } if (empty($item['properties']['og:type'])) { self::meta($html, $item, 'property', 'og:type', 'website'); } if (!empty($item['properties'])) { foreach ($item['properties'] as $k => $v) { self::meta($html, $item['properties'], 'property', $k, $v); } } if (!empty($item['names'])) { foreach ($item['names'] as $k => $v) { self::meta($html, $item['names'], 'name', $k, $v); } } if (!empty($item['itemprops'])) { foreach ($item['itemprops'] as $k => $v) { self::meta($html, $item['itemprops'], 'itemprop', $k, $v); } } View::html($html, true); }
<?php namespace infrajs\infra; use infrajs\access\Access; use infrajs\event\Event; use infrajs\ans\Ans; use infrajs\template\Template; use infrajs\path\Path; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } /* Пустой шаблон также содержи подшаблон root, ошибка что возвращается слово root */ $ans = array('title' => 'Проверка что пустой шаблон не возвращает слово root'); $ans['res'] = Template::parse(array(''), true); if ($ans['res'] !== '') { return Ans::err($ans, 'Непройден тест 1 {res}'); } $ans['res'] = Template::parse(array('')); if ($ans['res'] !== '') { return Ans::err($ans, 'Непройден тест 2 {res}'); } return Ans::ret($ans, 'Все теcты пройдены');
$conf = Config::get('subscribe'); if (empty($_REQUEST['email'])) { return Ans::err($ans, $conf['msg']); } if (strlen($_REQUEST['email']) > 1000) { return Ans::err($ans, 'Слишком много данных. ' . $conf['msg']); } $email = strip_tags($_REQUEST['email']); $email = trim($email); $email = Path::encode($email); $agent = $_SERVER['HTTP_USER_AGENT']; $ip = $_SERVER['REMOTE_ADDR']; session_start(); if (empty($_SESSION['submit_time'])) { $_SESSION['submit_time'] = 0; } if (time() - $_SESSION['submit_time'] < 60) { return Ans::err($ans, 'Письмо уже отправлено! Новое сообщение можно будет отправить через 1 минуту!'); } $_SESSION['submit_time'] = time(); $data = array('email' => $email, 'agent' => $agent, 'ip' => $ip, 'host' => $_SERVER['HTTP_HOST']); $body = Template::parse('-subscribe/subscribe.mail.tpl', $data); Mail::toAdmin('Запрос ' . $data['host'] . ' ' . $email, 'noreplay@' . $data['host'], $body); $src = Path::resolve('~.subscribe.json'); $subs = Load::loadJSON($src); if (!$subs) { $subs = array(); } $subs[$email] = date('d.m.Y'); file_put_contents($src, Load::json_encode($subs)); return Ans::ret($ans, 'Ваша заявка принята');
}, '~match' => function ($exp, $val) { preg_match('/' . $exp . '/', $val, $match); return $match; }, '~test' => function ($exp, $val) { $r = preg_match('/' . $exp . '/', $val); return !!$r; }, '~lower' => function ($str) { return mb_strtolower($str); }, '~upper' => function ($str) { return mb_strtoupper($str); }, '~parse' => function ($str = '') { $conf = Template::$moment; if (!$str) { return ''; } $res = Template::parse($str, $conf['data'], 'root', $conf['dataroot'], 'root'); //(url,data,tplroot,dataroot,tplempty){ return $res; }, '~indexOf' => function ($str, $v = null) { //Начиная с нуля if (is_null($v)) { return -1; } $r = mb_stripos($str, $v); if ($r === false) { $r = -1; } return $r; }, '~last' => function () { $conf = Template::$moment; $dataroot = $conf['dataroot'];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); echo '</td><td>'; echo @$t['com']; echo '</td><tr>'; } echo '</table>'; } else { $ans = array(); $ans['title'] = 'Тест шаблонизатора. Без 3х известных ошибок.'; $ans['class'] = 'bg-warning'; foreach ($tpls as $key => $t) { if ($key < 3) { continue; } if (@is_null($t['data'])) { $data = array(); } else { $data = $t['data']; } $r = Template::parse(array($t['tpl']), $data); if ($r !== $t['res']) { $ans['msg'] = 'Ошибка ' . $t['tpl']; echo json_encode($ans, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); return; } } $ans['msg'] = 'Всё ок'; $ans['result'] = 1; echo json_encode($ans, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); return; }
} elseif (isset($_REQUEST['logout'])) { Access::admin(false); ?> <div style="padding:50px 100px"> <p>Вы обычный посетитель</p> <p><a href="?">Проверить</a></p> </div> <?php } else { $r = Access::admin(); if ($r) { Config::get('template'); echo Template::parse('-admin/index.tpl'); ?> <div style="padding:50px 100px"> <p>Вы администратор</p> <p><a href="?logout">Выход</a></p> </div> <?php } else { ?> <div style="padding:50px 100px"> <p>Вы обычный посетитель</p> <p><a href="?login">Вход</a></p> </div> <?php } }
<?php namespace infrajs\infra; use infrajs\access\Access; use infrajs\event\Event; use infrajs\ans\Ans; use infrajs\template\Template; use infrajs\path\Path; use infrajs\sequence\Sequence; use infrajs\load\Load; if (!is_file('vendor/autoload.php')) { chdir('../../../../'); require_once 'vendor/autoload.php'; } $ans = array('title' => 'Тест 0 элемента в массиве. Известная проблема.', 'class' => 'bg-warning'); $tpl = '{root:}{0:test}{test:}{title}'; $data = array(array('title' => 'good')); $html = Template::parse(array($tpl), $data, 'root'); echo $html; $ans['class'] = 'bg-warning'; if ($html != 'good') { return Ans::ret($ans, '0 элемент принят за false как будто его нет'); } return Ans::ret($ans, 'Теcт пройдены. Получился ожидаемый результат поле распарсивания шаблона.');
use infrajs\ans\Ans; use infrajs\load\Load; if (!is_file('vendor/autoload.php')) { chdir('../../../'); require_once 'vendor/autoload.php'; Config::init(); } $ans = array('title' => 'Запуск шаблонизатора'); $tpl = '{infra.config(name).main}'; $data = array('name' => 'rubrics'); $html = Template::parse(array($tpl), $data); if (!$html) { return Ans::err($ans, $tpl . ' возрващает пустую строку ' . $html); } $tpl = '{infra.config(:rubrics).main}'; $data = true; $html = Template::parse(array($tpl), $data); if (!$html) { return Ans::err($ans, $tpl . ' возрващает пустую строку ' . $html); } $conf = Config::get('rubrics'); $tpl = '{list::test}{test:}1{:date}{date:}{~date(:F,~true)}'; $data = Load::loadJSON('-rubrics/?type=' . $conf['main'] . '&list'); if (sizeof($data['list'])) { //Это если есть данные иначе тест этот не проводим $html = Template::parse(array($tpl), $data); if (!$html) { return Ans::err($ans, ' возрващает пустую строку ' . $html); } } return Ans::ret($ans);
$_SESSION['submit_time'] = time(); } $ans['testmail'] = $mdata['testmail']; if ($maildir) { $folder = Path::theme($maildir); $name = Path::tofs(Path::encode($data['name'])); $fname = date('Y F j H-i') . ' ' . $name . ' ' . time(); if ($conf['file'] && $file) { $src = $folder . $fname . '.' . Path::tofs($file['name']); $r = move_uploaded_file($file['tmp_name'], $src); if (!$r) { return Ans::err($ans, 'Неудалось загрузить файл'); } $data['file'] = Path::toutf(Path::pretty($src)); } } $body = Template::parse('-contacts/mail.tpl', $data); if (!$body) { $body = 'Ошибка. Не найден шаблон письма!'; } if ($maildir) { file_put_contents($folder . $fname . '.txt', print_r($body, true) . "\n\n\n\n\n" . print_r($mdata, true)); } if (!isset($mdata['email_from'])) { return Ans::err($ans, 'Ошибка с адресом получателя!'); } $r = Mail::toAdmin($mdata['subject'], $mdata['email_from'], $body, $mdata['testmail']); if (!$r) { return Ans::err($ans, "Неудалось отправить письмо из-за ошибки на сервере!"); } return Ans::ret($ans, "Письмо отправлено!<blockquote>" . $data['text'] . "</blockquote>");
<?php use infrajs\template\Template; require_once __DIR__ . '/../../../../vendor/autoload.php'; $ans = array('title' => 'Простой тест'); $res = Template::parse(array('as{test}df'), array('test' => 1)); if ($res == 'as1df') { $ans['result'] = true; } echo json_encode($ans, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
$layer['div'] = $layer['parent']['div']; } }, 'div'); Event::handler('layer.oncheck', function (&$layer) { //Без этого не показывается окно cо стилями.. только его заголовок.. Each::forx($layer['divs'], function (&$l, $div) { if (@(!$l['div'])) { $l['div'] = $div; } }); }, 'div'); Event::handler('layer.oncheck', function (&$layer) { if (!isset($layer['divtpl'])) { 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; }
<?php namespace infrajs\template; use infrajs\template\Template; use infrajs\config\Config; /* В infra все пути относительные... относительно корня, несмотря на то где реально находится файл */ $isinfra = is_file('vendor/autoload.php'); if (!$isinfra) { require_once '../../../../vendor/autoload.php'; $tpl = "{:inc.test}{inc::}resources/inc.tpl"; } else { $tpl = "{:inc.test}{inc::}-template/tests/resources/inc.tpl"; } $data = array(); $res = Template::parse(array($tpl), $data); $ans['res'] = $res; if ($res != 'Привет!') { $ans['result'] = false; $ans['msg'] = 'Неожиданный резльтат'; echo json_encode($ans, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); return; } $ans['result'] = true; echo json_encode($ans, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); return;