PATCH: Several enhancements
| From: | Andr� Rabold | Date: | Tue, 17 Dec 2002 12:21:42 +0000 |
| Subject: | PATCH: Several enhancements | ||
| References: | 1 | Groups: | php.smarty.dev |
| Request: | Send a blank email to php-smarty-dev+get-426@lists.php.net to get a copy of this message | ||
Hi everybody...
Object handling works great now in Smarty thanks to the CVS update
yesterday. A few thing didn't work until
now so I wrote a patch with offers several enhancements.
This is what Smarty can do now:
{$foo->bar()}
{$foo->bar("blah")}
{$foo->bar("blah $my var")}
{$foo->bar("blah $my var","blub")}
Something more complex:
{$foo->foo_it($bar->bar_it("blah"))}
{$foo->bar("var1", _MY_CONSTANT, $blah, null, true)}
Using modifiers work too:
{$foo->foo_it($bar->bar_it("blah"))|@strtoupper}
And this is also possible for attributes
{fooFunction foo=$foo->bar("var1", _MY_CONSTANT, $blah, null, true)}
Hope I've got nothing broke but my own application still works great and
because of the latest
CVS is even faster than before. Attached you find the changes I made to
Smarty_Compiler
to get this working. Would be great if these could make it into the official
Smarty Compiler ;-)
Thoughts?
André
Index: Smarty_Compiler.class.php
===================================================================
RCS file: /repository/smarty/Smarty_Compiler.class.php,v
retrieving revision 1.135
diff -r1.135 Smarty_Compiler.class.php
53a54
> var $_var_regexp =
'"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|\w+|\$\w+
(?:(?:\[(?:\$\w+|\w+(?:\.\w+)?)\]|(?:->|\.)\$?\w+(?:\(.*?\))?|^\w+))*';
228c229
< (?: ' . $this->_qstr_regexp . ' | (?>[^"\'\s]+))+
---
> (?: ' . $this->_var_regexp . ' | (?>[^"\'\s]+))+
236,240c237,242
< we simply process it. */
<
< if
(preg_match('!^\$\w+(?>(\[(\d+|\$\w+|\w+(\.\w+)?)\])|((\.|->)\$?\w+(?:\((?:'
. $this->_qstr_regexp . ')*\))*))*(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $tag_command) || // if a variable
< preg_match('!^#(\w+)#(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $tag_command) || // or a configuration variable
< preg_match('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $tag_command)) { // or a section property
---
> we simply process it. */
>
> if
(preg_match('!^\$\w+(?>(\[(\d+|\$\w+|\w+(\.\w+)?)\])|((\.|->)\$?\w+(?:\(\s*(
?:' . $this->_var_regexp .
')*(?:\s*,\s*(?:'.$this->_var_regexp.')*)*\s*\))*))*(?>\|@?\w+(:(?>' .
$this->_qstr_regexp . '|[^|]+))*)*$!', $template_tag) || // if a variable
> preg_match('!^#(\w+)#(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $template_tag) || // or a configuration variable
> preg_match('!^%\w+\.\w+%(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $template_tag)) { // or a section property
> $tag_command = $template_tag;
1076,1077c1078
<
< $var_exprs =
preg_grep('!^\$\w+(?>(\[(\d+|\$\w+|\w+(\.\w+)?)\])|((\.|->)\$?\w+(?:\((?:' .
$this->_qstr_regexp . ')*\))?))*(?>\|@?\w+(:(?>' . $this->_qstr_regexp .
'|[^|]+))*)*$!', $tokens);
---
> $var_exprs =
preg_grep('!^\$\w+(?>(\[(\d+|\$\w+|\w+(\.\w+)?)\])|((\.|->)\$?\w+(?:\(\s*(?:
' . $this->_var_regexp .
')*(?:\s*,\s*(?:'.$this->_var_regexp.')*)*\s*\))?))*(?>\|@?\w+(:(?>' .
$this->_qstr_regexp . '|[^|]+))*)*$!', $tokens);
1081c1082
<
---
>
1131,1133c1132,1134
<
< preg_match_all('!\[(?:\$\w+|\w+(\.\w+)?)\]|(->|\.)\$?\w+(?:\((?:' .
$this->_qstr_regexp . ')*\))?|^\w+!', $var_ref, $match);
<
---
>
> preg_match_all('!\[(?:\$\w+|\w+(\.\w+)?)\]|(->|\.)\$?\w+|\(\s*(?:' .
$this->_var_regexp .
')*(?:\s*,\s*(?:'.$this->_var_regexp.')*)*\s*\)|^\w+!',
$var_ref, $match);
>
1177a1179,1183
> } else if ($index{0} == '(') {
> $index = trim(substr($index,1,-1));
> $index = preg_split('!\s*,\s*!',$index); // split into arguments
> $this->_parse_vars_props($index);
> $output .= "(".implode(", ",$index).")";
"Monte Ohrt" <monte@ispi.net> schrieb im Newsbeitrag
news:1040068296.11922.76.camel@lena.ispi.prv...
> I committed to CVS, this syntax is now allowed:
>
> {$foo->bar('blah')}
> {include file=$foo->bar('blah')}
> {include file=$foo->bar->bar2->bar3->bar4('blah')}
>
> You can also embed template vars:
>
> {$foo->bar("you $foo")}
> {include file=$foo->bar("this is $my var")}
>
> Please help test this, it affects many core components.
>
> Monte
>
>
begin 666 Smarty.diff
M26YD97@Z(%-M87)T>5]#;VUP:6QE<BYC;&%S<RYP:' -"CT]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
M/3T]/3T]/3T]/3T-"E)#4R!F:6QE.B O<F5P;W-I=&]R>2]S;6%R='DO4VUA
M<G1Y7T-O;7!I;&5R+F-L87-S+G!H<"QV#0IR971R:65V:6YG(')E=FES:6]N
M(#$N,3,U#0ID:69F("UR,2XQ,S4@4VUA<G1Y7T-O;7!I;&5R+F-L87-S+G!H
M< T*-3-A-30-"CX@(" @('9A<B D7W9A<E]R96=E>' @(#T@)R);7B)<7%Q<
M72HH/SI<7%Q<+EM>(EQ<7%Q=*BDJ(GQ<)UM>7"=<7%Q<72HH/SI<7%Q<+EM>
M7"=<7%Q<72HI*EPG?%QW*WQ<)%QW*R@_.B@_.EQ;*#\Z7"1<=RM\7'<K*#\Z
M7"Y<=RLI/RE<77PH/SHM/GQ<+BE<)#]<=RLH/SI<*"XJ/UPI*3]\7EQW*RDI
M*B<[#0HR,CAC,C(Y#0H\(" @(" @(" @(" @(" @(" @(" @("
@*#\Z("<@
M+B D=&AI<RT^7W%S=')?<F5G97AP("X@)R!\("@_/EM>(EPG7'-=*RDI*PT*
M+2TM#0H^(" @(" @(" @(" @(" @(" @(" @(" @*#\Z("<@+B
D=&AI<RT^
M7W9A<E]R96=E>' @+B G('P@*#\^6UXB7"=<<UTK*2DK#0HR,S8L,C0P8S(S
M-RPR-#(-"CP@(" @(" @("
@("!W92!S:6UP;'D@<')O8V5S<R!I="X@*B\)
M"0T*/" )"0T*/" @(" @("
@(&EF("AP<F5G7VUA=&-H*"<A7EPD7'<K*#\^
M*%Q;*%QD*WQ<)%QW*WQ<=RLH7"Y<=RLI/RE<72E\*"A<+GPM/BE<)#]<=RLH
M/SI<*"@_.B<@+B D=&AI<RT^7W%S=')?<F5G97AP("X@("<I*EPI*2HI*2HH
M/SY<?$ _7'<K*#HH/SXG("X@)'1H:7,M/E]Q<W1R7W)E9V5X<" N("=\6UY\
M72LI*2HI*B0A)RP@)'1A9U]C;VUM86YD*2!\?" @("\O(&EF(&$@=F%R:6%B
M;&4-"CP@(" @(" @(" @("
@<')E9U]M871C:"@G(5XC*%QW*RDC*#\^7'Q
M/UQW*R@Z*#\^)R N("1T:&ES+3Y?<7-T<E]R96=E>' @+B G?%M>?%TK*2DJ
M*2HD(2<L("1T86=?8V]M;6%N9"D@(" @('Q\(" O+R!O<B!A(&-O;F9I9W5R
M871I;VX@=F%R:6%B;&4-"CP@(" @(" @(" @("
@<')E9U]M871C:"@G(5XE
M7'<K7"Y<=RLE*#\^7'Q /UQW*R@Z*#\^)R N("1T:&ES+3Y?<7-T<E]R96=E
M>' @+B G?%M>?%TK*2DJ*2HD(2<L("1T86=?8V]M;6%N9"DI('L@(" O+R!O
M<B!A('-E8W1I;VX@<')O<&5R='D-"BTM+0T*/B @(" @(" @("
@('=E('-I
M;7!L>2!P<F]C97-S(&ET+B J+PT*/B -"CX@(" @(" @("!I9B H<')E9U]M
M871C:"@G(5Y<)%QW*R@_/BA<6RA<9"M\7"1<=RM\7'<K*%PN7'<K*3\I7%TI
M?"@H7"Y\+3XI7"0_7'<K*#\Z7"A<<RHH/SHG("X@)'1H:7,M/E]V87)?<F5G
M97AP("X@("<I*B@_.EQS*BQ<<RHH/SHG+B1T:&ES+3Y?=F%R7W)E9V5X<"XG
M*2HI*EQS*EPI*2HI*2HH/SY<?$ _7'<K*#HH/SXG("X@)'1H:7,M/E]Q<W1R
M7W)E9V5X<" N("=\6UY\72LI*2HI*B0A)RP@)'1E;7!L871E7W1A9RD@?'P@
M(" O+R!I9B!A('9A<FEA8FQE#0H^(" @(" @(" @(" @('!R96=?;6%T8V@H
M)R%>(RA<=RLI(R@_/EQ\0#]<=RLH.B@_/B<@+B D=&AI<RT^7W%S=')?<F5G
M97AP("X@)WQ;7GQ=*RDI*BDJ)"$G+" D=&5M<&QA=&5?=&%G*2 @("
@?'P@
M("\O(&]R(&$@8V]N9FEG=7)A=&EO;B!V87)I86)L90T*/B @(" @(" @(" @
M("!P<F5G7VUA=&-H*"<A7B5<=RM<+EQW*R4H/SY<?$
_7'<K*#HH/SXG("X@
M)'1H:7,M/E]Q<W1R7W)E9V5X<" N("=\6UY\72LI*2HI*B0A)RP@)'1E;7!L
M871E7W1A9RDI('L@("
O+R!O<B!A('-E8W1I;VX@<')O<&5R='D-"CX@(" @
M(" @(" @(" @)'1A9U]C;VUM86YD(#T@)'1E;7!L871E7W1A9SL-"C$P-S8L
M,3 W-V,Q,#<X#0H\( D)#0H\(" @(" @(" @)'9A<E]E>'!R<R
]('!R96=?
M9W)E<"@G(5Y<)%QW*R@_/BA<6RA<9"M\7"1<=RM\7'<K*%PN7'<K*3\I7%TI
M?"@H7"Y\+3XI7"0_7'<K*#\Z7"@H/SHG("X@)'1H:7,M/E]Q<W1R7W)E9V5X
M<" N("<I*EPI*3\I*2HH/SY<?$
_7'<K*#HH/SXG("X@)'1H:7,M/E]Q<W1R
M7W)E9V5X<" N("=\6UY\72LI*2HI*B0A)RP@)'1O:V5N<RD[#0HM+2T-"CX@
M(" @(" @("
D=F%R7V5X<')S(#T@<')E9U]G<F5P*"<A7EPD7'<K*#\^*%Q;
M*%QD*WQ<)%QW*WQ<=RLH7"Y<=RLI/RE<72E\*"A<+GPM/BE<)#]<=RLH/SI<
M*%QS*B@_.B<@+B D=&AI<RT^7W9A<E]R96=E>' @+B G*2HH/SI<<RHL7',J
M*#\Z)RXD=&AI<RT^7W9A<E]R96=E>' N)RDJ*2I<<RI<*2D_*2DJ*#\^7'Q
M/UQW*R@Z*#\^)R N("1T:&ES+3Y?<7-T<E]R96=E>' @+B G?%M>?%TK*2DJ
M*2HD(2<L("1T;VME;G,I.PT*,3 X,6,Q,#@R#0H\( D)#0HM+2T-"CX@#0HQ
M,3,Q+#$Q,S-C,3$S,BPQ,3,T#0H\( D)"0T*/" @(" @(" @('!R96=?;6%T
M8VA?86QL*"<A7%LH/SI<)%QW*WQ<=RLH7"Y<=RLI/RE<77PH+3Y\7"XI7"0_
M7'<K*#\Z7"@H/SHG("X@)'1H:7,M/E]Q<W1R7W)E9V5X<" N("
G*2I<*2D_
M?%Y<=RLA)RP@)'9A<E]R968L("1M871C:"D[#0H\( D)#0HM+2T-"CX@"2 @
M(" -"CX@(" @("
@("!P<F5G7VUA=&-H7V%L;"@G(5Q;*#\Z7"1<=RM\7'<K
M*%PN7'<K*3\I7%U\*"T^?%PN*5PD/UQW*WQ<*%QS*B@_.B<@+B D=&AI<RT^
M7W9A<E]R96=E>' @+B @)RDJ*#\Z7',J+%QS*B@_.B<N)'1H:7,M/E]V87)?
M<F5G97AP+B<I*BDJ7',J7"E\7EQW*R$G+" D=F%R7W)E9BP@)&UA=&-H*3L-
M"CX@(" @(" @(" -"C$Q-S=A,3$W.2PQ,3@S#0H^(" @(" @(" @("
@('T@
M96QS92!I9B H)&EN9&5X>S!](#T]("<H)RD@>PT*/B @(" @(" @("
@(" @
M(" @)&EN9&5X(#T@=')I;2AS=6)S='(H)&EN9&5X+#$L+3$I*3L-"CX@("
@
M(" @(" @(" @(" @("1I;F1E>"
]('!R96=?<W!L:70H)R%<<RHL7',J(2<L
M)&EN9&5X*3L@+R\@<W!L:70@:6YT;R!A<F=U;65N=',-"CX@(" @(" @(" @
M(" @(" @("1T:&ES+3Y?<&%R<V5?=F%R<U]P<F]P<R@D:6YD97@I.PT*/B @
M(" @(" @(" @(" @(" @)&]U='!U=" N/2
B*"(N:6UP;&]D92@B+" B+"1I
,;F1E>"DN(BDB.PT*
`
end