Table of Contents
Smarty template engine technology 2, smarty template engine
Home Backend Development PHP Tutorial Smarty template engine technology 2, smarty template engine_PHP tutorial

Smarty template engine technology 2, smarty template engine_PHP tutorial

Jul 12, 2016 am 08:55 AM
p smarty two effect engine technology template

Smarty template engine technology 2, smarty template engine

Smarty template engine technology

Function: Load a php file and assign the content of the loaded file to a variable

Note: This built-in function can only be used in 2.0. If used, SmartyBC.class.php must be instantiated.

Sample code:

Index.php

include 'Smarty/SmartyBC.class.php';
//
InstantiationSmartyClass
$Smarty = new SmartyBC();
$Smarty->assign('name','
Xiao Ming');
$Smarty->display('index.tpl');

index.tpl

<code><span><strong><em><span>{*<span>include_php</span></span>内建函数<span>*}<br/></span></em><span>{<span>include_php <span>file=<span>"date.php" <span>assign=<span>"date"<span>}<br/>{<span>$<span>date}</span></span></span></span></span></span></span></span></span></strong>
				</span></code>
Copy after login

Function: When the built-in functions of Smarty are not enough, you can expand the functions by inserting the built-in function.

Basic syntax: Create an index.php file

insert_Custom function name($arg){

echo $arg[variable defined in template]

}

Index.tpl file

{insert name=Custom function name Custom parameters... }

Sample code:

Index.php

function insert_func($arg){
echo $arg['title'];
}
function insert_date($arg){
echo $arg['say']."
The weather is great today. , the current time is
".date('Y-m-d H:i:s',time());
echo '
';
echo $arg['zhangsan']."
The weather is great today. The time is now
".date('Y-m-d H:i:s',time());
}

index.tpl template

{insert name="func" title='PHP is the best language in the world '}
< hr>
{insert name="date" say='
Lao Wang said:' zhangsan='Hahaha:
'}

Sample code:

{if $age >= 18}
This person is not a minor
{elseif $age == '14'}
This person is 14 years old
{else}
This person is a minor
{/if }

Sample code:

<b>inSmarty we use {ldelim}if{rdelim}Perform conditional judgmentb>

Function: Any content in this tag will not be parsed by the Smarty template engine

Sample code:

{literal}
{*
Hi, I am an annotator
*}
{assign var='age' value="14"}
{/literal}

Operation effect:

Function: Native PHP code can be used in this tag.

Sample code:

{*PHPBuilt-in functions*}
{php}
echo date('Y-m-d h:i:s',time());
echo '<br>';
echo "
I am at
php Contents in built-in functions";
{/php}

Operation effect:

7. stripbuilt-in function

Function: Remove spaces and newlines

Sample code:

{strip}
<table>
<tr >
<td>1td>
<td>2td>
<td>3td> ;
<td>4td>
<td>5td>
tr>
table>
{/strip}

Before use:

After use:

8, section, sectionelseBuilt-in function (two-dimensional array, )

Function: Traverse the array

Basic usage:

{section loop=$arr name="index"}
{$ arr[index]}
<br>
{/section}

Parameter details: loop needs to traverse the array

Name The index of the current loop

Extended use 1: Use start step max

{section loop=$arr1 name="index" start="0" step="1" max="5"}
{$arr1[index]}
<br>
{/section}

  • Parameter details: start The starting index of the loop

Step The amount added each time through the loop

Max the maximum number of loops

Extended use 2: sectionelse

Function: Determine whether the looped array is empty. If it is empty, execute the following content.

Example code:

{*sectionBuilt-in functions*}
{section loop=$arr1 name="index" start="0" step ="1" max="5"}
{$arr1[index]}
<br>
{sectionelse}
<b>):
There is no array or the array is empty
b>
{/section}

  • Traverse a two-dimensional array

Example code:

Index.php

$arr3 = array(array('name'=>'小明','age'=>25,'sex'=>'未知'),
array('name'=>'
老王','age'=>26,'sex'=>''),
array('name'=>'
老李','age'=>27,'sex'=>'你猜
')
);

Index.tpl

{section loop=$arr3 name="index" }
{$arr3[index]['name']} |
{$arr3[index]['age']} |
{$arr3[index]['sex']} |
<hr/>
{/section}

运行效果:

 

拓展内容:

 

<code><span><strong>当前索引: <span><span>{<span>$<span>smarty.section.index.index} <span>->><br/></span></span></span></span>当前索引的前一个:<span>{<span>$<span>smarty.section.index.index_prev}<span>->><br/></span></span></span></span>当前索引的下一个:<span>{<span>$<span>smarty.section.index.index_next}<span>->><br/></span></span></span></span>当前所循环的次数<span>
								<span><span>{<span>$<span>smarty.section.index.iteration}<span>->><br/></span></span></span></span>判断当前是否第一次<span><span>: <span>{<span>$<span>smarty.section.index.first}<span>->><br/></span></span></span></span></span>判断当前是否最后一次:<span>{<span>$<span>smarty.section.index.last}<span>->>
</span></span></span></span></span></span></span></span></strong></span></code>
Copy after login

循环的总次数:{$smarty.section.index.total}->>

 

运行效果:

示例代码:

{counter start='10' }
<hr>
{counter}
<hr>
{counter print=false}
<hr>
{counter skip=2}
<hr>
{counter}
<hr>

运行效果:

基本语法:{cycle values=参数1,参数2,参数3}

 

示例代码:

{*cycleRealize color change of each row*}
<hr>
<table width="100%">
<tr style="background-color: {cycle values="red,green,yellow"}" >
<td>
My first {counter start='1' skip='1'} cycletd>
tr>
<tr style="background-color: {cycle values="red,green,yellow"}">
<td>
I The {counter} looptd>
tr>
<tr style="background-color: {cycle values="red,green,yellow"}">
<td>
Myth{counter} cycletd>
tr>
<tr style="background-color: {cycle values="red,green,yellow"}">
<td>
Myth{counter}Looptd>
tr>
< tr style="background-color: {cycle values="red,green,yellow"}">
<td>
My first {counter} looptd>
tr>
<tr style="background-color: {cycle values="red,green,yellow"}">
<td>
My number{counter} cyclestd>
tr>
< ;/table>

{debug}

Operation effect:

Function: Capture the contents of a file and assign it to a variable

Sample code:

{fetch file="shi.txt" assign="text"}
{fetch file="date.php" assign="php"}
{*
变量调节器
{$text|
变量调节器名称
:参数1:参数2}
*}
{$php}
<hr>
{$text|nl2br}

运行效果:

<code><span><strong>{<span>html_image <span>file=<span>"1.jpg"<span>}</span></span></span></span></strong>
				</span></code>
Copy after login

 

参数:file    图片资源的路径

运行效果:

 

作用:生成一个表格,将数据遍历进去

示例代码:

{html_table loop=$arr cols="3"}

参数说明:loop    要循环遍历的数组

     Cols    指定表格列数

作用:生成一组多选框

示例代码:

{html_checkboxes name = 'job'
values = $arr
checked = $arr2
output = $arr3
separator = "|"
}

参数说明: name        对应多选框中的name属性

         Values    对应多选框中你的value属性

Checked    选中指定的多选框

         Output    控制文本内容

         Separator 连接符

运行效果:

{待补充}

示例代码:

<code><span><strong><<span>select <span>style=<span>"<span>width: <span>100<span>%;<span>"<span>><br/>
														<span>{<span>html_options <span>values    =   <span>$<span>arr<br/>                  selected  =   <span>'GO'<br/>
																				<span>output    =   <span>$<span>arr3<br/>    }<br/><span></<span>select<span>></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></strong><span>
					</span></span></code>
Copy after login

参数说明:values         下拉框选项的值

     Selected    指定被选中的下拉选项,注意:必须和value的值对应

         Output    输出的文本

9html_radios自定义函数

示例代码:

<code><span><strong>{<span>html_radios <span>values     =   <span>$<span>arr<br/>             checked    =   <span>'nodejs'<br/>
											<span>output     =   <span>$<span>arr3<br/>             separator  =   <span>"|"<br/><span>}</span></span></span></span></span></span></span></span></span></span></strong>
				</span></code>
Copy after login

 

参数说明:values    单选框的值

         Checked    指定默认被选中的单选框

         Output    输出的文本

         Separator    连接符

运行效果:

{待补充}

实例代码:

{section loop=$arr4 name="index" }
{html_image file="./img/{$arr4[index]}.jpg"}
<hr>
{/section}

 

SMARTY_DIR

  • $template_dir        模板目录    默认是:templates
  • $compile_dir        编译目录    默认是:templates_c
  • $config_dir        配置目录    默认:configs
  • $cache_dir        缓存目录    默认:cache
  • $left_delimiter    左定界符    默认:{
  • $right_delimiter    右定界符    默认:}

 

以上变量都有默认行为。

  • $caching Whether to enable caching
  • $cache_lifetime Cache life cycle: Default 3600s
  • $debugging Enable debugging template
  • $php_handling Is it allowed to introduce php in the template?

3, common methods

  • assign passes variables to the template
  • assignByRef Assign variables to template files (pass by reference)
  • append Append variables

$Smarty->append('var1','Xiao Ming');
$Smarty->append ('var1','25');
$Smarty->append('var1','
Male
');

  • appendByRef appends different data to the array variable of the template (passed by reference)
  • clearAllAssign Clear all variables in the template

$Smarty->clearAllAssign(); // Clear all template variables

  • clearAssign clears the specified variable

$Smarty->clearAssign('title') ;

  • clearCache Clear cache
  • configLoad Configuration loading

$Smarty->configLoad('config.conf','class2');

  • clearConfig Clear configuration content

$Smarty->clearConfig('name') ;

  • display Specify rendering template

$Smarty->display('index_3.tpl');

Load template file

Rendering template

Show template

  • fetch captures the template but does not output it

Load template file

Render (replace tags with php code) template file

We can implement static technology through fetch.

Index_3.php file

/*
*
If any Static files are loaded, and if there is no static file, a static file is generated.
* */
if(!is_file( './html/index_3.html')){
$html = $Smarty->fetch('index_3.tpl');
file_put_contents('./html/index_3.html',$html);
echo '
There are no static files here
';
include "./html/index_3.html";
}else{
echo '
There are static files here
';
include "./html/index_3.html";
}

[To be added]

  • templateExists determines whether the template file exists

if($Smarty->templateExists('index_4.tpl')){
$Smarty->display('index_3.tpl');
}else{
echo '
Diaoyou, the template file is not there
~';
}

Added: How to read array, object in smarty template.

  • 在模板中获取数组内容:

{*多维数组*}
{$var[0]['name']}
{*
一位数组*}
{$var['name']}

  • 在模板中获取对象内容

{*获取对象属性*}
{$std->name}
<hr>
{*
获取对方法*}
{$person->speak()}

Index3.php文件

$std = new StdClass();
class person{
function __construct(){}
function speak(){
echo '
你猜猜我谁
?';
}
}
$person = new person();
$std->name = '
张二明
';

 

 

概念:一般在我们项目中,有一部分数据并不是实时更新的,但是,有又必须实时访问。如果不使用缓存技术的话,每访问一次,得查询一次或者多次数据库,那么会给数据造成很高的I/O开销。会增加服务器的压力。

用户端缓存原理:

 

服务器缓存原理:

 

//开启缓存
$Smarty->caching = true;

//设置缓存文件的生命周期
$Smarty->cache_lifetime = '7200';

缓存文件由编译文件而来。

 

编译文的内容何时变化?

 

思路:设置一个生命周期只有30秒的缓存文件,定义一个变量,在模板中使用该变量。然后打开index.php.

然后修改该变量的值。等待。。。30

Smarty缓存相关细节

<code><span><strong>$Smarty<span>->isCached(<span>'index_4.tpl'<span>)</span></span></span></strong>
				</span></code>
Copy after login

  • 基本语法:isCached(templatesName); 检测模板文件的缓村文件是否存在
  • 参数说明:模板文件名称

<code><span><span><strong><em>//</em></strong></span><span><strong><em>清除所有缓存<br/><span><span>$<span>Smarty->clearAllCache();<br/><span>//</span></span></span><span>清楚某模板缓存文件<br/></span></span></em><span>$Smarty<span>->clearCache(<span>'index_4.tpl'<span>);</span></span></span></span></strong>
					</span></span></code>
Copy after login

 

在Smarty的缓村是全局缓存,如果开启缓存,访问整个页面的数据都会被缓存,如果页面中有一些动态数据需要修改,如何处理?

如何处理页面中动态显示的数据部分呢?

<code><span><strong><span>$Smarty<span>->assign(<span>'shige'<span>,<span>'</span></span></span></span></span>《再别康桥》<span>'<span>,<span>true<span>);</span></span></span></span></strong>
				</span></code>
Copy after login

<code><span><strong>{<span>nocache<span>}<br/>    {<span>$<span>title}<br/>{/<span>nocache<span>}</span></span></span></span></span></span></strong>
				</span></code>
Copy after login

如何解决一个模板文件,动态显示不同的内容。

实际场景:譬如一个电商网站的商品详细页,会动态的根据URL上的参数,改变该页面的内容。

那么这种情况如何实现缓存呢?

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=2

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=3

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=250

 

在Smarty中,我们通过设置display()第二个参数,来实现,单页面,多缓存。

11、缓存集合

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15

http://localhost:63354/Smarty/Smarty02/index5.php?goods_id=1&cate_id=15

我们通过给display()方法设置第二个参数实现缓存集合(通过|分割)

<code><span><span><strong>$Smarty</strong></span><span><strong>->display(<span>'index_5.tpl'<span>,<span>$_GET<span>[<span>'goods_id'<span>].<span>'|'<span>.<span>$_GET<span>[<span>'cate_id'<span>]);</span></span></span></span></span></span></span></span></span></span></span></span></strong>
					</span></span></code>
Copy after login

 

五、过滤器

示例代码:

<code><span><strong><span>//</span><span>定义一个函数用于字符串替换</span><span>
						</span></strong></span></code>
Copy after login

<code><span><strong><span>function <span>check<span>(<span>$tpl_output<span>, <span>$smarty<span>){<br/>
													<span>$tpl_output <span>= <em>str_replace</em>(<span>'</span></span></span></span></span></span></span></span></span></span>苍井空<span><span>'<span>,<span>'</span></span></span>张某某<span>'<span>,<span>$tpl_output<span>);<br/>
											<span>return <span>$tpl_output<span>;<br/>}
</span></span></span></span></span></span></span></span></strong></span></code>
Copy after login

<code><span><strong><span>//</span><span>通过注册过滤器,实现模板中的字符串过滤</span></strong><span><strong><br/><span>$Smarty<span>->registerFilter(<span>"output"<span>,<span>"check"<span>);</span></span></span></span></span></span></strong>
					</span></span></code>
Copy after login

 

通过模板继承实现页面精细化拆分

示例代码:

Parent.tpl文件

<code><span><span><strong>{<span>extends <span>file=<span>"parent.tpl"<span>}<br/>{<span>block <span>name=<span>'content'<span>}<br/>
														</span></span></span></span></span></span></span></span></strong></span><span><strong>偶哈呦,哈哈哈哈<br/>
							<span><<span>hr<span>><br/><span>{/<span>block<span>}</span></span></span></span></span></span></strong>
					</span></span></code>
Copy after login
Copy after login

Child.tpl文件

<code><span><span><strong>{<span>extends <span>file=<span>"parent.tpl"<span>}<br/>{<span>block <span>name=<span>'content'<span>}<br/>
														</span></span></span></span></span></span></span></span></strong></span><span><strong>偶哈呦,哈哈哈哈<br/>
							<span><<span>hr<span>><br/><span>{/<span>block<span>}</span></span></span></span></span></span></strong>
					</span></span></code>
Copy after login
Copy after login

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1117386.htmlTechArticleSmarty模板引擎技术二,smarty模板引擎 Smarty模板引擎技术 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Analysis of the function and principle of nohup Analysis of the function and principle of nohup Mar 25, 2024 pm 03:24 PM

Analysis of the role and principle of nohup In Unix and Unix-like operating systems, nohup is a commonly used command that is used to run commands in the background. Even if the user exits the current session or closes the terminal window, the command can still continue to be executed. In this article, we will analyze the function and principle of the nohup command in detail. 1. The role of nohup: Running commands in the background: Through the nohup command, we can let long-running commands continue to execute in the background without being affected by the user exiting the terminal session. This needs to be run

DualBEV: significantly surpassing BEVFormer and BEVDet4D, open the book! DualBEV: significantly surpassing BEVFormer and BEVDet4D, open the book! Mar 21, 2024 pm 05:21 PM

This paper explores the problem of accurately detecting objects from different viewing angles (such as perspective and bird's-eye view) in autonomous driving, especially how to effectively transform features from perspective (PV) to bird's-eye view (BEV) space. Transformation is implemented via the Visual Transformation (VT) module. Existing methods are broadly divided into two strategies: 2D to 3D and 3D to 2D conversion. 2D-to-3D methods improve dense 2D features by predicting depth probabilities, but the inherent uncertainty of depth predictions, especially in distant regions, may introduce inaccuracies. While 3D to 2D methods usually use 3D queries to sample 2D features and learn the attention weights of the correspondence between 3D and 2D features through a Transformer, which increases the computational and deployment time.

Explore the importance and role of define function in PHP Explore the importance and role of define function in PHP Mar 19, 2024 pm 12:12 PM

The importance and role of the define function in PHP 1. Basic introduction to the define function In PHP, the define function is a key function used to define constants. Constants will not change their values ​​during the running of the program. Constants defined using the define function can be accessed throughout the script and are global. 2. The syntax of define function The basic syntax of define function is as follows: define(&quot;constant name&quot;,&quot;constant value&amp;qu

What is PHP used for? Explore the role and functions of PHP What is PHP used for? Explore the role and functions of PHP Mar 24, 2024 am 11:39 AM

PHP is a server-side scripting language widely used in web development. Its main function is to generate dynamic web content. When combined with HTML, it can create rich and colorful web pages. PHP is powerful. It can perform various database operations, file operations, form processing and other tasks, providing powerful interactivity and functionality for websites. In the following articles, we will further explore the role and functions of PHP, with detailed code examples. First, let’s take a look at a common use of PHP: dynamic web page generation: P

Review! Deep model fusion (LLM/basic model/federated learning/fine-tuning, etc.) Review! Deep model fusion (LLM/basic model/federated learning/fine-tuning, etc.) Apr 18, 2024 pm 09:43 PM

In September 23, the paper "DeepModelFusion:ASurvey" was published by the National University of Defense Technology, JD.com and Beijing Institute of Technology. Deep model fusion/merging is an emerging technology that combines the parameters or predictions of multiple deep learning models into a single model. It combines the capabilities of different models to compensate for the biases and errors of individual models for better performance. Deep model fusion on large-scale deep learning models (such as LLM and basic models) faces some challenges, including high computational cost, high-dimensional parameter space, interference between different heterogeneous models, etc. This article divides existing deep model fusion methods into four categories: (1) "Pattern connection", which connects solutions in the weight space through a loss-reducing path to obtain a better initial model fusion

How to add PPT mask How to add PPT mask Mar 20, 2024 pm 12:28 PM

Regarding PPT masking, many people must be unfamiliar with it. Most people do not understand it thoroughly when making PPT, but just make it up to make what they like. Therefore, many people do not know what PPT masking means, nor do they understand it. I know what this mask does, and I don’t even know that it can make the picture less monotonous. Friends who want to learn, come and learn, and add some PPT masks to your PPT pictures. Make it less monotonous. So, how to add a PPT mask? Please read below. 1. First we open PPT, select a blank picture, then right-click [Set Background Format] and select a solid color. 2. Click [Insert], word art, enter the word 3. Click [Insert], click [Shape]

More than just 3D Gaussian! Latest overview of state-of-the-art 3D reconstruction techniques More than just 3D Gaussian! Latest overview of state-of-the-art 3D reconstruction techniques Jun 02, 2024 pm 06:57 PM

Written above & The author’s personal understanding is that image-based 3D reconstruction is a challenging task that involves inferring the 3D shape of an object or scene from a set of input images. Learning-based methods have attracted attention for their ability to directly estimate 3D shapes. This review paper focuses on state-of-the-art 3D reconstruction techniques, including generating novel, unseen views. An overview of recent developments in Gaussian splash methods is provided, including input types, model structures, output representations, and training strategies. Unresolved challenges and future directions are also discussed. Given the rapid progress in this field and the numerous opportunities to enhance 3D reconstruction methods, a thorough examination of the algorithm seems crucial. Therefore, this study provides a comprehensive overview of recent advances in Gaussian scattering. (Swipe your thumb up

Effects of C++ template specialization on function overloading and overriding Effects of C++ template specialization on function overloading and overriding Apr 20, 2024 am 09:09 AM

C++ template specializations affect function overloading and rewriting: Function overloading: Specialized versions can provide different implementations of a specific type, thus affecting the functions the compiler chooses to call. Function overriding: The specialized version in the derived class will override the template function in the base class, affecting the behavior of the derived class object when calling the function.

See all articles