# sdopx **Repository Path**: wj008/sdopx ## Basic Information - **Project Name**: sdopx - **Description**: No description available - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-19 - **Last Updated**: 2026-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sdopx 模板引擎 Sdopx 是一个基于 PHP 的高性能模板引擎,提供灵活的模板编译和渲染功能,适用于 Web 开发中的视图层处理。 ## 特性 - **模板继承**:支持模板继承机制,便于构建可复用的页面结构。 - **编译优化**:将模板编译为原生 PHP 代码,提升执行效率。 - **插件系统**:提供丰富的插件支持,如变量修饰符、自定义标签等。 - **多条件判断**:支持多种条件判断标签,简化模板逻辑。 - **多资源支持**:支持从文件、字符串、Base64 等多种资源加载模板。 - **调试功能**:内置调试支持,便于开发过程中排查问题。 ## 安装 使用 Composer 安装 Sdopx: ```bash composer require wj008/sdopx ``` ## 使用示例 ### 基本用法 ```php use sdopx\Sdopx; // 初始化模板引擎 $sdopx = new Sdopx(); // 设置模板目录 $sdopx->setTemplateDir(__DIR__ . '/templates'); // 分配变量 $sdopx->assign('name', 'Sdopx'); $sdopx->assign('user', ['level' => 2, 'role' => 'editor']); // 渲染模板 $sdopx->display('index.tpl'); ``` ### 模板语法示例 ```smarty {* index.tpl *} Hello, {$name}! ``` 其他语法请查阅 http://sdopx.wj008.net ## Sdopx 4.0.4 以上新语法特点 4.0.4 版本优化了代码结构,修正错误输出的提示内容,以及定位错误代码位置。 - **左分界符号右侧如有空格及换行将被视为 HTML 代码不被解析为模板** ```smarty ``` 以上代码将会原样输出。 - **新增模板内直接变量赋值及添加变量链接修饰器 |cat** ```smarty {$name = 'sdopx'} {$temp = $name|cat:' ok?'} ``` - **支持 PHP 内置的字符串处理函数以修饰器的形式调用**,如: ```smarty {$temp|strlen} {$temp|trim} {$temp|ucfirst} {$temp|substr:1:3} {$temp|base64_encode} {'world'|str_replace:'sdopx':$temp} ... ``` ## Sdopx 4.1.0 新增条件判断标签 ### 1. 基本条件判断 **eq / neq** - 等于/不等于判断 ```smarty {eq var=$user.level value=2} 您是编辑 {/eq} {neq var=$user.id value=0} 用户ID不为0 {/neq} ``` **empty / notempty** - 空值/非空判断 ```smarty {empty var=$user.email} 邮箱未设置 {/empty} {notempty var=$products} {/notempty} ``` ### 2. 范围判断 **between / notbetween** - 在/不在范围内判断 ```smarty {between var=$user.age start=18 end=60} 成年人 {/between} {notbetween var=$score min=0 max=59} 及格以上 {/notbetween} {between var=$price min=100 max=500} 价格在合理范围 {/between} ``` ### 3. 包含判断 **in / notin** - 包含/不包含判断 ```smarty {in var=$user.role value='admin,editor,author'} 有权限的用户 {/in} {notin var=$permission value='delete,modify_system'} 安全权限 {/notin} {in var='admin' value=['admin','editor','author']} 管理员角色 {/in} {in var=$user.role value=$allowed_roles} 角色合法 {/in} ``` ### 4. 多分支条件判断 **switch / case / default** - 多分支条件判断 ```smarty {switch var=$user.level} {case value=1} 管理员 {/case} {case value=2} 编辑 {/case} {case value=3} 作者 {/case} {default} 游客 {/default} {/switch} {switch var=$user.role} {case value='admin'} 管理员 {/case} {case value='editor'} 编辑 {/case} {default} 访客 {/default} {/switch} {switch var=intval($score/10)} {case value=10} 优秀 {/case} {case value=9} 良好 {/case} {case value=8} 中等 {/case} {case value=7} 及格 {/case} {default} 不及格 {/default} {/switch} ``` ### 5. 条件嵌套使用 ```smarty {foreach from=$orders item=order attr='attr'} {$order.order_no} {switch var=$order.status} {case value=0} 待支付 {/case} {case value=1} 已支付 {/case} {case value=2} 已发货 {/case} {case value=3} 已完成 {/case} {/switch} {if $order.status == 0} {elseif $order.status == 1} {/if} {/foreach} ``` ### 6. 复合条件判断 ```smarty {eq var=$user.status value=1} {in var=$user.role value='admin,editor'} {between var=$user.age start=20 end=50}
合格用户
{/between} {/in} {/eq} ``` ## 特性说明 - **字面量优化**:自动识别数字、字符串等字面量,生成更优化的 PHP 代码。 - **表达式支持**:所有参数都支持 PHP 表达式。 - **严格的错误检查**: - 确保必需参数存在。 - 确保标签正确嵌套。 - 确保 between/notbetween 参数配对使用。 - 确保 switch 至少有一个 case。 - 确保 default 标签唯一。 - **临时变量管理**:自动创建和清理临时变量,避免命名冲突。 - **灵活的参数格式**: - between/notbetween 支持 start/end 或 min/max 两种格式。 - in/notin 支持逗号分隔字符串或 PHP 数组字面量。 ## 插件扩展 Sdopx 提供多种内置插件,同时也支持自定义插件扩展。 ### 条件判断插件(4.1.0新增) - **eq / neq**:等于/不等于判断。 - **empty / notempty**:空值/非空判断。 - **in / notin**:包含/不包含判断。 - **between / notbetween**:范围判断。 - **switch / case / default**:多分支条件判断。 ### 修饰符插件 - **cat**:拼接字符串。 - **default**:设置默认值。 - **lower**:转换为小写。 - **upper**:转换为大写。 - **truncate**:截断字符串。 - **nl2br**:将换行符转换为
标签。 ### 自定义标签插件 - **volist**:遍历数组输出。 - **cycle**:循环输出不同值。 - **extends**:模板继承。 - **block**:定义可重写区块。 ## 资源类型 Sdopx 支持多种资源类型加载模板: - **FileResource**:从文件系统加载模板。 - **StringResource**:从字符串加载模板。 - **Base64Resource**:从 Base64 编码字符串加载模板。 - **ExtendsResource**:支持模板继承的资源类型。 ## 调试支持 启用调试模式后,Sdopx 会在模板渲染出错时提供详细的错误上下文信息,帮助开发者快速定位问题。 ```php Sdopx::$debug = true; ``` ## 贡献指南 欢迎贡献代码和改进文档。请遵循以下步骤: 1. Fork 项目。 2. 创建新分支 (git checkout -b feature/new-feature)。 3. 提交更改 (git commit -am 'Add new feature')。 4. 推送分支 (git push origin feature/new-feature)。 5. 创建 Pull Request。 ## 许可证 本项目采用 MIT 许可证。详见 LICENSE 文件。