smarty高级教程

在Ubuntu22.04.2远程服务器上搭建OHIF+Orthanc 在Ubuntu远程服务器上不翻墙,但是本地windows需要科学上网开始之前,首先在终端输入export -p查看是否有代理端口如下如果有就关了,输入如下命令。 阅读详情
前言:
很久不用smarty了,因为大多数项目都是比较轻量型的。前段时间笔者接了个还算可以的项目,下面有几个程序员,与一个美工组为项目团队。为了做快速的布署应用,也为了小组成员能形成一个统一的view层的控制,选择了smarty。发现smarty果然还是那么的强大,那么的很黄很暴力。
作者:无喱头

故事背景:
小张是个很漂亮的美工MM,与无喱头搭档已经很多年。请不要误解,无喱头是有老婆女儿的,他们之前没有任何的暧昧关系,仅仅是同事,或者是上下级。
在两人的多年合作过程中,在很多地方,已经形成了一种默契。在很多时候,喱头提供封装好的php函数,然后通过一些技术上的修改,可以直接使用小张在模板里引入php函数,这样可以很方便的把模板切成很多小块,便于维护。并且由于可以自定义一些关键字,小张可能很快的取出想要的一些数据。
比如:
{phpsoho “sort=article&order=ID DESC&limit=10&tplfolder=article&tplname=article.list”},无喱头为小张同学提供了类似于上面的自定义函数,并且明确的给出了使用文档:
Sort: 类别(文章?下载?图片?) article|download|picture
Order:排序方式 id,hot,? DESC|ASC
Limit:取出多少条? Limit number|limit start,end
…….
当然,不仅仅是这些,也不仅仅只有phpsoho这个自定义的函数来定义。小张可能很快的通过这些她能看得懂的文档(打印稿)来很方便的进行界面的操作。
由于种种原因,现在准备使用SMARTY。现在问题来了,怎么让SMARTY也支持用户自定义的函数呢?
解决方案:
SMARTY手册是这样介绍register_function函数的

Use this to dynamically register template function plugins. Pass in the template function name, followed by the PHP function name that implements it. 
The php-function callback impl can be either (a) a string containing the function name or (b) an array of the form array(&$object, $method) with &$object being a reference to an object and $method being a string containing the mehod-name or (c) an array of the form array(&$class, $method) with $class being a classname and $method being a class method of that class. 

其实,那么多英语我也不太看得懂,经过两天的摸索,终于还是有了一些心得的。

基础篇


我们可以直接使用SMARTY::register_function来注册一个程序员自定义的php函数,只要这个函数所在的文件已经被引入,就可以正确使用它。
DEMO 1:

$smarty = set_smarty();
$smarty->register_function('example','format_data');
$smarty->assign('time',time());
$smarty->display('demo.htm');

自定义函数如下:

function format_data( $params )
{
extract($params);
echo date($format,$time);
}

模板文件如下:

{example time="$time" format="Y-m-d"}

不难看出,我们很轻松的就布署使用了我们的自定义函数了。有一点我们需要注意到的是,在format_data函数里,我们是以一个数组对值进行传入的,而在模板文件里,我们可以任意的建一些关键字,只要你能记得住。当然,除了SMARTY的保留字之外。
而后我们通过extract把这个数组里面的值释放放出来,当然这种方案是有多种多样的,你可以使用list,也可以使用explode,总之你能想到的办法就是好办法,只要你用得熟悉。

进阶篇

有一种情况很快发生了,小张总是搞不清楚我到底注册了多少个自定义函数供她使用,她总是忘记一些关键字的定义,比如在一个取出热门的连载小说里,她不知道有没有hot这个关键词。因为这种自定义的函数太多了,她不得不经常的拿着我给她打印出来的技术文档苦着脸查找,我很内疚。于是,另一种解决方案应运而生。
本文开始时,曾经举了了像{phpsoho “sort=article&order=ID DESC&limit=10&tplfolder=article&tplname=article.list”}这样的字符串在模板里的例子。或者你会说,头哥在骗人呀,这根本跟第一个例子是一样的嘛,无非是传来的值不一样而已。那么,咱们接着往下看。。。
DEMO 2:
我们假装smarty已经被实例化,并且资源名为$smarty.
首先我们注册一个自定义函数到smarty中,这个跟上例一样,完全是为了骗几个字。

$smarty->register_function( 'phpsoho','tags_extends' );
//引入文件
include_once __ROOT_PATH__ . '/include/tags.func.php';

这里需要注意的是,我们注册的到phpsoho句柄中的函数为tags_extends,函数名是什么意思不做一一解释,具体可以看PHP函数命名规范这样的文档。
[php]
function tags_extends( $params )
{
$action = $params['action'];
$optional = $params['optional'];

/**
  * 关键词检测
*/
if ( !$action )
{
  Error::putMsg('tags_extends_error','tags_extends action is null.');
}

if( !function_exists($action) )
{
  Error::putMsg( 'function_exists','function null. class file.'.$extend_tags_file . '. classname:'.$action );
}
$action($optional);
}
[/php]
模板文件:
[php]
{phpsoho action="getAffiche"#">posttime&titlelen=17&and[stauts]=1&limit=5&order=id DESC&tpl=afiche.right"}
[/php]
上面的函数执行流程是这样子的:
在模板文件里面,我们使用phpsoho这个资源句柄把请求定位到'tags_extends'函数中,在这个函数中,我们做了几种检查:
Check Action:检查动作是否被设置,这个为必须的关键字.其实我是以这个action来进行下面的函数定位操作的.
Check function_exists:检查相应执行的函数是否存在或者是否已经被加载进入
这里我们不用检查optional,因为我们会在下一步里进行另一步检查.
$action($optional)被执行,也就是说上例中的getAffiche被引入了,并且设置$optional的值为fileds=id,title,posttime&titlelen=17&and[stauts]=1&limit=5&order=id DESC&tpl=afiche.right,里面的一些一一对应的关系,我就不一一过多的讲解。我是有文档给小张的,你们谁想要,可以联系她。她可是美女哟~!
回过头来,我们看$action($optional),为什么我说看$action而不是getAffiche呢?因为谁知道你将来会让他引入什么函数呢?(狂笑,得意的笑)
$action()DEMO:
[php]
function getAffiche($optional)
{
global $db;
parse_str($optional);
$res = $db->getFetchArray('litou_affiche',$fileds,$and,$order,$limit);

/**
  * 声明并发送到模板
*/
$smarty = set_smarty();
$smarty->assign('titlelen',$titlelen);
$smarty->assign('affiche',$res);
$smarty->display( $tpl .$GLOBALS['tplEx']);
}
[/php]
大家看到了吗?原来如此简单。。。
原来我们在函数的内容完成了指定内容的一些操作。当然,我这个完全是为了写这篇文章临时写出来的,但你们可以在这里面加上一些php的高级特性,比如:缓存,在你的字符上加入cache=3600(一般我们使用的是秒,就是一个小时),那你可以通过上面的一些关键词定义引入你的cache,并且可以根据时间来更新后引入,加上过滤或者其它任何你想要的功能。
总之,只要你有想法,一切皆有可能。
知识点:
[php]
parse_str, Parses the string into variables
void parse_str ( string $str [, array &$arr ] )
[/php]
这是个很好用的函数,包括它的家族兄弟们 parse_ini_file及parse_url,具体用法自己去测试。
汗,快下班了,估计今天写不完高级使用了。。。先简单介绍一下,留个悬念,以后再过来编辑一下。

高级篇

小张很开心。这样她仅仅只需要使用这一个函数就行了,并且里面需要的记的也不多,A4纸一张不到。但苦了我呀,小张经常这样说:头哥,我需要取出一些图片资料,并且要求横排四张,竖排八张@$#^%$%*&^*&(*&(),,,,天啊,我做错了吗?我不得不给她写N多的函数,让她使用...
每次看到小张一脸诡笑的样子,我心里在发汗,唉。不行,我要再进行深入的研究…
  1. <?php  
  2. require_once 'E:/smarty3/Smarty.class.php';  
  3. $smarty = new Smarty();  
  4. $smarty->template_dir = "./view/templates";   
  5. $smarty->compile_dir = "./view/templates_c";   
  6. $smarty->cache_dir = "./view/cache";   
  7.   
  8. //引入文件  
  9. require_once './tags/tags.func.php';  
  10.   
  11. $smarty->register_function( 'phpsoho','tags_extends' );  
  12.   
  13.   
  14. //这里需要注意的是,我们注册的到phpsoho句柄中的函数为tags_extends,函数名是什么意思不做一一解释,具体可以看PHP函数命名规范这样的文档。  
  15.   
  16. $smarty->display('demo.html');  


view plain copy to clipboard print ?
  1. //tags/tags.func.php  
  2. <?php  
  3. function tags_extends($params)  
  4. {  
  5.     $action = $params['action'];  
  6.     $optional = $params['optional'];  
  7.     /** 
  8.      * 关键词检测 
  9.      */  
  10.     if (! $action) {  
  11.         echo 'tags_extends_error', 'tags_extends action is null';  
  12.     }  
  13.       
  14.     if (! function_exists($action)) {  
  15.         echo 'function_exists', 'function null. class file.' . $extend_tags_file . '. classname:' . $action;  
  16.     }  
  17.     return $action($optional);  
  18. }  
  19.   
  20. function format_data($optional)  
  21. {  
  22.     return date("Y-m-d H:i:s");  
  23. }  

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案 本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。 阅读详情

相关推荐

CTF——流量分析题型整理总结

我见过的流量分析类型的题目总结: 一,ping 报文信息 (icmp协议) 二,上传/下载文件(蓝牙obex,http,难:文件的分段上传/下载) 三,sql注入攻击 四,访问特定的加密解密网站(md5,base64) 五,后台扫描+弱密码爆破+菜刀 六,usb流量分析 七,WiFi无线密码破解 八,根据一组流量包了解黑客的具体行为 例题: 一,ping 报文信息 (icm...

小锤队长的博客 5万+

smarty详细使用教程(韩顺平smarty模板技术笔记)

MVC是一种开发模式,强调数据的输入、处理、显示是强制分离的 Smarty使用教程1.如何配置我们的smarty解压后把libs文件夹放在网站第一级目录下,然后创建两个文件夹templates 存放模板文件templates_c 存放编译后的文件再创建初始化文件smarty.ini.php 注意事项:1.替换变量的标识分隔符一般使用<{}>改动分隔符的两个方法:1.改源...

weixin_30486037的博客 837

ScottPlot vs LiveCharts:WPF图表库性能对比与MVVM适配方案

本文深度对比了WPF图表库ScottPlot与LiveCharts在性能与MVVM架构适配上的表现。通过十万级数据点的基准测试,ScottPlot在渲染速度与内存占用上优势显著。文章重点探讨了两种库在MVVM模式下的集成方案,为开发者根据项目需求(如实时监控或快速原型)进行技术选型提供了实战指导。

lll78的博客 245

PHP中$GLOBALS与global的区别

PHP中GLOBALS和global都可以实现全局变量的功能,所以很多人都认为global和GLOBALS和global都可以实现全局变量的功能,所以很多人都认为global和GLOBALS[]只是写法上面的差别,其实不然。$GLOBALS 是一个超级全局变量,其实是一个数组,而global 则是一个声明全局变量的关键字!一、超全局变量$GLOBALS PHP超全局变量有很多,如下的都属于超全局变

手瓜 596

Zabbix7.0实践:专线线路监控场景1

本文介绍了专线互联线路远程Ping监控的实现方案。针对运营商中间设备导致端口状态无法真实反映线路通断的问题,提出通过脚本执行端到端Ping检测的方案。具体实现包括:1)使用Expect脚本登录设备执行Ping测试并格式化结果;2)通过Shell脚本处理线路信息并生成JSON格式数据;3)配置Zabbix监控系统,创建自动发现规则和监控项原型,实现线路状态的自动监控。该方案适用于专线数量不多但重要的场景,能够有效检测中间有运营商设备的专线线路通断状态,最终在Zabbix中实现可视化的告警展示。

2301_80016499的博客 779

【黑马-产品经理入门基础课笔记】01.认识产品经理

问题定义 ==> 可行性研究 ==> 需求分析。

2401_88466092的博客 1841

smarty模板引擎--php高级最详细教程

Smarty(模板引擎) 原创 一、什么是模板引擎? Smarty是一个php模板引擎。更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法。可以描述为应用程序员和美工扮演了不同的角色, 因为在大多数情况下,他们不可能是同一个人;分开编写,加快开发进度! 二、自定义模板引擎 引擎类:Mytpl.class.php     class M

黑夜人的博客 1万+

Smarty快速入门之一

Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

伴老 5779

YOLOv8-COCO指标转换

本文介绍了将YOLO格式数据集转换为COCO格式并评估模型性能的完整流程。首先需将YOLO格式的标注数据转换为COCO格式,通过修改classes、image_path等参数适配不同数据集。然后使用YOLO模型对验证集进行预测并保存结果为JSON格式。最后通过比较预测结果和转换后的COCO标注文件,使用COCO官方评估指标和TIDE工具进行性能分析,生成包含AP、AR等指标的报告及错误分析图表。整个过程实现了从数据准备到模型评估的完整闭环,为计算机视觉任务提供标准化的性能评估方案。

FJN110的博客 401

YOLOv8中的可变形卷积改进 | 从DCNv1到DCNv3的多位置替换可变形卷积保姆级实操

可变形卷积(Deformable Convolution)最早由Dai等人在2017年提出,其核心思想是在标准卷积操作的基础上,引入可学习的偏移量(offsets),使卷积核能够自适应调整其采样位置,从而增强模型对目标变形的感知能力。return x本文通过深入探讨可变形卷积在YOLOv8中的应用,详细介绍了DCNv1、DCNv2和DCNv3的原理和实现,并通过实验验证了其在目标检测任务中的有效性。未来,我们将继续探索更多优化策略和技术,提升YOLOv8模型的性能,以应对更复杂的目标检测任务。

一键难忘的博客 4047

smarty精品教程一(高级篇)

学习php模板开发有一两天了,对比了一下。还是smarty模板功能强大一些。 所以建议大家就学samrty模板吧!(个人观点) 1.我们要配置好php环境 2.下好samrty模板文件 下载地址-&gt;http://www.smarty.net/download.php 3.smarty中文手册 下载地址-&gt;http://www.smarty.net/manual/en/(官方英文...

omygege 100

【读论文】ASR大模型动态热词新方案

大型语言模型(LLMs)以其卓越的通用知识和推理能力重塑了 AI 领域,但它们在处理特定领域或用户的专有词汇(即“热词”)时,往往表现出“选择性失忆”。传统的 RAG 或 Prompting 方案在实时性和准确性上存在瓶颈。阿里的《Hotword Model for Large Models》论文提出了一种“神经插件”方案,它能够在不修改基座模型权重的前提下,动态、精准地将热词能力注入到生成过程中。本文将从架构设计、训练范式到推理逻辑,全方位拆解这一技术的内核,并探讨其在工业级应用中的价值。

kakaZhui的博客 290

pxpipe Opus 4.8 低密度读取扫描:字元格大小与逐字精确度、Token 成本的量化权衡

pxpipe 通过把文本上下文渲染成图片来削减 Claude Code 的 Token 用量,其核心工程问题是:图片密度越低(字元格越大、每页字数越少、页数越多),视觉模型对精确字符串(hex、标识符、路径、端口号)的读取就越可靠,但 Token 成本也越高。本篇文章以仓库中 `eval/opus-density` 的完整测量实验为主体,介绍 pxpipe 如何用"变体 × 模型 × 任务"的矩阵

gitblog_00638的博客 1146

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

smarty精品教程二(高级篇)

上面我们学习了,第一个实例.大家都有所了解了.接下来我们学习第二个实例.主要是学习smarty的一些函数.eg2:2.php/*********************************************QQ:283093141*********************************************/include_once(../libs/Sm

潇湘博客 1128

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

smarty精品教程三(高级篇)

接下来我们学习smarty数组.eg3:3.php/*********************************************QQ:283093141*********************************************/include_once(../libs/Smarty.class.php);   //包含smarty类文件$sma

潇湘博客 795

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

smarty精品教程四(高级篇)可下载实例

现我们就学学smarty表态页面语法. eg4: 4.php <?php/*********************************************QQ:283093141 *********************************************/include_once('../libs/Smarty.class.php'); //包含sm...

weixin_30553065的博客 94

php设计 mobi,PHP程序设计高级教程

PHP程序设计高级教程 下载 mobi epub pdf☆☆☆☆☆传智播客高教产品研发部 编下载链接在页面底部发表于2021-04-12类似图书 点击查看全场最低价图书介绍出版社: 中国铁道出版社ISBN:9787113195717版次:1商品编码:11664795包装:平装丛书名: “十二五”高等教育规划教材开本:16开出版时间:2015-01-01用纸:胶版纸页数:353字数:552000正文...

weixin_34187444的博客 663

php学到最后,【A0365】[PHP视频教程]新开班布尔教育最后一期PHP 入门到实战视频教程 百度云 网盘...

Java视频教程名称:新开班布尔教育最后一期PHP 入门到实战视频教程PHP视频教程 % ?- N1 Y! U8 S9 D% B百度网盘下载链接:1 c9 S; x|$ z+ d0 K/ A! EH游客,如果您要查看本帖隐藏内容请->>回复[/hide]密码:bsdb 【解压密码:yKXesxTwbKEtlkF6】& B0 _) \) I+ v7 C2 X2 O9 ...

weixin_28788441的博客 778

php教程phpmeng,李炎恢PHP培训视频教程

李炎恢老师倾心制作,史上最通俗易懂的PHP高端培训教程课程讲师:李炎恢课程分类:套餐系列适合人群:初级课时数量:300+课时用到技术:PHP&MySQL,Smarty模板引擎,PDO,PHP ShopEx框架,ThinkPHP涉及项目:多用户留言版系统,CMS内容管理系统,大型在线商城系统,微博系统全程实录咨询qq:1840215592李炎恢老师倾心制作,史上最通俗易懂的PHP高端培训教程...

weixin_35120567的博客 194
上一篇: ecshop首页显示热门点击商品
下一篇: 50点提高PHP编程效率
cloudday
博客等级 码龄19年 112粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值