mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-03 18:04:26 +02:00
WIP on creating new CodeFrames using nette
This commit is contained in:
@@ -31,7 +31,8 @@
|
|||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2 || ^8.0",
|
"php": "^7.2 || ^8.0",
|
||||||
"symfony/polyfill-mbstring": "^1.27"
|
"symfony/polyfill-mbstring": "^1.27",
|
||||||
|
"nette/php-generator": "^3.6"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4" : {
|
"psr-4" : {
|
||||||
|
25
src/CodeFrame/Base.php
Normal file
25
src/CodeFrame/Base.php
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Smarty\CodeFrame;
|
||||||
|
|
||||||
|
abstract class Base {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Smarty\Smarty
|
||||||
|
*/
|
||||||
|
private $smarty;
|
||||||
|
|
||||||
|
public function __construct(\Smarty\Smarty $smarty) {
|
||||||
|
$this->smarty = $smarty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isFresh(\Smarty\Template $template): bool {
|
||||||
|
return $template->isFresh($this->getProperties(), $this->isCache());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function isCache(): bool {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract protected function getProperties(): array;
|
||||||
|
}
|
10
src/CodeFrame/Cached.php
Normal file
10
src/CodeFrame/Cached.php
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Smarty\CodeFrame;
|
||||||
|
|
||||||
|
abstract class Cached extends Base {
|
||||||
|
|
||||||
|
protected function isCache(): bool {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
@@ -43,8 +43,29 @@ class CodeFrame
|
|||||||
$cache = false,
|
$cache = false,
|
||||||
\Smarty\Compiler\Template $compiler = null
|
\Smarty\Compiler\Template $compiler = null
|
||||||
) {
|
) {
|
||||||
// build property code
|
|
||||||
|
$className = ($cache ? 'Cached' : 'Compiled') . str_replace(array('.', ','), '_', uniqid('', true));
|
||||||
|
$properties = [];
|
||||||
|
|
||||||
$properties['version'] = \Smarty\Smarty::SMARTY_VERSION;
|
$properties['version'] = \Smarty\Smarty::SMARTY_VERSION;
|
||||||
|
|
||||||
|
$file = new \Nette\PhpGenerator\PhpFile;
|
||||||
|
$file->addComment('This file is auto-generated.');
|
||||||
|
$class = $file->addClass($className);
|
||||||
|
|
||||||
|
$class
|
||||||
|
->setFinal()
|
||||||
|
->setExtends($cache ? \Smarty\CodeFrame\Cached::class : \Smarty\CodeFrame\Base::class)
|
||||||
|
->addComment(sprintf(
|
||||||
|
"Created on %s from '%s'",
|
||||||
|
$properties[ 'version' ],
|
||||||
|
date("Y-m-d H:i:s"),
|
||||||
|
str_replace('*/', '* /', $this->_template->getSource()->filepath)
|
||||||
|
));
|
||||||
|
|
||||||
|
$dumper = new \Nette\PhpGenerator\Dumper;
|
||||||
|
|
||||||
|
// build property code
|
||||||
$properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
|
$properties[ 'unifunc' ] = 'content_' . str_replace(array('.', ','), '_', uniqid('', true));
|
||||||
if (!$cache) {
|
if (!$cache) {
|
||||||
$properties[ 'has_nocache_code' ] = $this->_template->getCompiled()->getNocacheCode();
|
$properties[ 'has_nocache_code' ] = $this->_template->getCompiled()->getNocacheCode();
|
||||||
@@ -55,8 +76,16 @@ class CodeFrame
|
|||||||
$properties[ 'file_dependency' ] = $this->_template->getCached()->file_dependency;
|
$properties[ 'file_dependency' ] = $this->_template->getCached()->file_dependency;
|
||||||
$properties[ 'cache_lifetime' ] = $this->_template->cache_lifetime;
|
$properties[ 'cache_lifetime' ] = $this->_template->cache_lifetime;
|
||||||
}
|
}
|
||||||
$output = sprintf(
|
|
||||||
"<?php\n/* Smarty version %s, created on %s\n from '%s' */\n\n",
|
$class->addMethod('getProperties')
|
||||||
|
->setProtected()
|
||||||
|
->setReturnType('array') // method return type
|
||||||
|
->setBody('return ' . $dumper->dump($properties) . ';');
|
||||||
|
|
||||||
|
$output = (string) $file;
|
||||||
|
|
||||||
|
$output .= sprintf(
|
||||||
|
"\n/* Created on %s\n from '%s' */\n\n",
|
||||||
$properties[ 'version' ],
|
$properties[ 'version' ],
|
||||||
date("Y-m-d H:i:s"),
|
date("Y-m-d H:i:s"),
|
||||||
str_replace('*/', '* /', $this->_template->getSource()->filepath)
|
str_replace('*/', '* /', $this->_template->getSource()->filepath)
|
||||||
|
Reference in New Issue
Block a user