Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
1028899f
Commit
1028899f
authored
Dec 30, 2013
by
Alexander Makarov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixes #1609: Adjusted code style, added some docs
parent
2528cd54
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
68 additions
and
37 deletions
+68
-37
template.md
docs/guide/template.md
+38
-0
CHANGELOG.md
extensions/yii/twig/CHANGELOG.md
+1
-2
README.md
extensions/yii/twig/README.md
+1
-0
TwigSimpleFileLoader.php
extensions/yii/twig/TwigSimpleFileLoader.php
+13
-16
ViewRenderer.php
extensions/yii/twig/ViewRenderer.php
+14
-17
ViewRendererStaticClassProxy.php
extensions/yii/twig/ViewRendererStaticClassProxy.php
+1
-2
No files found.
docs/guide/template.md
View file @
1028899f
...
@@ -21,6 +21,9 @@ component's behavior:
...
@@ -21,6 +21,9 @@ component's behavior:
'class'
=>
'yii\twig\ViewRenderer'
,
'class'
=>
'yii\twig\ViewRenderer'
,
//'cachePath' => '@runtime/Twig/cache',
//'cachePath' => '@runtime/Twig/cache',
//'options' => [], /* Array of twig options */
//'options' => [], /* Array of twig options */
'globals'
=>
[
'html'
=>
'\yii\helpers\Html'
],
*
Example
:
*
Than
in
template
:
{{
html
.
link
(
'Login'
,
'site/login'
)
}}
],
],
// ...
// ...
],
],
...
@@ -67,6 +70,41 @@ Within Twig templates, you can also make use of these variables:
...
@@ -67,6 +70,41 @@ Within Twig templates, you can also make use of these variables:
-
`app`
, which equates to
`\Yii::$app`
-
`app`
, which equates to
`\Yii::$app`
-
`this`
, which equates to the current
`View`
object
-
`this`
, which equates to the current
`View`
object
### Globals
You can add global helpers or values via config's
`globals`
. It allows both using Yii helpers and setting your own
values:
```
php
'globals'
=>
[
'html'
=>
'\yii\helpers\Html'
,
'name'
=>
'Carsten'
,
],
```
Then in your template you can use it the following way:
```
Hello, {{name}}! {{ html.link('Please login', 'site/login') }}.
```
### Additional filters
Additional filters may be added via config's
`filters`
option:
```
php
'filters'
=>
[
'jsonEncode'
=>
'\yii\helpers\Json::encode'
,
],
```
Then in the template you can use
```
{{ model|jsonEncode }}
```
Smarty
Smarty
------
------
...
...
extensions/yii/twig/CHANGELOG.md
View file @
1028899f
...
@@ -4,8 +4,7 @@ Yii Framework 2 twig extension Change Log
...
@@ -4,8 +4,7 @@ Yii Framework 2 twig extension Change Log
2.
0.0 beta under development
2.
0.0 beta under development
----------------------------
----------------------------
-
no changes in this release.
-
Add File based Twig loader for better caching and usability of twig's file based function (dev-mraj, samdark)
-
Add File based Twig loader for better caching and usability of twig's file based function
2.
0.0 alpha, December 1, 2013
2.
0.0 alpha, December 1, 2013
-----------------------------
-----------------------------
...
...
extensions/yii/twig/README.md
View file @
1028899f
...
@@ -15,6 +15,7 @@ return [
...
@@ -15,6 +15,7 @@ return [
'class'
=>
'yii\twig\ViewRenderer'
,
'class'
=>
'yii\twig\ViewRenderer'
,
//'cachePath' => '@runtime/Twig/cache',
//'cachePath' => '@runtime/Twig/cache',
//'options' => [], /* Array of twig options */
//'options' => [], /* Array of twig options */
// ... see ViewRenderer for more options
],
],
],
],
],
],
...
...
extensions/yii/twig/TwigSimpleFileLoader.php
View file @
1028899f
...
@@ -14,21 +14,20 @@ namespace yii\twig;
...
@@ -14,21 +14,20 @@ namespace yii\twig;
* Twig view file loader class.
* Twig view file loader class.
*
*
* @author dev-mraj <dev.meghraj@gmail.com>
* @author dev-mraj <dev.meghraj@gmail.com>
* @version 1.0.0
*/
*/
class
TwigSimpleFileLoader
implements
\Twig_LoaderInterface
{
class
TwigSimpleFileLoader
implements
\Twig_LoaderInterface
{
/**
/**
* @var string Path to directory
* @var string Path to directory
*/
*/
private
$_dir
;
private
$_dir
;
/*
/*
*
* @param
@dir string
path to directory
* @param
string $dir
path to directory
*/
*/
public
function
__construct
(
$dir
)
public
function
__construct
(
$dir
)
{
{
$this
->
_dir
=
$dir
;
$this
->
_dir
=
$dir
;
}
}
/**
/**
...
@@ -36,17 +35,17 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
...
@@ -36,17 +35,17 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
*
*
* @param $name string file name to check
* @param $name string file name to check
* @param $time int timestamp to compare with
* @param $time int timestamp to compare with
* @return bool true if file is still fresh and not changes, false otherwise
* @return bool
ean
true if file is still fresh and not changes, false otherwise
*/
*/
public
function
isFresh
(
$name
,
$time
)
public
function
isFresh
(
$name
,
$time
)
{
{
return
filemtime
(
$this
->
getFilePath
(
$name
))
<=
$time
;
return
filemtime
(
$this
->
getFilePath
(
$name
))
<=
$time
;
}
}
/**
/**
*
g
et the source of given file name
*
G
et the source of given file name
*
*
* @param
$name string
file name
* @param
string $name
file name
* @return string contents of given file name
* @return string contents of given file name
*/
*/
public
function
getSource
(
$name
)
public
function
getSource
(
$name
)
...
@@ -55,8 +54,8 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
...
@@ -55,8 +54,8 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
}
}
/**
/**
*
get a
unique key that can represent this file uniquely among other files.
*
Get
unique key that can represent this file uniquely among other files.
* @param $name
* @param
string
$name
* @return string
* @return string
*/
*/
public
function
getCacheKey
(
$name
)
public
function
getCacheKey
(
$name
)
...
@@ -66,11 +65,10 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
...
@@ -66,11 +65,10 @@ class TwigSimpleFileLoader implements \Twig_LoaderInterface {
/**
/**
* internally used to get absolute path of given file name
* internally used to get absolute path of given file name
* @param
$name string
file name
* @param
string $name
file name
* @return string absolute path of file
* @return string absolute path of file
*/
*/
protected
function
getFilePath
(
$name
){
protected
function
getFilePath
(
$name
){
return
$this
->
_dir
.
'/'
.
$name
;
return
$this
->
_dir
.
'/'
.
$name
;
}
}
}
}
\ No newline at end of file
extensions/yii/twig/ViewRenderer.php
View file @
1028899f
...
@@ -13,7 +13,6 @@ use Yii;
...
@@ -13,7 +13,6 @@ use Yii;
use
yii\base\View
;
use
yii\base\View
;
use
yii\base\ViewRenderer
as
BaseViewRenderer
;
use
yii\base\ViewRenderer
as
BaseViewRenderer
;
use
yii\helpers\Html
;
use
yii\helpers\Html
;
use
yii\twig\TwigSimpleFileLoader
;
/**
/**
* TwigViewRenderer allows you to use Twig templates in views.
* TwigViewRenderer allows you to use Twig templates in views.
...
@@ -37,7 +36,7 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -37,7 +36,7 @@ class ViewRenderer extends BaseViewRenderer
/**
/**
* @var array Objects or static classes
* @var array Objects or static classes
* Keys of array are names to call in template, values - objects or names of static class as string
* Keys of array are names to call in template, values - objects or names of static class as string
* Example:
array('html'=>'\yii\helpers\Html')
* Example:
['html' => '\yii\helpers\Html']
* Than in template: {{ html.link('Login', 'site/login') }}
* Than in template: {{ html.link('Login', 'site/login') }}
*/
*/
public
$globals
=
[];
public
$globals
=
[];
...
@@ -45,7 +44,7 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -45,7 +44,7 @@ class ViewRenderer extends BaseViewRenderer
/**
/**
* @var array Custom functions
* @var array Custom functions
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Example:
array('rot13'=>'str_rot13', 'link'=>'\yii\helpers\Html::link')
* Example:
['rot13' => 'str_rot13', 'link' => '\yii\helpers\Html::link']
* Than in template: {{ rot13('test') }} or {{ link('Login', 'site/login') }}
* Than in template: {{ rot13('test') }} or {{ link('Login', 'site/login') }}
*/
*/
public
$functions
=
[];
public
$functions
=
[];
...
@@ -53,14 +52,14 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -53,14 +52,14 @@ class ViewRenderer extends BaseViewRenderer
/**
/**
* @var array Custom filters
* @var array Custom filters
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Keys of array are names to call in template, values - names of functions or static methods of some class
* Example:
array('rot13'=>'str_rot13', 'jsonEncode'=>'\yii\helpers\Json::encode')
* Example:
['rot13' => 'str_rot13', 'jsonEncode' => '\yii\helpers\Json::encode']
* Then in template: {{ 'test'|rot13 }} or {{ model|jsonEncode }}
* Then in template: {{ 'test'|rot13 }} or {{ model|jsonEncode }}
*/
*/
public
$filters
=
[];
public
$filters
=
[];
/**
/**
* @var array Custom extensions
* @var array Custom extensions
* Example:
array('Twig_Extension_Sandbox', 'Twig_Extension_Text')
* Example:
['Twig_Extension_Sandbox', 'Twig_Extension_Text']
*/
*/
public
$extensions
=
[];
public
$extensions
=
[];
...
@@ -69,9 +68,9 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -69,9 +68,9 @@ class ViewRenderer extends BaseViewRenderer
* @see http://twig.sensiolabs.org/doc/recipes.html#customizing-the-syntax
* @see http://twig.sensiolabs.org/doc/recipes.html#customizing-the-syntax
* Example: Smarty-like syntax
* Example: Smarty-like syntax
* array(
* array(
* 'tag_comment' =>
array('{*', '*}')
,
* 'tag_comment' =>
['{*', '*}']
,
* 'tag_block' =>
array('{', '}')
,
* 'tag_block' =>
['{', '}']
,
* 'tag_variable' =>
array('{$', '}')
* 'tag_variable' =>
['{$', '}']
* )
* )
*/
*/
public
$lexerOptions
=
[];
public
$lexerOptions
=
[];
...
@@ -100,27 +99,29 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -100,27 +99,29 @@ class ViewRenderer extends BaseViewRenderer
if
(
!
empty
(
$this
->
globals
))
{
if
(
!
empty
(
$this
->
globals
))
{
$this
->
addGlobals
(
$this
->
globals
);
$this
->
addGlobals
(
$this
->
globals
);
}
}
// Adding custom functions
// Adding custom functions
if
(
!
empty
(
$this
->
functions
))
{
if
(
!
empty
(
$this
->
functions
))
{
$this
->
addFunctions
(
$this
->
functions
);
$this
->
addFunctions
(
$this
->
functions
);
}
}
// Adding custom filters
// Adding custom filters
if
(
!
empty
(
$this
->
filters
))
{
if
(
!
empty
(
$this
->
filters
))
{
$this
->
addFilters
(
$this
->
filters
);
$this
->
addFilters
(
$this
->
filters
);
}
}
// Adding custom extensions
// Adding custom extensions
if
(
!
empty
(
$this
->
extensions
))
{
if
(
!
empty
(
$this
->
extensions
))
{
$this
->
addExtensions
(
$this
->
extensions
);
$this
->
addExtensions
(
$this
->
extensions
);
}
}
// Change lexer syntax
// Change lexer syntax
if
(
!
empty
(
$this
->
lexerOptions
))
{
if
(
!
empty
(
$this
->
lexerOptions
))
{
$this
->
setLexerOptions
(
$this
->
lexerOptions
);
$this
->
setLexerOptions
(
$this
->
lexerOptions
);
}
}
// Adding global 'void' function (usage: {{void(App.clientScript.registerScriptFile(...))}})
// Adding global 'void' function (usage: {{void(App.clientScript.registerScriptFile(...))}})
$this
->
twig
->
addFunction
(
'void'
,
new
\Twig_Function_Function
(
function
(
$argument
){
$this
->
twig
->
addFunction
(
'void'
,
new
\Twig_Function_Function
(
function
(
$argument
){
}));
}));
$this
->
twig
->
addFunction
(
'path'
,
new
\Twig_Function_Function
(
function
(
$path
,
$args
=
[])
{
$this
->
twig
->
addFunction
(
'path'
,
new
\Twig_Function_Function
(
function
(
$path
,
$args
=
[])
{
...
@@ -130,7 +131,6 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -130,7 +131,6 @@ class ViewRenderer extends BaseViewRenderer
$this
->
twig
->
addGlobal
(
'app'
,
\Yii
::
$app
);
$this
->
twig
->
addGlobal
(
'app'
,
\Yii
::
$app
);
}
}
/**
/**
* Renders a view file.
* Renders a view file.
*
*
...
@@ -147,7 +147,7 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -147,7 +147,7 @@ class ViewRenderer extends BaseViewRenderer
{
{
$this
->
twig
->
addGlobal
(
'this'
,
$view
);
$this
->
twig
->
addGlobal
(
'this'
,
$view
);
$this
->
twig
->
setLoader
(
new
TwigSimpleFileLoader
(
dirname
(
$file
)));
$this
->
twig
->
setLoader
(
new
TwigSimpleFileLoader
(
dirname
(
$file
)));
return
$this
->
twig
->
render
(
pathinfo
(
$file
,
PATHINFO_BASENAME
),
$params
);
return
$this
->
twig
->
render
(
pathinfo
(
$file
,
PATHINFO_BASENAME
),
$params
);
}
}
/**
/**
...
@@ -211,7 +211,7 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -211,7 +211,7 @@ class ViewRenderer extends BaseViewRenderer
*/
*/
private
function
_addCustom
(
$classType
,
$elements
)
private
function
_addCustom
(
$classType
,
$elements
)
{
{
$classFunction
=
'Twig_'
.
$classType
.
'_Function'
;
$classFunction
=
'Twig_'
.
$classType
.
'_Function'
;
foreach
(
$elements
as
$name
=>
$func
)
{
foreach
(
$elements
as
$name
=>
$func
)
{
$twigElement
=
null
;
$twigElement
=
null
;
...
@@ -230,11 +230,8 @@ class ViewRenderer extends BaseViewRenderer
...
@@ -230,11 +230,8 @@ class ViewRenderer extends BaseViewRenderer
if
(
$twigElement
!==
null
)
{
if
(
$twigElement
!==
null
)
{
$this
->
twig
->
{
'add'
.
$classType
}(
$name
,
$twigElement
);
$this
->
twig
->
{
'add'
.
$classType
}(
$name
,
$twigElement
);
}
else
{
}
else
{
throw
new
\Exception
(
Yii
::
t
(
'yiiext'
,
throw
new
\Exception
(
"Incorrect options for
\"
$classType
\"
$name
."
);
'Incorrect options for "{classType}" [{name}]'
,
array
(
'{classType}'
=>
$classType
,
'{name}'
=>
$name
)));
}
}
}
}
}
}
}
}
extensions/yii/twig/ViewRendererStaticClassProxy.php
View file @
1028899f
<?php
<?php
/**
/**
* Twig
view renderer
class file.
* Twig
ViewRendererStaticClassProxy
class file.
*
*
* @link http://www.yiiframework.com/
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008 Yii Software LLC
* @copyright Copyright © 2008 Yii Software LLC
...
@@ -14,7 +14,6 @@ namespace yii\twig;
...
@@ -14,7 +14,6 @@ namespace yii\twig;
* Needed because you can't pass static class to Twig other way
* Needed because you can't pass static class to Twig other way
*
*
* @author Leonid Svyatov <leonid@svyatov.ru>
* @author Leonid Svyatov <leonid@svyatov.ru>
* @version 1.0.0
*/
*/
class
ViewRendererStaticClassProxy
class
ViewRendererStaticClassProxy
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment