马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
没有人会喜欢和见异思迁的人交朋友,因为这种人太不安分,太不可靠,因此,你必须要强迫自己完成自己的目标,哪怕可能会很难受,也得坚持,毅力就是这么锻炼出来的。模板 <P>企业级PHP开辟,咱们需求思索:
[list:6ec4bae001]• 质量 (法式必需具有分歧性和不乱性)
• 功效 (法式必需知足付费用户的一切功效需求)
• 功能 (法式应当在一个可承受的严厉划定的工夫内处置用户恳求)
• 扩大性 (倘使硬件撑持,法式利用用户必需无数量级的提拔)
• 延续开展 (不克不及超越被希冀的开辟预算)
• 准时性 (法式必需在划定的工夫交付)
• 保护/撑持费用 ()
• 可用性
• ......
• 等等[/list:u:6ec4bae001]
冗长申明:
次要翻译http://www.smartphp.net/的SmartTemplate局部的内容,跟着熟悉的逐次加深,我将恰当调剂翻译的了局。
假如你有任何建议,请告知我,感谢!
为何保举他:
[list:6ec4bae001]
• 轻便
• 复杂
• 功效的确不错
[/list:u:6ec4bae001]
如今下载:
[list:6ec4bae001]
• smarttemplate_1_0_2.zip(内含演示法式)
• smarttemplate_extension_examples.zip(扩大演示)
[/list:u:6ec4bae001]
根基办法:
[list:6ec4bae001] • assign
• append
• output
• result
• use_cache
• debug[/list:u:6ec4bae001]
模板流程掌握:
[list:6ec4bae001] • if
• else
• elseif
• begin ... end(块布局)
[/list:u:6ec4bae001]
HonestQiao 答复于:2005-08-15 14:43:39 [color=darkblue:ba7ae02416][size=24:ba7ae02416]SmartTemplate 简介[/size:ba7ae02416][/color:ba7ae02416]
SmartTemplate是一个撑持大型WEB使用法式的模板引擎.
SmartTemplate有甚么特征?
通俗模板引擎任务体例: 你的PHP剧本指定一个HTML模板,指定静态内容并显示。模板剖析器利用指派的内容交换模板内一切的占位符,然后显示给用户. 这意味着,每次你要输入一些内容,法式都要花上很多多少工夫去停止字符串的处置和正则表达式的任务。
SmartTemplate 的任务体例相似模板编译,他把模板转换为可履行的PHP剧本,而且保留起来以备今后重用。当一个新的模板在第一次被利用时,The first time a new template is processed, 模板内一切的占位符被交换为复杂的可输入指定内容的PHP代码元素。据个例子,模板片段 [b:ba7ae02416]<H3>{TITLE}</H3>[/b:ba7ae02416],将被转换为 [b:ba7ae02416]<H3><?php echo $TITLE; ?></H3>[/b:ba7ae02416]. 假如你指定内容给准确的变量, 将不再需求停止模板剖析了. 法式要做得仅仅是本人包括并履行便今后的模板. 这凡是会戏剧性的削减模板引擎的运转工夫.
SmartTemplate 撑持:
[list:ba7ae02416] • 通俗变量交换 (字符串,等等)
• 反复的内容块 (嵌套数组/ BEGIN..END)
• 根基的逻辑掌握布局 (IF..ELSEIF..ELSE)
• 可定制的扩大模块 (输入过滤, 巨细写转换, 格局输入, 等等.)
• 模板编译 (HTML 模板被转换为可履行的PHP代码)
• 输入缓存 (重用输入页面从而提速你的法式)[/list:u:ba7ae02416]
让咱们用一些复杂的例子入手下手,告知你若何利用 SmartTemplate:
凡是的流程是先创立一个WEB页面,展现所需求的后果. 创立复杂的页面版式可使用一个网页编纂器,例如Dreamweaver或Homesite. 为了取得更加友爱的页面版式后果,可使用一个专业的设计东西,例如Photoshop、 Paintshop Pro或Gimp等等.
预览:
[code:1:ba7ae02416]Hello World![/code:1:ba7ae02416]
如今咱们来看看到达咱们希冀的页面版式的HTML源代码:
HTML-源代码 (hello_world.html):
[code:1:ba7ae02416]<HTML>
<H3>Hello World!</H3>
</HTML>[/code:1:ba7ae02416]
然后入手下手使人冲动的一步: 分别内容和设计. 咱们把HTML源代码当中的内容元素交换为模板占位符. 模板占位符被分派一个独一的称号而且利用一个独有的标签包括起来,如许咱们在随后的法式当中可以辨认他们. 题目 Hello World! 被交换为一个叫做TITLE 的占位符. 咱们是用大括弧来标志占位符, 似的咱们的模板引擎可以发明: {TITLE}. 最初HTML模板以下:
HTML-模板 (hello_world.tpl.html):
[code:1:ba7ae02416]<HTML>
<H3>{TITLE}</H3>
</HTML>[/code:1:ba7ae02416]
使内容整合到模板,咱们需求做以下任务:
[list:ba7ae02416]• 挪用 SmartTemplate 类
• 创立一个 SmartTemplate 剖析器 对象
• 告知 SmartTemplate 要利用的HTML模板
• 指定内容给联系关系的占位符
• 处置模板
• 输入了局[/list:u:ba7ae02416]
以下的PHP法式完成所需的任务:
hello_world.php:
[code:1:ba7ae02416]<?php
require_once "class.smarttemplate.php";
$page = new SmartTemplate("hello_world.tpl.html");
$page->assign('TITLE', 'Hello World!');
$page->output();
?>[/code:1:ba7ae02416]就这么复杂 C 咱们的 Hello World 例程已筹办运转了.
HonestQiao 答复于:2005-08-15 14:45:43 [color=darkblue:cf330659a8][size=24:cf330659a8]比Smarty要快上8倍![/size:cf330659a8][/color:cf330659a8]
SmartTemplate 出格优化以进步速度.虽然 SmartTemplate 撑持多种功效和函数, 然而在你的法式运转时代,仅仅很少一局部工夫用在模板处置上.
他将使得你利用起码开辟费用开辟PHP法式,同时具有闪电般的运转数度!
以下的基准测试,利用咱们尽人皆知得模板引擎作为对照,来测试他们得运转速度。
测试进程分离利用包括1、20、200个对象被利用得模板。
基准测试 I: (Smarty vs. SmartTemplate)
[list:cf330659a8]• Server: RedHat Linux, Apache 1.3.27, PHP 4.3.1
• Pentium III - 1300 MHz CPU, 512 MB RAM
• Apache 基准测试, 20 个并发恳求[/list:u:cf330659a8]
[img:cf330659a8]../uploadfile/200510/20051013111334944.gif[/img:cf330659a8]
基准测试 II: (Smarty vs. SmartTemplate)
[list:cf330659a8]• Server: RedHat Linux, Apache 1.3.27, PHP 4.3.1 + IonCube Accelerator
• Pentium III - 1300 MHz CPU, 512 MB RAM
• Apache基准测试, 20 个并发恳求[/list:u:cf330659a8]
[img:cf330659a8]../uploadfile/200510/20051013111336722.gif[/img:cf330659a8]
HonestQiao 答复于:2005-08-15 14:47:22 [color=darkblue:b51f16d69a][size=18:b51f16d69a]SmartTemplate 设置装备摆设[/size:b51f16d69a][/color:b51f16d69a]
[b:b51f16d69a]bool $reuse_code[/b:b51f16d69a]
设置是不是保留编译后的模板代码,以备重用
假如设置否false,SmartTemplate会在每次模板利用时都从头编译模板
[b:b51f16d69a]string $template_dir[/b:b51f16d69a]
模板文件目次,默许为以后目次
可以使用全局变量$_CONFIG['template_dir']设置
[b:b51f16d69a]string $temp_dir[/b:b51f16d69a]
模板编译保留目次,默许为/tmp/
可以使用全局变量$_CONFIG['smarttemplate_compiled']设置
[b:b51f16d69a]注重:确保PHP对该目次可写[/b:b51f16d69a]
[b:b51f16d69a]string $cache_dir[/b:b51f16d69a]
输入缓存目次,默许为/tmp/
可以使用全局变量$_CONFIG['smarttemplate_ cache']设置
[b:b51f16d69a]注重:确保PHP对该目次可写[/b:b51f16d69a]
[b:b51f16d69a]int $cache_lifetime[/b:b51f16d69a]
默许输入缓存周期
可以使用全局变量$_CONFIG[' cache_lifetime ']设置
HonestQiao 答复于:2005-08-15 14:53:28 [color=darkblue:b920254608][size=24:b920254608]根基办法
SmartTemplate::assign()[/size:b920254608][/color:b920254608]
void [b:b920254608]assign [/b:b920254608]( string PLACEHOLDER, mixed CONTENT )
or
void [b:b920254608]assign [/b:b920254608]( array CONTENT )
给模板占位符(PLACEHOLDER)或列表(CONTENT)赋值. 可使用散列数组或标量
[b:b920254608]例子1:标量赋值[/b:b920254608]
[code:1:b920254608]<?php
$template = new SmartTemplate('template.html');
$text = 'Sample Text';
$template->assign( 'TITLE', $text );
$template->output();
?>[/code:1:b920254608]
模板(template.html):
[code:1:b920254608]<html> {TITLE} </html>[/code:1:b920254608]
输入:
[code:1:b920254608]<html> Sample Text </html>[/code:1:b920254608]
[b:b920254608]例子2: 多个标量赋值[/b:b920254608]
[code:1:b920254608]<?php
$template = new SmartTemplate('user.html');
$template->assign( 'NAME', 'John Doe' );
$template->assign( 'GROUP', 'Admin' );
$template->assign( 'AGE', '42' );
$template->output();
?>[/code:1:b920254608]
模板(user.html):
[code:1:b920254608]Name: {NAME}
Group: {GROUP}
Age: {AGE}
[/code:1:b920254608]
输入:
[code:1:b920254608]Name: John Doe
Group: Admin
Age: 42[/code:1:b920254608]
[b:b920254608]例子3: 利用数组给多个标量赋值[/b:b920254608]
[code:1:b920254608]<?php
$user = array(
'NAME' => 'John Doe',
'GROUP' => 'Admin',
'AGE' => '42',
);
$template = new SmartTemplate('user.html');
$template->assign( $user );
$template->output();
?>[/code:1:b920254608]
模板(user.html):
[code:1:b920254608]Name: {NAME}
Group: {GROUP}
Age: {AGE}[/code:1:b920254608]
输入:
[code:1:b920254608]Name: John Doe
Group: Admin
Age: 42[/code:1:b920254608]
[b:b920254608]例子4: 定名空间[/b:b920254608]
[code:1:b920254608]<?php
$admin = array(
'NAME' => 'John Doe',
'AGE' => '42',
);
$guest = array(
'NAME' => 'Roger Rabbit',
'AGE' => '16',
);
$template = new SmartTemplate('users.html');
$template->assign( 'admin', $admin );
$template->assign( 'guest', $guest );
$template->output();
?>[/code:1:b920254608]
模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
[code:1:b920254608]Admin Name: {admin.NAME}
Admin Age: {admin.AGE}
Guest Name: {guest.NAME}
Guest Age: {guest.AGE}[/code:1:b920254608]
输入:
[code:1:b920254608]Admin Name: John Doe
Admin Age: 42
Guest Name: Roger Rabbit
Guest Age: 16[/code:1:b920254608]
[b:b920254608]例子5: 利用数组定名空间[/b:b920254608]
[code:1:b920254608]<?php
$users = array(
'admin' => array(
'NAME' => 'John Doe',
'AGE' => '42',
),
'guest' => array(
'NAME' => 'Roger Rabbit',
'AGE' => '16',
),
);
$template = new SmartTemplate('users.html');
$template->assign( $users );
$template->output();
?>[/code:1:b920254608]
模板(user.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
[code:1:b920254608]Admin Name: {admin.NAME}
Admin Age: {admin.AGE}
Guest Name: {guest.NAME}
Guest Age: {guest.AGE}[/code:1:b920254608]
输入:
[code:1:b920254608]Admin Name: John Doe
Admin Age: 42
Guest Name: Roger Rabbit
Guest Age: 16[/code:1:b920254608]
[b:b920254608]例子6: 定名空间, 3个局部[/b:b920254608]
[code:1:b920254608]<?php
$template = new SmartTemplate('template.html');
$content['world']['europe']['germany'] = 'DE';
$template->assign( 'top_level_domain', $content );
$template->output();
?>[/code:1:b920254608]
模板(template.html): 占位符(PLACEHOLDER)对应数组,“.”对应数组“[]”
[code:1:b920254608]<html> German TLD: {top_level_domain.world.europe.germany} </html>[/code:1:b920254608]
输入:
[code:1:b920254608]<html> German TLD: DE </html>[/code:1:b920254608]
[b:b920254608]例子7: 列表赋值[/b:b920254608]
[code:1:b920254608]<?php
$links = array(
array(
'TITLE' => 'PHP',
'URL' => 'http://www.php.net/',
),
array(
'TITLE' => 'Apache',
'URL' => 'http://www.php.net/',
),
array(
'TITLE' => 'MySQL',
'URL' => 'http://www.mysql.com/',
),
);
$template = new SmartTemplate('links.html');
$template->assign( 'links', $links );
$template->output();
?>[/code:1:b920254608]
模板(links.html): 布局称号lnks对应数组
[code:1:b920254608]<html>
<h3> Sample Links </h3>
<!-- BEGIN links -->
<a href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>[/code:1:b920254608]
输入:
[code:1:b920254608]<html>
<h3> Sample Links </h3>
<a href="http://www.php.net/"> PHP </a>
<a href="http://www.apache.org/"> Apache </a>
<a href="http://www.mysql.com/"> MySQL </a>
</html>[/code:1:b920254608]
[b:b920254608]Example 8: 利用数组于多个定名空间[/b:b920254608]
[code:1:b920254608]<?php
$title = 'Sample Links'; // Page Title
$target = '_blank'; // The Same Target for all links
$links = array(
array(
'TITLE' => 'PHP',
'URL' => 'http://www.php.net/',
),
array(
'TITLE' => 'Apache',
'URL' => 'http://www.php.net/',
),
array(
'TITLE' => 'MySQL',
'URL' => 'http://www.mysql.com/',
),
);
$template = new SmartTemplate('links.html');
$template->assign( 'TITLE', $title );
$template->assign( 'TARGET', $target );
$template->assign( 'links', $links );
$template->output();
?>[/code:1:b920254608]
注重:
TITLE 与 links..TITLE 利用分歧的定名空间!
TARGET 不是 links 数组的成员. 假如利用在 BEGIN..END 块以内, 他必需被援用为 {parent.TARGET} 或 {top.TARGET}.
其他能够的用法:
{top.TITLE}, {parent.parent.PAGE_ID}, {top.users.ADMIN}, 等等..
模板(links.html):
[code:1:b920254608]<html>
<h3> {TITLE} </h3>
<!-- BEGIN links -->
<a target='{parent.TARGET}' href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>[/code:1:b920254608]
输入:
[code:1:b920254608]<html>
<h3> Sample Links </h3>
<a target="_blank" href="http://www.php.net/"> PHP </a>
<a target="_blank" href="http://www.apache.org/"> Apache </a>
<a target="_blank" href="http://www.mysql.com/"> MySQL </a>
</html>[/code:1:b920254608]
北京野狼 答复于:2005-08-15 14:53:57 有价值
HonestQiao 答复于:2005-08-15 15:01:29 [color=darkblue:9f3a29cbdd][size=18:9f3a29cbdd]SmartTemplate::append()[/size:9f3a29cbdd][/color:9f3a29cbdd]
void [b:9f3a29cbdd]append [/b:9f3a29cbdd]( string PLACEHOLDER, mixed CONTENT )
追加内容给模板占位符. 可使用散列数组或标量.
例子1 (列表):
[code:1:9f3a29cbdd]<?php
$page = new SmartTemplate('links.html');
$page->append('links' => array(
'TITLE' => 'PHP',
'URL' => 'http://www.php.net/'
));
$page->append('links' => array(
'TITLE' => 'Apache',
'URL' => 'http://www.apache.org/'
));
$page->append('links' => array(
'TITLE' => 'MySQL',
'URL' => 'http://www.mysql.com/'
));
$page->output();
?>[/code:1:9f3a29cbdd]
模板(links.html): 列表追加为行
[code:1:9f3a29cbdd]<html>
<h3> Sample Links </h3>
<!-- BEGIN links -->
<a href="{URL}"> {TITLE} </a>
<!-- END links -->
</html>[/code:1:9f3a29cbdd]
输入:
[code:1:9f3a29cbdd]<html>
<h3> Sample Links </h3>
<a href="http://www.php.net/"> PHP </a>
<a href="http://www.apache.org/"> Apache </a>
<a href="http://www.mysql.com/"> MySQL </a>
</html>
[/code:1:9f3a29cbdd]
[b:9f3a29cbdd]例子2 (标量):[/b:9f3a29cbdd]
[code:1:9f3a29cbdd]<?php
$page = new SmartTemplate('template.html');
$page->append('TITLE' => 'Hello ');
$page->append('TITLE' => 'World ');
$page->append('TITLE' => '!');
$page->output();
?>[/code:1:9f3a29cbdd]
模板(template.html): 标量为内容的追加
[code:1:9f3a29cbdd]<html> {TITLE} </html>[/code:1:9f3a29cbdd]
输入:
[code:1:9f3a29cbdd]<html> Hello World ! </html>[/code:1:9f3a29cbdd]
imbiss 答复于:2005-08-15 16:24:58 成心思。"他把html模板转换为php剧本以取得疾速的运转速度"
成绩
是不是就是说,他需求往硬盘里写器材?权限若何处置?
等候测验考试一次。
titan3 答复于:2005-08-15 16:40:09 [quote:d199ced60f="imbiss"]成心思。"他把html模板转换为php剧本以取得疾速的运转速度"
成绩
是不是就是说,他需求往硬盘里写器材?权限若何处置?
等候测验考试一次。[/quote:d199ced60f]
你说的东东,对应这个选项,转换后的php剧本会保留在这个目次下:
string $temp_dir
模板编译保留目次,默许为/tmp/
可以使用全局变量$_CONFIG['smarttemplate_compiled']设置
[b:d199ced60f]注重:确保PHP对该目次可写 [/b:d199ced60f]
HonestQiao 答复于:2005-08-15 17:03:24 [color=darkblue:9ca539ec2f][size=18:9ca539ec2f]SmartTemplate::output()[/size:9ca539ec2f][/color:9ca539ec2f]
void [b:9ca539ec2f]output [/b:9ca539ec2f]()
解析模板并输入了局.
例子:
[code:1:9ca539ec2f]<?php
$page = new SmartTemplate('template.html');
$page->assign('TITLE' => 'Sample Title');
$page->output();
?>[/code:1:9ca539ec2f]
HonestQiao 答复于:2005-08-15 17:13:42 [color=darkblue:05ce43da7f][size=18:05ce43da7f]SmartTemplate::result()[/size:05ce43da7f][/color:05ce43da7f]
string [b:05ce43da7f]result [/b:05ce43da7f]()
解析模板并前往了局.
例子:
[code:1:05ce43da7f]<?php
$page = new SmartTemplate('template.html');
$page->assign('TITLE' => 'Sample Title');
$output = $page->result();
echo 'Output page: ' . $output;
?>[/code:1:05ce43da7f]
HonestQiao 答复于:2005-08-15 17:22:53 [color=darkblue:be07f8e2f7][size=18:be07f8e2f7]SmartTemplate::use_cache[/size:be07f8e2f7][/color:be07f8e2f7]
void [b:be07f8e2f7]use_cache [/b:be07f8e2f7]( [mixed key] )
激活内建的输入缓存. 判别以后履行的剧本 (判别根据$_SERVER[REQUEST URI]) 是不是在肯定的工夫内履行过. 假如履行过, use_cache 将前往缓存的页面给阅读器而且中断运转.
假如没有一个无效的输入句柄可使用,use_cache将激活PHP输入缓存,而且前往数据到履行它的剧本. 上面的剧本履行时, use_cache 捕捉一切输入到阅读器的内容,并保留到缓存目次. 缓存的每个文件称号是独一的,他依据以后履行的剧本文件称号,GET参数(REQUEST_URI)和可选得参数来自东设定.
假如剧本有一些主要的任务,例如纪录日记等,那末应当在use_cache 之前挪用你的代码.
例子:
[code:1:be07f8e2f7]<?php
$page = SmartTemplate('template.html');
$page->cache_dir = '/tmp/'; // Where to store cache files
$page->cache_lifetime = 120; // Keep cache for 120 seconds
$page->use_cache(); // Activate ouput cache
//
// Assemble Page Content
//
$page->output();
?>[/code:1:be07f8e2f7]
HonestQiao 答复于:2005-08-15 17:48:34 [color=darkblue:94580b7a4a][size=18:94580b7a4a]SmartTemplate::debug()[/size:94580b7a4a][/color:94580b7a4a]
void [b:94580b7a4a]debug [/b:94580b7a4a]()
激活内建调试器. Debug 可以取代或内嵌在 output . 他列出了指定的变量及其内容的具体列表, 编译后的模板和模板的本来布局.
Debug 关于肯定和扫除模板中的毛病十分有效.
HonestQiao 答复于:2005-08-15 17:49:51 [color=darkblue:a8dfa966b1][size=18:a8dfa966b1]流程掌握
SmartPHP 例子: if[/size:a8dfa966b1][/color:a8dfa966b1]
[b:a8dfa966b1]if ... endif 掌握有前提的输入模板的局部.[/b:a8dfa966b1]
语法以下:
变量不为空
[code:1:a8dfa966b1]<!-- IF var --> var 不为空! <!-- ENDIF var -->[/code:1:a8dfa966b1]
变量值判别
[code:1:a8dfa966b1]<!-- IF name=="HonestQiao" --> Your name is HonestQiao! <!-- ENDIF name -->[/code:1:a8dfa966b1]
变量值否认判别
[code:1:a8dfa966b1]<!-- IF name!=" HonestQiao " --> Your name is not HonestQiao! <!-- ENDIF name --> [/code:1:a8dfa966b1]
(var 在 ENDIF 以后是可选的,然而最好加上)
if.php: ( Download)
[code:1:a8dfa966b1]<?php
require_once "class.smarttemplate.php";
$page = new SmartTemplate("if.html");
$page->assign( 'username', 'HonestQiao' );
$page->assign( 'usergroup', 'ADMIN' );
$page->assign( 'picture', '' );
$page->output();
?> [/code:1:a8dfa966b1]
if.php利用的模板文件以下:
if.html: ( Download)
[code:1:a8dfa966b1]<!-- IF username --> <H3> Welcome, {username} </H3> <!-- ENDIF -->
<!-- IF picture --> <img src="{picture}"> <!-- ENDIF picture -->
<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> ADMIN Login </a><br>
<!-- ENDIF usergroup -->[/code:1:a8dfa966b1]
if.php履行的后果以下:
输入: ( 检查)
[code:1:a8dfa966b1]<H3> Welcome, HonestQiao </H3>
<a href="admin.php"> ADMIN Login </a><br>[/code:1:a8dfa966b1]
HonestQiao 答复于:2005-08-15 17:51:01 [color=darkblue:3a4c2600a8][size=18:3a4c2600a8]SmartPHP 例子: else[/size:3a4c2600a8][/color:3a4c2600a8]
[b:3a4c2600a8]else [/b:3a4c2600a8]掌握作为 if 掌握的扩大,当if 判别了局为 FALSE 来输入模板的一局部.
else.php: ( Download)
[code:1:3a4c2600a8]<?php
require_once "class.smarttemplate.php";
$page = new SmartTemplate("else.html");
$page->assign( 'username', 'John Doe' );
$page->assign( 'usergroup', 'ADMIN' );
$page->assign( 'picture', '' );
$page->output();
?> [/code:1:3a4c2600a8]
else.php利用的模板文件以下:
else.html: ( Download)
[code:1:3a4c2600a8]<!-- IF username -->
<H3> Welcome, {username} </H3>
<!-- ENDIF -->
<!-- IF picture -->
<img src="{picture}">
<!-- ELSE -->
Picture not available! <br>
<!-- ENDIF picture -->
<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> ADMIN Login </a><br>
<!-- ELSE -->
You are in guest mode!
<!-- ENDIF usergroup -->[/code:1:3a4c2600a8]
else.php履行的后果以下:
输入: ( 检查)
[code:1:3a4c2600a8]<H3> Welcome, John Doe </H3>
Picture not available! <br>
<a href="admin.php"> ADMIN Login </a><br>[/code:1:3a4c2600a8]
HonestQiao 答复于:2005-08-15 17:51:45 [color=darkblue:4616b33ba0][size=18:4616b33ba0]SmartPHP 例子: elseif[/size:4616b33ba0][/color:4616b33ba0]
[b:4616b33ba0]elseif [/b:4616b33ba0]掌握是 else 与 if 的联合.
elseif.php: ( 下载)
[code:1:4616b33ba0]<?php
require_once "class.smarttemplate.php";
$page = new SmartTemplate("elseif.html");
$page->assign( 'usergroup', 'INTERNAL' );
$page->output();
?> [/code:1:4616b33ba0]
elseif.php利用的模板文件以下:
elseif.html: ( Download)
[code:1:4616b33ba0]<!-- IF usergroup="ADMIN" -->
<a href="admin.php"> Admin Staff Login </a><br>
<!-- ELSEIF usergroup="SUPPORT" -->
<a href="support.php"> Support Staff Login </a><br>
<!-- ELSEIF usergroup -->
<a href="other.php"> Standard Login </a><br>
<!-- ELSE -->
You don't even have a usergroup!
<!-- ENDIF -->[/code:1:4616b33ba0]
elseif.php履行后果以下:
输入: ( 检查)
[code:1:4616b33ba0]<a href="other.php"> Standard Login </a><br>[/code:1:4616b33ba0]
HonestQiao 答复于:2005-08-15 17:53:47 未完待续
Unicorn_angel 答复于:2005-08-16 08:17:57 HonestQiao兄是不是可以讲一下SmartTemplate的装置,
我装置今后呈现/tmp/设置装备摆设成绩,不知如何处理,
情况,win+apache2+php4.3
再引见一下linux情况下的装置
Unicorn_angel 答复于:2005-08-16 08:52:59 成绩处理了,呵
HonestQiao 答复于:2005-08-16 09:06:04 [quote:4d489182c7="Unicorn_angel"]成绩处理了,呵[/quote:4d489182c7]
其实良多时分,多花一分钟工夫去看看申明,或许就会节俭非常钟的探索。
wing-qiang 答复于:2005-08-16 15:46:03 好象很不错似的哦!要尝尝!
Unicorn_angel 答复于:2005-08-16 16:51:36 就教HonestQiao兄,
关于SmartTemplate模板嵌套,教程上是如许写的
有两个模板文件:
1、--table.tpl--
<html>
<head>
</head>
<body>
<p align="center"><strong><font color="#FF0000" size="5">{TITLE}</font></strong></p>
<p align="center">--------------------------------------------------------------
</p>
<Table width="75%" border="1" align="center">
{CONTENT}
</table>
</body>
</html>
----------------------------
2、--table_content.tpl--
<tr>
<td>{TD1}</td>
<td>{TD2}</td>
</tr>
----------------------------
要完成的目标是将 table_content.tpl 中的模板内容嵌入到 table.tpl 模板中构成一个完全的表格,详细完成的法式以下:
--start table.php --------------------
<?
require_once "./class/class.smarttemplate.php";
//对表格行列数据符值
$info = new SmartTemplate( "./templates/table_content.tpl" );
$info->assign('TD1','TD1');
$info->assign('TD2','TD2');
//$info->output();
$result=$info->result();
//对表格全体停止赋值
$index = new SmartTemplate( "./templates/table.tpl" );
$index->assign ('TITLE','这是一个表格模板实验法式');
$index->assign('CONTENT',$result);
$index->output();
?>
我的测试,
<?php
require "./admin/class/class.smarttemplate.php";
$t = new SmartTemplate("link.htm");
$t->assign("link",$link);
$link_data = $t->result();
$time = date("Y-m-d g:i A",time());
$index = new SmartTemplate("index.htm");
$index->assign("time",$time);
$index->output();
?>
为何index.htm中{time}无前往值呀,
Yarco 答复于:2005-08-16 18:44:32 一向有个成绩想问...
为何模板手艺不做成php_extension呢?
unixdotnet 答复于:2005-08-16 19:43:55 不做成尺度的扩大库是由于php本人自己就是一个模版,为了速度、天真应当用php本人作为模版,smarty也许一年半前就成熟使用,smarttemplate也许一年前也使用过,它们的弱点很分明――慢。假如不在特别情形下例如由客户本人编纂模版文件(CMS)的话而,体系是crm、ehr、oa等那就应当回php自己。
HonestQiao 答复于:2005-08-16 21:08:39 [quote:8fe8a7f3cc="Unicorn_angel"]就教HonestQiao兄,
关于SmartTemplate模板嵌套,教程上是如许写的
有两个模板文件:
1、--table.tpl--
<html>
<head>
</head>
<body>
<p align="center"><strong&..........[/quote:8fe8a7f3cc]
呵呵,不晓得你在甚么中央看的如许子的教程?
并且你如许子的嵌套,实践上关于模板来讲,十分欠好。
由于你把表格的tr提掏出来,这个可是很欠好设计的。
并且,你没有告知咱们,你的{time}是怎样在页面占位的,实践上,你可以直接:
<html>
{tiem}
</html>
尺度的测试,应当为:
1、--table.tpl--
<html>
<head>
</head>
<body>
<p align="center"><strong><font color="#FF0000" size="5">{TITLE}</font></strong></p>
<p align="center">--------------------------------------------------------------
</p>
<Table width="75%" border="1" align="center">
<!-- BEGIN CONTENT -->
<tr>
<td>{TD1}</td>
<td>{TD2}</td>
</tr>
<!-- END CONTENT -->
</table>
</body>
</html>
--start table.php --------------------
<?
require_once "./class/class.smarttemplate.php";
//对表格行列数据符值
$result[]=('TD1'=>'TD1','TD2'=>'TD2');
//对表格全体停止赋值
$index = new SmartTemplate( "./templates/table.tpl" );
$index->assign ('TITLE','这是一个表格模板实验法式');
$index->assign('CONTENT',$result);
$index->output();
?>
Unicorn_angel 答复于:2005-08-17 09:55:50 成绩处理,呵,看来今后看在网站找材料先要验证一下正确性了,
入手下手喜好上SmartTemplate了,
HonestQiao 答复于:2005-08-17 18:35:04 [quote:0ea176db3d="Unicorn_angel"]成绩处理,呵,看来今后看在网站找材料先要验证一下正确性了,
入手下手喜好上SmartTemplate了,[/quote:0ea176db3d]
呵呵,前面还有一局部,这几天不忙的时分持续帖下去。
这个器材轻便简约,不错
HonestQiao 答复于:2005-08-18 11:48:17 [color=darkblue:057f14a0b1][size=18:057f14a0b1]SmartPHP 例子: begin end[/size:057f14a0b1][/color:057f14a0b1]
[b:057f14a0b1]begin ... end[/b:057f14a0b1] 布局供应了一种办法,利用数字索引数组来输入反复的类似的内容。数字索引数组的每个元素,应当是一个散列数组,<!-- begin --> and <!-- end --> 标签相似一个小的模板,他剖析内嵌的模板片段,并利用这个散列数组来生成内容。
每一个散列数组可使用以下的两个扩大参数:
ROWCNT :以后元素的在父数组当中的实践地位. (0,1,2,3,...n)
ROWBIT : 暗示ROWCNT的二进制字节的最初一名,也就是奇偶值. (0,1,0,1,0,1,...)
begin ... end 块可以很轻易的嵌套利用,他们会被主动的递归剖析.
begin_end.php: ( Download)
[code:1:057f14a0b1]<?php
require_once "class.smarttemplate.php";
$page = new SmartTemplate("begin_end.html");
$users = array(
array( 'NAME' => 'John Doe', 'GROUP' => 'ADMIN' ),
array( 'NAME' => 'Jack Doe', 'GROUP' => 'SUPPORT' ),
array( 'NAME' => 'James Doe', 'GROUP' => 'GUEST' ),
array( 'NAME' => 'Jane Doe', 'GROUP' => 'GUEST' ),
);
$page->assign( 'users', $users );
$page->output();
?> [/code:1:057f14a0b1]
begin_end.php利用的模板以下:
begin_end.html: ( Download)
[code:1:057f14a0b1]<style type="text/CSS">
.col0 { background-color: #D0D0D0; }
.col1 { background-color: #F0F0F0; }
</style>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<th> No </th>
<th> Username </th>
<th> Usergroup </th>
</tr>
<!-- BEGIN users -->
<tr class="col{ROWBIT}">
<td> {ROWCNT} </td>
<td> {NAME} </td>
<td> {GROUP} </td>
</tr>
<!-- END users -->
</table>[/code:1:057f14a0b1]
begin_end.php的运转后果以下:
输入: ( 检查)
[code:1:057f14a0b1]<style type="text/css">
.col0 { background-color: #D0D0D0; }
.col1 { background-color: #F0F0F0; }
</style>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
<th> No </th>
<th> Username </th>
<th> Usergroup </th>
</tr>
<tr class="col0">
<td> 0 </td>
<td> John Doe </td>
<td> ADMIN </td>
</tr>
<tr class="col1">
<td> 1 </td>
<td> Jack Doe </td>
<td> SUPPORT </td>
</tr>
<tr class="col0">
<td> 2 </td>
<td> James Doe </td>
<td> GUEST </td>
</tr>
<tr class="col1">
<td> 3 </td>
<td> Jane Doe </td>
<td> GUEST </td>
</tr>
</table>[/code:1:057f14a0b1]
Yarco 答复于:2005-08-19 11:37:57 [quote:b730ee57c9="unixdotnet"]不做成尺度的扩大库是由于php本人自己就是一个模版,为了速度、天真应当用php本人作为模版,smarty也许一年半前就成熟使用,smarttemplate也许一年前也使用过,它们的弱点很分明――慢。假如不在特别情形下例如由客�.........[/quote:b730ee57c9]
固然,我分明你的意思.但就象c也能够利用面向对象的手艺一样.
究竟用php写模版一定不如smarty便利.这也是模板手艺发生的缘由.
楼主的这个smarttemplate不是也把模版转化成php模板进步速度吗?
换个角度来看,模版手艺更象是一种转换东西.
而假设有php扩大来主动供应这类转换不是更好吗?
HonestQiao 答复于:2005-08-21 13:11:47 一个复杂的演示,人人可以看看,由于贸易性质开辟,所以临时方便公然源代码,等二次收拾整顿以后可以发布:
http://www.moment.com.cn/album.php?AlbumAction=Menu
方才用SmartTemplate做了一个小器材,利用FTP直接上传图图库,然后在线阅读:
http://www.moment.com.cn/templates/default/album/Menu.htm
菜单模板
http://www.moment.com.cn/templates/default/album/Album.htm
相册分页模板
http://www.moment.com.cn/templates/default/album/List.htm
图片列表模板
没有丑化的,便于教授教养。
List局部代码
[code:1:e3b71d60ec]
......
if($AlbumAction == "List") {
$LIST = array();
for($i=0;$i<count($Album_List)/$Album_Td;$i++)
{
for($j=0;$j<$Album_Td;$j++)
{
if(empty($Album_List[$i*$Album_Td+$j])) {
}
else {
$LIST[$i]["LISTTD"][$j]["LINK"] = "$Album_Url/$AlbumDir/$AlbumPage/{$Album_List[$i*$Album_Td+$j]}";
$LIST[$i]["LISTTD"][$j]["NAME"] = "[{$Album_List[$i*$Album_Td+$j]}]";
$LIST[$i]["LISTTD"][$j]["OBJID"] = $i*$Album_Td+$j;
}
}
}
$tpl->assign("LIST",$LIST);
$tpl->output();
exit;
}
.......
[/code:1:e3b71d60ec]
nbxmedia 答复于:2005-08-22 14:25:21 这个......用过,还行,不外比smarty功效差一些......
HonestQiao 答复于:2005-08-22 14:51:08 [quote:ef0706586f="nbxmedia"]这个......用过,还行,不外比smarty功效差一些......[/quote:ef0706586f]
呵呵,假如你的女友玲珑小巧,固然不会有太多的赘肉的啊。
mydevc 答复于:2005-08-22 15:20:13 功效上,总会有变通的办法来处理的,我就用这个,感到还可以的
nbxmedia 答复于:2005-08-22 15:20:17 说赘肉就有些过了吧..........
这玩意有些年久掉修了,要拿来用一定要做大批的修改,思索下smartylite和savant吧
http://www.paullockaby.com/projects/smarty-light/
http://www.phpsavant.com/yawiki/
HonestQiao 答复于:2005-08-22 15:46:37 [quote:f9dff04c9a="nbxmedia"]说赘肉就有些过了吧..........
这玩意有些年久掉修了,要拿来用一定要做大批的修改,思索下smartylite和savant吧
http://www.paullockaby.com/projects/smarty-light/
http://www.phpsavant.com/yawiki/[/quote:f9dff04c9a]
呵呵,你说的用过,不外团体有一个意见,以下都是三者最根基的例子:
既然是为MVC而来得,那末把php的变量$体例,更切实的来讲,用<>,引入到模板文件,是很不明智的;
仅仅来看看模板:
savant还没有到达这个条理,仿佛,由于:
[code:1:f9dff04c9a]
<?php echo $this->variable1 ?>
[/code:1:f9dff04c9a]
而smartylite则:
[code:1:f9dff04c9a]
<% $lala %>
[/code:1:f9dff04c9a]
咱们再看看SmartTemplate:
[code:1:f9dff04c9a]
<h3>{TITLE}</h3>
[/code:1:f9dff04c9a]
不言而喻,哪个更合适作为模板.
固然,我用模板的目标,是为了美工和页面可以更好的承当任务.
从法式的角度来讲,我也能够直接看丑化的页面去肯定我的变量,而不是看HTML源代码来确认变量,哪个更便当那?
hongweig 答复于:2005-08-22 15:54:47 [quote:7c9e48eb76]
咱们再看看SmartTemplate:
代码:
<h3>{TITLE}</h3>
[/quote:7c9e48eb76]
这类说法不地道吧。
phplib template也是这么写的啊。
我都不晓得有甚么先辈性啊。
hongweig 答复于:2005-08-22 15:55:38 [quote:afdd6e5276="HonestQiao"]
呵呵,假如你的女友玲珑小巧,固然不会有太多的赘肉的啊。[/quote:afdd6e5276]
晕,这是甚么话。
HonestQiao 答复于:2005-08-22 15:59:53 [quote:1f29b8ebaa="hongweig"]
这类说法不地道吧。
phplib template也是这么写的啊。
我都不晓得有甚么先辈性啊。[/quote:1f29b8ebaa]
不是是不是有先辈性.
假如你是处在一个分工协作而不是单打独斗的情况,你可以实践问问你的页面制造人员,她更喜好哪个作为模板的体例.
利用<>包括的体例,她没举措停止实践后果的预览的.
固然,假如仅仅是给PHP开辟人员本人利用,那就不克不及这么以为了.
nbxmedia 答复于:2005-08-22 16:00:48 [quote:026e8f37cd="HonestQiao"]
不言而喻,哪个更合适作为模板.
固然,我用模板的目标,是为了美工和页面可以更好的承当任务.
从法式的角度来讲,我也能够直接看丑化的页面去肯定我的变量,而不是看HTML源代码来确认变量,哪个更便当那?[/quote:026e8f37cd]
美工的成绩,在实践情形下是大括号更费事,为什么?斑竹用过dreamweaverMX/2004没有?要晓得<??>和<%%>是原生的php/asp tag,假如美工用dw如许的所见即所得东西,反而是大括号{}更轻易损坏版面设计,假如您说那样的美工是不及格,那我发明80%以上的美工都是低于60分了,找一个懂smarty的美工不轻易啊
并且我感觉一个标签并非评判这个engine是不是优异的尺度
hongweig 答复于:2005-08-22 16:01:52 呵呵。
就只是由于一个$的成绩?
呵呵。
太委曲。
HonestQiao 答复于:2005-08-22 16:03:17 [quote:f8cd3cb2e2="nbxmedia"]
美工的成绩,在实践情形下是大括号更费事,为什么?斑竹用过dreamweaverMX/2004没有?要晓得<??>和<%%>是原生的php/asp tag,假如美工用dw如许的所见即所得东西,反而是大括号{}更轻易损坏版面设计,假如您?.........[/quote:f8cd3cb2e2]
呵呵,看来人人的定见都良多的.
一入手下手,我并没有说哪个更好,只是团体意见的一个方面的罢了.
利用<>的形式,不晓得你是若何在设计进程停止预览的,相似上面:
[b:f8cd3cb2e2][color=red:f8cd3cb2e2][size=18:f8cd3cb2e2]{段落题目}[/size:f8cd3cb2e2][/color:f8cd3cb2e2][/b:f8cd3cb2e2]
吃冰淇淋和鲜澄多(不要眼红,咱们就是这么闭会的)开部分会议去了,回来再看.
hongweig 答复于:2005-08-22 16:10:07 hi.
版主,我想说两句,清不要见责:
你说的这个东东。我方才去看了一下,我觉的版主不是太地道啊。
这个器材的功效先不要去说,
如今已是2005年了,download页面的user comments仍是2003的。
是否是这个项目已没有人保护了,我感到做为版主如许是不地道的。
要末你感觉它有可取的地方就把你的经历那出来,人人一同分享一下。
之是如许贴出来,还打了一个大大的题目,对照轻易误导人啊。
nbxmedia 答复于:2005-08-22 16:12:10 假如网站只要一个{TITTLE}那我也不说事了,然而一旦器材多的时分在dwmx下就不太行了,出格是表格和section,foreach使用的时分,标签100%要被{var}之类的长长字符串给损坏,假如是<??>和<%%>,反倒只要一个很小的icon,美工大可宁神的排板,并且dw默许设置是相对不会改动php/asp tag里的内容,然而{}就很难说了........smarty撑持自界说标签,应当说长短常贤明的举动.
PS:我对照喜好一致的绿茶,不外仍是更喜好咖啡一些.......
HonestQiao 答复于:2005-08-22 17:57:55 [quote:0225ec9b92="hongweig"]hi.
版主,我想说两句,清不要见责:
你说的这个东东。我方才去看了一下,我觉的版主不是太地道啊。
这个器材的功效先不要去说,
如今已是2005年了,download页面的user comments仍是2003的。
是否是这个项..........[/quote:0225ec9b92]
就我团体而言,我以为,没有效的器材,我是不会给人人保举的.
[quote:0225ec9b92="nbxmedia"]假如网站只要一个{TITTLE}那我也不说事了,然而一旦器材多的时分在dwmx下就不太行了,出格是表格和section,foreach使用的时分,标签100%要被{var}之类的长长字符串给损坏,假如是<??>和<%%>,反倒只要一个很?.........[/quote:0225ec9b92]
没有查询拜访,没有讲话权;就算要讲话,也不克不及平空意想.
[code:1:0225ec9b92]
<HTML>
<TABLE>
<!-- BEGIN row -->
<!-- 这个标签暗示表格轮回的肇端,和DW正文不异 -->
<TR>
<TD>{TITLE} </TD>
</TR>
<!-- END row -->
<!-- 这个标签暗示表格轮回的停止,和DW正文不异 -->
</TABLE>
</HTML>
[/code:1:0225ec9b92]
你需求预览后果的,你会看到,你不需求预览后果的,它只是DW的正文罢了.
只要被显示的内容,才利用{}来标志.
而掌握的局部,采取<!-- 掌握布局 -->来设置,相对不会损坏版面的设计的.
不晓得,你是若何猜想,他会依照你所想的停止损坏的.
不晓得正文是不是会损坏排版.
别的声明一下:
1,本帖引见SmartTemplate,在本帖当中,将不成防止的在概念上更偏向她
2,可以争鸣,然而不成以争持
nbxmedia 答复于:2005-08-22 18:09:10 查询拜访?鄙人其实没有精神和资金对宽大美工专业人士做如斯有深度的<smarttemplate美工反应查询拜访呈报>,只是偶然和美工吵过一下罢了?
smart我用过,并且我立誓,NND我改了最少4处中央.
归正我那些美工同事看到了那些大括号就说是法式,你说怎样办,那我还不如给它看图标呢.感到说templatesys有益美工,这个是不成能的,由于他们用的是dw,而不是文本编纂东西,却是对开辟者更有益而已.除非你把变量也酿成正文符,让其不成见
HonestQiao 答复于:2005-08-22 18:12:08 [quote:83d689c2cf="nbxmedia"]查询拜访?鄙人其实没有精神和资金对宽大美工专业人士做如斯有深度的<smarttemplate美工反应查询拜访呈报>,只是偶然和美工吵过一下罢了?
smart我用过,并且我立誓,NND我改了最少4处中央.
归正我那些美工同事看到了那..........[/quote:83d689c2cf]
看来分工纷歧样,欠好类比了.
咱们这里,美工出后果图并复杂朋分,然后页面制造成模板.
gydoesit 答复于:2005-08-23 10:58:14 如楼上所说,这玩意最初一次更新已一两年前的事了.是否是太掉队了呀.
却是smarty还在不休更新哩.
HonestQiao 答复于:2005-08-23 12:17:02 [quote:01b52d508b="gydoesit"]如楼上所说,这玩意最初一次更新已一两年前的事了.是否是太掉队了呀.
却是smarty还在不休更新哩.[/quote:01b52d508b]
好的器材,有些会余救弥新.
实践上,我们国际写PHP的,直接echo的人,仍是良多良多的哦.
nbxmedia 答复于:2005-08-23 13:44:25 不更新的缘由是由于maintainer去苏黎世为SAP打工了,并且是属于24x7的疾速呼应的tech 把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。 |