diff options
Diffstat (limited to 'lib/phptal/PHPTAL/Php/Attribute/METAL/DefineSlot.php')
-rw-r--r-- | lib/phptal/PHPTAL/Php/Attribute/METAL/DefineSlot.php | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/lib/phptal/PHPTAL/Php/Attribute/METAL/DefineSlot.php b/lib/phptal/PHPTAL/Php/Attribute/METAL/DefineSlot.php new file mode 100644 index 0000000..010849a --- /dev/null +++ b/lib/phptal/PHPTAL/Php/Attribute/METAL/DefineSlot.php @@ -0,0 +1,70 @@ +<?php +/** + * PHPTAL templating engine + * + * PHP Version 5 + * + * @category HTML + * @package PHPTAL + * @author Laurent Bedubourg <lbedubourg@motion-twin.com> + * @author Kornel LesiĆski <kornel@aardvarkmedia.co.uk> + * @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License + * @version SVN: $Id$ + * @link http://phptal.org/ + */ + +/** + * METAL Specification 1.0 + * + * argument ::= Name + * + * Example: + * + * <table metal:define-macro="sidebar"> + * <tr><th>Links</th></tr> + * <tr><td metal:define-slot="links"> + * <a href="/">A Link</a> + * </td></tr> + * </table> + * + * PHPTAL: (access to slots may be renamed) + * + * <?php function XXXX_macro_sidebar($tpl) { ? > + * <table> + * <tr><th>Links</th></tr> + * <tr> + * <?php if (isset($tpl->slots->links)): ? > + * <?php echo $tpl->slots->links ? > + * <?php else: ? > + * <td> + * <a href="/">A Link</a> + * </td></tr> + * </table> + * <?php } ? > + * + * @package PHPTAL + * @subpackage Php.attribute.metal + * @author Laurent Bedubourg <lbedubourg@motion-twin.com> + */ +class PHPTAL_Php_Attribute_METAL_DefineSlot extends PHPTAL_Php_Attribute +{ + private $tmp_var; + + public function before(PHPTAL_Php_CodeWriter $codewriter) + { + $this->tmp_var = $codewriter->createTempVariable(); + + $codewriter->doSetVar($this->tmp_var, $codewriter->interpolateTalesVarsInString($this->expression)); + $codewriter->doIf('$ctx->hasSlot('.$this->tmp_var.')'); + $codewriter->pushCode('$ctx->echoSlot('.$this->tmp_var.')'); + $codewriter->doElse(); + } + + public function after(PHPTAL_Php_CodeWriter $codewriter) + { + $codewriter->doEnd('if'); + + $codewriter->recycleTempVariable($this->tmp_var); + } +} + |