Add pushOnce and prependOnce helper directives

This commit is contained in:
Kijin Sung 2023-10-18 21:16:39 +09:00
parent 6b2b3f0dc2
commit 3c401bbc20
2 changed files with 22 additions and 5 deletions

View file

@ -75,6 +75,10 @@ class TemplateParser_v2
'list($__stack_cond, $__stack_name) = [%s]; if ($__stack_cond): ob_start(); if (!isset(self::$_stacks[$__stack_name])): self::$_stacks[$__stack_name] = []; endif;',
'array_push(self::$_stacks[$__stack_name], trim(ob_get_clean())); endif;',
],
'pushonce' => [
'ob_start(); if (!isset(self::$_stacks[%s])): self::$_stacks[%s] = []; endif;',
'$__tmp_%uniq = trim(ob_get_clean()); if (!in_array($__tmp_%uniq, self::$_stacks[%s])): array_push(self::$_stacks[%s], $__tmp_%uniq); endif;',
],
'prepend' => [
'ob_start(); if (!isset(self::$_stacks[%s])): self::$_stacks[%s] = []; endif;',
'array_unshift(self::$_stacks[%s], trim(ob_get_clean()));',
@ -83,6 +87,10 @@ class TemplateParser_v2
'list($__stack_cond, $__stack_name) = [%s]; if ($__stack_cond): ob_start(); if (!isset(self::$_stacks[$__stack_name])): self::$_stacks[$__stack_name] = []; endif;',
'array_unshift(self::$_stacks[$__stack_name], trim(ob_get_clean())); endif;',
],
'prependonce' => [
'ob_start(); if (!isset(self::$_stacks[%s])): self::$_stacks[%s] = []; endif;',
'$__tmp_%uniq = trim(ob_get_clean()); if (!in_array($__tmp_%uniq, self::$_stacks[%s])): array_unshift(self::$_stacks[%s], $__tmp_%uniq); endif;',
],
'isset' => ['if (isset(%s)):', 'endif;'],
'unset' => ['if (!isset(%s)):', 'endif;'],
'empty' => ['if (empty(%s)):', 'endif;'],
@ -502,8 +510,9 @@ class TemplateParser_v2
{
foreach (self::$_loopdef as $directive => $def)
{
$directive = preg_replace('#(.+)if$#', '$1[iI]f', $directive);
$directive = preg_replace(['#(?<=\w)once$#', '#(?<=\w)if$#'], ['[Oo]nce', '[Ii]f'], $directive);
$directives[] = $directive;
if (count($def) > 1)
{
$directives[] = 'end[' . substr($directive, 0, 1) . strtoupper(substr($directive, 0, 1)) . ']' . substr($directive, 1);

View file

@ -2,9 +2,13 @@
<?php $foo = 42; ?>
@push('cms')
@pushOnce('cms')
<li>XE</li>
@endpush
@endpushOnce
@pushonce('cms')
<li>XE</li>
@endPushOnce
@push('cms')
<li>WordPress</li>
@ -14,9 +18,13 @@
<li>Drupal</li>
@endPushIf
@prepend('cms')
@prependOnce('cms')
<li>Rhymix</li>
@endprepend
@endPrependOnce
@prependonce('cms')
<li>Rhymix</li>
@endprependonce
@prependIf(!$foo, 'cms')
<li>Joomla</li>