最简洁的PHP模板引擎

分类:PHP |

最简洁的PHP模板引擎:

<?php
// 转换

$data = [
    [
        'name' => '第一行',
        'type' => 'typec',
        'items' => [
            ['name' => '名称a',],
            ['name' => '名称b']
        ]
    ],
    [
        'name' => '第二行',
        'type' => 'typec2',
        'items' => [
            ['name' => '名称c',],
            ['name' => '名称d']
        ]
    ]
];

$content = '
{foreach $data as $v}
{$v[\'name\']} -- {$v[\'type\']}{n}
{foreach $v[\'items\'] as $item}
{$item[\'name\']}{n}
{/foreach}

{/foreach}
';
function compile($tpl, $data) {
    $filestr = '';
    $keys = array(
            '{if %%}' => '<?php if (\1): ?>',
            '{elseif %%}' => '<?php ; elseif (\1): ?>',
            '{for %%}' => '<?php for (\1): ?>',
            '{foreach %%}' => '<?php foreach (\1): ?>',
            '{while %%}' => '<?php while (\1): ?>',
            '{/if}' => '<?php endif; ?>',
            '{/for}' => '<?php endfor; ?>',
            '{/foreach}' => '<?php endforeach; ?>',
            '{/while}' => '<?php endwhile; ?>',
            '{else}' => '<?php ; else: ?>',
            '{continue}' => '<?php continue; ?>',
            '{break}' => '<?php break; ?>',
            '{$%% = %%}' => '<?php $\1 = \2; ?>',
            '{$%%++}' => '<?php $\1++; ?>',
            '{$%%--}' => '<?php $\1--; ?>',
            '{$%%}' => '<?php echo $\1; ?>',
            '{n}' => '<?php echo "\n"; ?>',
            '{comment}' => '<?php /*',
                                    '{/comment}' => '*/ ?>',
            '{/*}' => '<?php /*',
                '{*/}' => '*/ ?>',
            );

    foreach ($keys as $key => $val) {
        $patterns[] = '#' . str_replace('%%', '(.+)', preg_quote($key, '#')) . '#U';
        $replace[] = $val;
    }
    $filestr = preg_replace($patterns, $replace, $tpl);
    eval('?>'.$filestr);
}

compile($content,$data);



执行结果 :

blob.png



PHP
阅读( 3376 ) |