当前位置: 首页 > news >正文

初会smarty

©Smarty 可以实现代码分离 php 和 html 分离。 逻辑代码和html前端代码分离,便于修改,维护,扩展。

例子:php代码页面include html页面,不要混杂在一个文件内。html内 php只 echo数据,这个是mvc。

smarty是把php和html完全分离,html 里看不到php. 

html内是{$变量},用echo也可以,原生php输出快。WordPress,CI框架。

Smarty是模板,ecshop 改进的Smarty. tp自己的模板,织梦自己的模板。工作中未必用到smarty,模板的使用模式。原理相同。

 

© 2.6 php 4.X.X 3.1.13 新版本

©模板代码分离的实质是 把常规的嵌入到html里的代码标签 <?php ...;?> 翻译成 { } [str_replace] 

  把html文件生成另一个php文件,然后可以include到需要引用的php逻辑代码下,组成完整的页面代码。

  注意外面的变量的作用域,是否能影响到类内,模板内

  技巧,类内定义属性 数组  数组[key] = value 来存储 外部传入的变量值

 翻译就是 <?php $this->array[\' '.  变量名 . '\'];?>

$smarty的工作流程:
1:把需要显示的全局变量,赋值,塞到对象内部的属性上,一个数组里
2:编译模板,把{$标签},解析成相应的php echo 代码
3:引入编译后的PHP文件

使用smarty的步骤:
1:smarty是一个类,要使用,需先引入并实例化
2:assign赋值
3:display [编译到输出]

 

©

 

<?php

smarty流程:
1:引入smarty
2:实例化
3:配置[最基本的要配置模板目录,和编译目录]
***/



// 引入smarty
require('../Smarty3/libs/Smarty.class.php');

// 实例化
$smarty = new Smarty();

// print_r($smarty);

// 配置
$smarty->template_dir = './temp';
$smarty->compile_dir = './comp';


$title = '两会召开中';
$content = '提案特别多,听说房子要涨价';

// 赋值
$smarty->assign('xxx',$title);
$smarty->assign('content',$content);


$smarty->display('news.html');

?>

 

smarty标签变量,来源于3个部分
1: 是php中assign分配的变量
2: smarty的系统保留变量
3: 从配置文件读取到的配置变量

©

 

<?php
// 引入smarty
require('../Smarty3/libs/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = './temp';
$smarty->compile_dir = './comp';
$smarty->config_dir = './conf';



/*
    这是smarty模板assign的源码

    如果第1个参数是数组的话, 
    效果是把此数组的每个值,赋到以相应的键为名称的标签上去


    public function assign($tpl_var, $value = null, $nocache = false)
    {
        if (is_array($tpl_var)) {
            foreach ($tpl_var as $_key => $_val) {
                if ($_key != '') {
                    $this->tpl_vars[$_key] = new Smarty_variable($_val, $nocache);
                }
            }
        } else {
            if ($tpl_var != '') {
                $this->tpl_vars[$tpl_var] = new Smarty_variable($value, $nocache);
            }
        }

        return $this;
    }

*/
$user = array('name'=>'刘备','age'=>'28');
$smarty->assign($user);
/*
等于
$smarty->assign('name','刘备');
$smarty->assign('age',''28);
*/
?>

 

// 连着往某一个标签赋多个值时,我们可以用append, append是附加,追加的意思
$smarty->append('stu','李四'); // 这1步,_tpl_var['stu'][] = '李四';
$smarty->append('stu','王五'); // 这1步,_tpl_var['stu'][] = '王五';
// 也就是,把append到一个标签里变量,都一个数组里

111111

 

转载于:https://www.cnblogs.com/zy2012/archive/2013/03/15/2944767.html

相关文章:

  • ubuntu12.10配置java环境
  • 基于字符串的简单汇编虚拟机
  • 快速升级Oracle 11.2.0.2 RAC到11.2.0.3
  • SQL如何在已有的一张表中插入一列类型为INTEGER数据 并赋初始值为0
  • sublime text 3
  • 木杉大话微软手机系统
  • Python Dict 创建
  • 如何在存储过程内部调用另一个存储过程 EXEC
  • 翻转句子中单词的顺序
  • 转 MapGuide HTTP API
  • 倍压整流电路
  • Tomcat中对内存的分配与溢出的处理办法
  • 一个VR 开发工具SDK
  • 关系型数据库基础之:关系型数据库管理系统简介
  • tomcat 随笔小记
  • 【Leetcode】101. 对称二叉树
  • 2019.2.20 c++ 知识梳理
  • canvas 绘制双线技巧
  • chrome扩展demo1-小时钟
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript类型识别
  • Javascript设计模式学习之Observer(观察者)模式
  • JAVA多线程机制解析-volatilesynchronized
  • Laravel5.4 Queues队列学习
  • LeetCode29.两数相除 JavaScript
  • MD5加密原理解析及OC版原理实现
  • PHP 小技巧
  • React中的“虫洞”——Context
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue 配置sass、scss全局变量
  • 从零开始的无人驾驶 1
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 如何用vue打造一个移动端音乐播放器
  • 我建了一个叫Hello World的项目
  • 一起参Ember.js讨论、问答社区。
  • 赢得Docker挑战最佳实践
  • 自定义函数
  • 从如何停掉 Promise 链说起
  • 选择阿里云数据库HBase版十大理由
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • !!Dom4j 学习笔记
  • # 数据结构
  • ###C语言程序设计-----C语言学习(3)#
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C#)一个最简单的链表类
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二)fiber的基本认识
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (十六)一篇文章学会Java的常用API