Sdopx快速上手

1. 在php-fpm模式下使用。

//test.php

define('ROOT_DIR', __DIR__);
date_default_timezone_set('PRC');
require(ROOT_DIR . '/vendor/autoload.php');

use sdopx\Sdopx;

$sdopx = new Sdopx();
$sdopx->setTemplateDir('./view');
$sdopx->setCompileDir('./runtime');
//文本
$sdopx->assign('title', 'hello sdopx');
//数组
$sdopx->assign('list', [
    ['id' => 1, 'name' => 'wj006'],
    ['id' => 2, 'name' => 'wj007'],
    ['id' => 3, 'name' => 'wj008'],
    ['id' => 4, 'name' => 'wj009']
]);
$std = new stdClass();
$std->name = 'wj010';
$std->sex = '男';
$std->glass = '202';
//对象
$sdopx->assign('user', $std);
//html代码
$sdopx->assign('html', '<b>这是一段<span style="color: darkgreen">HTML</span>文本</b>');
//时间
$sdopx->assign('now', time());

$sdopx->display('test.tpl');

模板文件

<html>
<head>
    <title>{$title}</title>
    <meta charset="utf-8"/>
</head>
<body>
<h3>{$title}</h3>
<ul>
    {foreach from=$list item='rs' attr='attr'}
        <li>
            <div>属性:总共:{$attr.total}行,索引:{$attr.index},第{$attr.iteration}
                行,{if $attr.first}是首行{/if}{if $attr.last}是尾行{/if}</div>
            <div> {$rs.id}-{$rs.name}</div>
        </li>
    {/foreach}
</ul>
{if $user!=null}
    <ul>
        {foreach from=$user key=k item=v attr=attr}
            <li>
                <div>属性:总共:{$attr.total}个属性,索引:{$attr.index},第{$attr.iteration}
                    行,{if $attr.first}是首行{/if}{if $attr.last}是尾行{/if}</div>
                <div>--{$k}:{$v}</div>
            </li>
        {/foreach}
    </ul>
{/if}
<div>默认输入(转码):{$html}</div>
<div>原样输入:{$html|raw}</div>
<div>字符串模板:{`这是一个拼接字符串{$title}`}</div>
<div>当前时间:{$now|date_format:'%Y-%m-%d %H:%M:%S'}</div>
</body>
</html>

运行结果:

<html>
<head>
    <title>hello sdopx</title>
    <meta charset="utf-8"/>
</head>
<body>
<h3>hello sdopx</h3>
<ul>
        <li>
            <div>属性:总共:4行,索引:0,第1
                行,是首行</div>
            <div> 1-wj006</div>
        </li>
        <li>
            <div>属性:总共:4行,索引:1,第2
                行,</div>
            <div> 2-wj007</div>
        </li>
        <li>
            <div>属性:总共:4行,索引:2,第3
                行,</div>
            <div> 3-wj008</div>
        </li>
        <li>
            <div>属性:总共:4行,索引:3,第4
                行,是尾行</div>
            <div> 4-wj009</div>
        </li>
</ul>
    <ul>
            <li>
                <div>属性:总共:3个属性,索引:0,第1
                    行,是首行</div>
                <div>--name:wj010</div>
            </li>
            <li>
                <div>属性:总共:3个属性,索引:1,第2
                    行,</div>
                <div>--sex:男</div>
            </li>
            <li>
                <div>属性:总共:3个属性,索引:2,第3
                    行,是尾行</div>
                <div>--glass:202</div>
            </li>
    </ul>
<div>默认输入(转码):&lt;b&gt;这是一段&lt;span style=&quot;color: darkgreen&quot;&gt;HTML&lt;/span&gt;文本&lt;/b&gt;</div>
<div>原样输入:<b>这是一段<span style="color: darkgreen">HTML</span>文本</b></div>
<div>字符串模板:这是一个拼接字符串hello sdopx</div>
<div>当前时间:2018-07-25 06:38:32</div>
</body>
</html>

语法示例:

输出:

--字符串-----------------
{'zzz'}                      -- 字符串输出
{"xxx"}                      -- 字符串输出
{'aa
sss'}                        -- 换行输出
--变量-----------------
{$name}                      -- 变量输出
{date('Y-m-d')}                 -- 内置函数,或变量输出
---运算----------------
{`test{$str}xx`}         -- 字符串拼接
{(2*50)}-- 数学运算表达式输出
{$obj->name}         -- 属性输出
{$obj->get(2,3)}         -- 方法调用 输出
{$arr['obj']->substr(2,3)}

--修饰符-------------------
{$code|raw}                -- raw 只能是最后一个修饰器 保存原样输出,如未使用 raw 修饰器则自动转成HTML实体输出
{$code|upper|raw}         --转大写且 原样输出
{$code|lower}
{$code|strip_tags}            --移除html标签
{$code|default:'空'}            --设置默认值
{$time|date_format:'%Y-%m-%d %H:%M:%S'} --日期格式化
{$str|truncate:40:'...'}     --按字符位宽数量截取字符串  中文=2个字符位宽

判断:

{if $rs.name == 'wj008'}
    <span>{$rs.name}</span>
{elseif $rs.info==`test{$data.name}test` }
    <span>{$rs.info}</span>
{else}
    <span>cccc</span>
{/if}

循环:

<ul>
    {foreach from=$list item=rs}
        <li>id:{$rs.id},name:{$rs.name}</li>
        {foreachelse}
        <li>没有任何数据</li>
    {/foreach}
</ul>

<ul>
    {for $i=0; $i<count($list);$i++}
        <li>{$list[$i].id}-{$list[$i].name}</li>
    {/for}
</ul>

<ul>
    {assign $idx=0}
    {while $idx < count($list) }
        <li>{$list[$idx].id}-{$list[$idx].name}</li>
        {assign var=idx value=$idx+1}
    {/while}
</ul>

模板内注册变量:

{assign $name='wj008'}
{assign $temp=`aaaa{$name}`}    --注册到局部
{global $str=`global value.`}    --注册到全局

{assign var=a value=0}            --局部赋值
{assign $a++}                     --局部赋值

{global var=b value=0}             -全局赋值
{global $b--}                     --全局赋值

输出:{$temp}
输出:{$str}
输出:{$a}
输出:{$b}

包含文件:

{include file="head.tpl"} --包含
{include file="string:kxxxcsdsd"} --包含字符串源的模板
{include file="dbsource:select * from table where id=1"} //系统没有实现类似资源 自己可以通过扩展注册资源 这里只是演示支持不同的资源类型加载
{include file="head.tpl" output=false} 包含但是不输出任何内容 比如包含一些带有函数的控件模板

模板继承
layout.tpl

<html>
<title>{block name=title}{/block}</title>
<body>
{block name=testbody}{/block}
</body>
</html>

child.tpl

{extends file='layout.tpl'}
{block name='title'}hello{/block}
{block name=testbody}这是一个继承模板测试{/block}

避免被解析

{literal}
<script>
     function myBar {alert('wj008');}
</script>
{/literal}


或者:

{assign $name='wj008'}
{literal left='<@' right='@>'}
<script>
     function myBar {alert('<@$name@>');}
</script>
{/literal}
上一篇:Sdopx介绍
下一篇:模板设计-变量
Copyright © 2021 海南的叶子 All Rights Reserved 琼ICP备2021000725号

琼公网安备 46900702000037号