热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

smarty的插件功能是smarty模板的精华

smarty的插件放在/smarty/libs/plugins下面,它为程序的开发提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变量$yesterday进行格式化。在我们的php文件中,并不需要对date_forma

一,smarty插件介绍

smarty的插件放在/smarty/libs/plugins下面,它为程序的开发提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变量$yesterday进行格式化。在我们的php文件中,并不需要对date_format进行处理,我们只要拿来用就好了。

二,smarty插件命名规则

1,插件文件名命名规则


type .name .php

type有以下几种

  1. function
  2. modifier
  3. block
  4. compiler
  5. prefilter
  6. postfilter
  7. outputfilter
  8. resource
  9. insert

例如:modifier.date_format.php这个就是smarty自带的日期插件的文件名

2,插件文件里面的函数命名规则

smarty_type_name()

例如:smarty_modifier_date_format

上面的紫色字对应的是插件类型,桔黄色字对应的是插件名称

三,添加自定义插件功能

个人觉得modifier和function这二种类型的插件最有用,也是最常用的。所以下面我以这二个类型来举例子

1,添加modifier插件

a ),/smarty/libs/plugins下面建个文件modifier.reverse.php

b),在调用模块的文件文件里加上

$this->tpl->assign("test", "123456789");

c),在模块文件文件中加入

 

reverse == {$test|reverse}
 

上面的这个例子是把一个字符串进行反转,结果是:987654321

 

2,添加function插件

a ),/smarty/libs/plugins下面建个文件function.html_lis.php

 
function smarty_function_html_lis($params, &$smarty)
{
    require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
    $class = 'li_style';
    $optiOns= null;
    $separator = '';
    $js = '';
    $labels =true;
    $output = null;
    $extra = '';
    foreach($params as $_key => $_val) {
        switch($_key) {
            case 'class':
            case 'separator':
                $$_key = $_val;
                break;

            case 'labels':
                $$_key = (bool)$_val;
                break;

            case 'js':
                $$_key = $_val;
                break;

            case 'options':
                $$_key = (array)$_val;
                break;

            case 'output':
                $$_key = array_values((array)$_val);
                break;

            case 'lis':
                $smarty->trigger_error('html_lis: the use of the "lis" attribute is deprecated, use "options" instead', E_USER_WARNING);
                $optiOns= (array)$_val;
                break;

            default:
                if(!is_array($_val)) {
                    $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
                } else {
                    $smarty->trigger_error("html_lis: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
                }
                break;
        }
    }

    if (!isset($options) && !isset($values))
        return ''; /* raise error here? */

    $_html_result = array();

    if (isset($options)) {

        foreach ($options as $_key=>$_val)
            $_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);

    } else {
        foreach ($values as $_i=>$_key) {
            $_val = isset($output[$_i]) ? $output[$_i] : '';
            $_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);
        }

    }

    if(!empty($params['assign'])) {
        $smarty->assign($params['assign'], "
    ".$_html_result."
"); } else { return "
    ".implode("\n",$_html_result)."
"; } } function smarty_function_html_lis_output($class, $value, $output, $extra, $separator, $labels, $js) { $_output = ''; if ($labels) $_output .= ''; $_output .= '
  • ' . $output; if ($labels) $_output .= ''; $_output .= $separator; return $_output; } ?>
  • b),在调用模块的文件文件里加上 


      $this->tpl->assign('cust_lis', array(
         "china" => '中国',
         "shanghai" => '上海',
         "heifei" => '合肥',
         "luan" => '六安'));
      $this->tpl->assign("onclick", "Onclick=sep()"); 
     

    c),在模块文件文件中加入

     

    {html_lis  optiOns=$cust_lis js=$onclick}
     

    d),输入结果为

     
    • 中国
    • 上海
    • 合肥
    • 六安
     
     

    推荐阅读
    • 如何在Notepad++中执行Python代码
      Notepad++是一款功能丰富的文本编辑器,不仅支持多种编程语言的语法高亮显示,还提供了便捷的代码执行功能。本文将详细介绍如何在Notepad++中配置并运行Python代码。 ... [详细]
    • Appium + Java 自动化测试中处理页面空白区域点击问题
      在进行移动应用自动化测试时,有时会遇到某些页面没有返回按钮,只能通过点击空白区域返回的情况。本文将探讨如何在Appium + Java环境中有效解决此类问题,并提供详细的解决方案。 ... [详细]
    • 如何清除Chrome浏览器地址栏的特定历史记录
      在使用Chrome浏览器时,你可能会发现地址栏保存了大量浏览记录。有时你可能希望删除某些特定的历史记录而不影响其他数据。本文将详细介绍如何单独删除地址栏中的特定记录以及批量清除所有历史记录的方法。 ... [详细]
    • 利用Selenium与ChromeDriver实现豆瓣网页全屏截图
      本文介绍了一种使用Selenium和ChromeDriver结合Python代码,轻松实现对豆瓣网站进行完整页面截图的方法。该方法不仅简单易行,而且解决了新版Selenium不再支持PhantomJS的问题。 ... [详细]
    • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
    • 嵌入式开发环境搭建与文件传输指南
      本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
    • 解决TensorFlow CPU版本安装中的依赖问题
      本文记录了在安装CPU版本的TensorFlow过程中遇到的依赖问题及解决方案,特别是numpy版本不匹配和动态链接库(DLL)错误。通过详细的步骤说明和专业建议,帮助读者顺利安装并使用TensorFlow。 ... [详细]
    • 探索新一代API文档工具,告别Swagger的繁琐
      对于后端开发者而言,编写和维护API文档既繁琐又不可或缺。本文将介绍一款全新的API文档工具,帮助团队更高效地协作,简化API文档生成流程。 ... [详细]
    • 本文探讨了在构建应用程序时,如何对不同类型的数据进行结构化设计。主要分为三类:全局配置、用户个人设置和用户关系链。每种类型的数据都有其独特的用途和应用场景,合理规划这些数据结构有助于提升用户体验和系统的可维护性。 ... [详细]
    • Linux中的yum安装软件
      yum俗称大黄狗作用:解决安装软件包的依赖关系当安装依赖关系的软件包时,会将依赖的软件包一起安装。本地yum:需要yum源,光驱挂载。yum源:(刚开始查看yum源中的内容就是上图 ... [详细]
    • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
    • 鼠标悬停出现提示信息怎么做
      概述–提示:指启示,提起注意或给予提醒和解释。在excel中会经常用到给某个格子增加提醒信息,比如金额提示输入数值或最大长度值等等。设置方式也有多种,简单的,仅为单元格插入批注就可 ... [详细]
    • 精致小屏灰色风格苹果CMS v10模板,支持DIY主题管理系统
      探索一款专为影视站设计的苹果CMS v10模板,具备强大的主题管理系统和500多个设置项,无需二次开发即可轻松配置。下载地址:https://www.mytheme.cn/maccms/244.html,演示地址:http://demo.mytheme.cn/index.php?id=244。 ... [详细]
    • 精选Unity开源项目:UniRx实现响应式编程
      本文介绍了Unity中的响应式编程框架——UniRx,探讨了其在解决异步编程难题中的应用及优势。 ... [详细]
    • 基于花生壳域名的Android与ESP8266远程控制系统搭建
      本文介绍了一种使用Android设备、ESP8266模块及路由器,结合花生壳动态域名解析服务实现远程控制的方法。通过该方法,用户能够有效解决因公网IP变动导致的连接问题,实现稳定可靠的远程控制。 ... [详细]
    author-avatar
    北人南漂记
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有