PHP 板


LINE

看板 PHP  RSS
各位版友大家晚安。 小弟呢!长久以来一直接到很多学生的专题疑难。 他们常常都丢程式码给我看。 但我每次看到都很吐血。 因为......html和php混在一起实在是太难分难解了。 在众多的技术都讨论了MVC的架构理论。 小弟现在也算是codeigniter的重度患者。 但问题在於,很多时候,又不能马上叫那些学生立刻去学smarty样版引擎。 或是立刻上手像是zend framework、cakephp、symfony、codeigniter这些东西。 然後大家就陷入了会写物件的用framework很高兴,不会写的就纯写肉肉长的php 逐步的虐待自己又无法很顺利的切割view和程式。 昨天又是一个专题发问过来,我看了一个不大的50行的程式。 其中echo就占了快要一半。 然而半年以前,曾经写过一个样版载入架构,但是他有几个大缺点。 载入变数定义方式不佳、采用变数置换内容、无法挂入php程式码……这些问题。 自从用了ci之後,我就不断的一直思考关於view的问题。 有没有什麽是可以做纯view载入样板的方法? ci的动作方式一直让我拥入想法,却一直没有机会实现他。 但是今天却让我有机会去实现这麽一个东西。 当然可能有很多高手有写出类似或根本就是的东西。 不管怎麽说,这样一个样板载入器总是能解决很多想把程式和view做最基础切割的 设计人员,一个不错的载入器程式。 底下将会公开这个程式的源码,当然因为是第一版本的东西。 所以自然而然有我不知道可能的bug也不一定。 或者各位觉得这样的东西应该要加上怎麽样的功能或是怎麽样的限制也可以提出讨论。 能让他的功能更加完整也是相当不错的。 如果有人会觉得你这就是有参考ci的一些方法,这我不否认的确是有。 但无论如何,总是把他轻巧的参考出来并使用。 所以并非全然是超抄使用。各位如果有看过ci和我这只程式就明白了。 档名:template_engine.php <?php class template_engine{ function view($source_page,$variable = '',$return = FALSE){ $variable = $this->_check_array($variable); foreach($variable as $key => $value){ $$key = $value; } if($return){ ob_start(); eval("?>".file_get_contents($source_page.".php")."<?"); $buffer_tmp = ob_get_contents(); ob_end_clean(); return $buffer_tmp; } else{ eval("?>".file_get_contents($source_page.".php")."<?"); } } function _check_array($variable){ if($variable == null) return array(); if(!is_array($variable)){ echo 'This variable is not array'; exit(); } return $variable; } } ?> 使用方法:(会用ci或是一般framework的朋友就一定会用的啦。) <?php require('template_engine.php'); $load = new template_engine; $frame['topbanner'] = $load->view('topbanner','',TRUE); $frame['leftmenu'] = $load->view('leftmenu','',TRUE); $frame['body'] = $load->view('body','',TRUE); $load->view('mypages',$frame); ?> 有用过framework应该觉得相当眼熟。是的,他该当就是如此的用法了。 $load->view()中有三个参数 第一个参数是载入的样版档名,副档名强制为php,而这边只需要输入主档名。 第二个参数是阵列,你传入的阵列键名在样版中会被解成变数。 举例来说: $data['name'] = 'sam'; $load->view('body',$data); 则在你的body.php中,你要使用$data['name'],他会变成$name。 所以你的body.php中就是直接写<?=$name?>他就会显示$data['name']的内容。 第三个参数是决定显示还是传回内容。 如果输入TRUE的话是不显示,将内容传回至变数。 如果输入FALSE或是不输入的话,则会变成将内容显示出来。 再来要说明的就是,在你载入的样版中,所以PHP的程式码都是可执行的。 但无论如何我们还是遵从FRAMEWORK的一些不成文的规范如下: 1.使用<?=$name?>而不要使用<?php echo $name?> 2.条件式、回圈、判断式中的HTML输出请让他成为纯HTML而不使用echo也不用大刮号 来列示范围如下: 使用<?php if(条件):?>及<?php else:?>及<?php endif?> 而不使用<?php if(条件){.....}else{}?> 使用<?php while(条件):?>及<?php endwhile?> 而不使用<?php while(条件){.....}?> 使用<?php for(回圈):?>及<?php endfor?> 而不使用<?php for(回圈){.....}?> 使用<?php foreach(阵列方法):?>及<?php endforeach?> 而不使用<?php foreach(阵列方法){......}?> 其他一些遵从framework使用的架构规范都是比较好的做法。 目前这个载入器还没有很深入的去写比较多的php程式码在内。 毕竟是纯把他当样版来使用(他也应当必须是当样版载入来使用)。 若然有bug或是问题还烦请大家回报。 这样我可以让这个程式更加的完善。 有什麽需要追加的功能或不错的意见也请大家能多多提供给我。 总之我是觉得这对很多初探php和html分开作页的学习者。 这个程式提供了不错而且有效的解决方案。 总之,我也是尽力在解决这样的问题上。 帮助需要的人,也透过这样的模式,让大家能早一点上手framework。 这是一个轻巧的程式,却也是我花了很长的时间一直在思考view这件事之後。 所生产出的第一个我觉得真正有帮助到人的东西。 除了鼓励为动力,也尚祈批评,以供改进。 如要整个程式含范例档,请来信: [email protected][email protected] (因为gmail有时会误判垃圾信的关系,可能的话两个信箱都寄) 有关推文提到的short_tag一段,我将连结置於此: http://ci.wuboy.twbbs.org/user_guide/general/alternative_php.html --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.130.24
1F:→ superpai:题外话不过CI立即上手是没问题的XD 08/28 23:30
2F:推 shadowjohn:推荐这篇文章~ 08/29 00:15
3F:推 donaldknuth:推+1 08/29 06:29
4F:推 jami520:推 08/29 10:35
5F:→ ileadu:说真的 最近玩ci 觉得ci的view要一直echo 太不乾净了.. 08/29 12:34
6F:→ ileadu:虾米? short_tag不是尽量不要用了? 怎麽会<?=$name?> 08/29 12:38
7F:→ ileadu:我建议还是学smarty比较好..不难学 只要知道塞变数的方法 08/29 12:45
8F:→ tkdmaf:完全不理解楼上说的CI的VIEW要一直echo是怎麽回事? 08/29 12:49
9F:→ tkdmaf:如果说是指变数要echo,事实上ci也有提供纯template的用法 08/29 12:51
10F:→ tkdmaf:另外,short_tag尽量别用的理由是? 08/29 12:52
11F:→ tkdmaf:而且,使用ci的存在,可不只是为了view这件事吧。 08/29 12:53
12F:→ tkdmaf:再者,对初探样版的人而言,轻巧好用我觉得比较重要。 08/29 12:53
14F:→ tkdmaf:上面这篇在我使用ci後真是於我心有戚戚焉...... 08/29 12:57
15F:→ ileadu:php官方建议别用short tag 但我刚刚发现ci会自动打开@@ 08/29 12:59
16F:→ ileadu:http://ppt.cc/6;vF 08/29 13:00
17F:→ tkdmaf:官方叫你别用你就别用?你怎麽知道官方说的一定就对? 08/29 13:00
18F:→ tkdmaf:他既然设计有这个机制,如果不该用,他应该要拿掉。 08/29 13:04
19F:→ tkdmaf:另外你的连结明明就有中文版,还是本版的某大大翻译的。 08/29 13:04
20F:→ tkdmaf:因为我不会用PTT的短网址,我用编辑补在我的本文。 08/29 13:05
※ 编辑: tkdmaf 来自: 59.104.130.24 (08/29 13:06)
21F:→ tkdmaf:这样的设计,就是为了减少学习使用上的时间和难题。 08/29 13:08
22F:→ ileadu:tk 你有注意到 专案还没进行到一半,就把 Smarty 的样版语 08/29 13:11
23F:→ ileadu:法清掉了,直接用 PHP 语法。只用 Smarty 的 cache 功能。 08/29 13:11
24F:→ ileadu:代表 这篇文章的作法 用smarty 只用了一半 就放弃了.. 08/29 13:11
25F:→ ileadu:这样有资格对smarty做评语? 08/29 13:12
26F:→ ileadu:代表 这篇文章的作者 补正上上一行的错字 08/29 13:12
27F:→ ileadu:样版引擎所带来的好处是後续的维护动作 可是他根本就还没 08/29 13:15
28F:→ ileadu:做到後续维护 就把smarty丢掉了.. 这样行吗? 08/29 13:16
29F:→ ileadu:我当然知道直接用php来做 效能较好 问题是在後续维护与乾净 08/29 13:16
30F:→ ileadu:smarty本来就是先苦後甘 他竟然没撑过来就批评smarty 08/29 13:18
31F:→ ileadu:当然 要用smarty是得多学一种表示法是比较麻烦.. 08/29 13:19
32F:→ ileadu:那我如果也为了效能 批评根本就不用用framework 如ci 08/29 13:20
33F:→ ileadu:你也能认同? 效能必要的牺牲 换取後取维护才是重点好吗? 08/29 13:21
34F:→ tkdmaf:所以用smarty就会很好维护? 08/29 13:24
35F:→ tkdmaf:把你的样版和我的样版丢给10个来维护或编写。 08/29 13:26
36F:→ tkdmaf:你认为他们比较喜欢维护smarty还是纯php? 08/29 13:26
37F:→ ileadu:不会smarty的 会喜欢php 会了就会想用smarty 08/29 13:28
38F:→ ileadu:如果smarty没有存在的必要 那smarty干嘛继续更新成3? 08/29 13:43
39F:→ ileadu:当然要不要使用smarty 并非必要... 我不是指一定要用他 08/29 13:44
40F:→ ileadu:很多php framework都建议不该在选用其他的样板引擎 直接用 08/29 13:55
41F:→ ileadu:php的就好了 也不难理解.. 因为会增加学习障碍... 08/29 13:56
42F:→ ileadu:可是在我最近使用ci 的心得 他的form helper、html helper 08/29 13:57
43F:→ ileadu:根本就是在做跟smarty一样的事情 是reinvent a wheel ? 08/29 13:57
44F:→ tkdmaf:你要不要专文回一篇? 08/29 14:08
45F:→ tkdmaf:虽然我觉得你的想法和我想做的事情及对象是不同的。 08/29 14:09
47F:→ ileadu:你好像又再写了一次ci 的view 看上面连结 最下面的范例.. 08/29 14:45
48F:→ ileadu:因为你说了 我的想法与你想做的事与对象不同 我又再仔细看 08/29 14:46
49F:→ ileadu:你文章的内容 看是想表达什麽 怎麽会与我不同 08/29 14:47
51F:→ ileadu:或许你想看中文的 上面连结是中文的 看该页最下面 08/29 14:48
52F:→ tkdmaf:我想一开头我就讲过,我是ci的重度患者。 08/29 14:50
53F:→ ileadu:所以?你这篇文章的重点是在 08/29 14:51
54F:→ tkdmaf:我想做的事与对象,并不是你。 08/29 14:51
55F:→ ileadu:$frame['body'] = $load->view('body','',TRUE); 08/29 14:51
56F:→ ileadu:$load->view('mypages',$frame); 08/29 14:51
57F:→ ileadu:这个特殊作法? 08/29 14:51
58F:→ tkdmaf:而是尚未接触过样板或是framework的设计人员。 08/29 14:51
59F:→ tkdmaf:我也说了,会framework或是会ci的人。 08/29 14:52
60F:→ tkdmaf:而清楚的明白我这个就是VIEW。他不会是别的东西。 08/29 14:52
61F:→ tkdmaf:你要说我就只是把VIEW切出来给别人用嘛!那我完全不否认。 08/29 14:52
62F:→ tkdmaf:他的轻巧,就纯粹因为:他就是VIEW。不是别的东西。 08/29 14:53
63F:→ ileadu:喔.. 原来这不是开发给ci用的 是给完全没接触过framework的 08/29 14:53
64F:→ tkdmaf:不喜欢,你可以不要用。我也没叫别人不要用SMARTY! 08/29 14:53
65F:→ ileadu:没 我只是觉得你应该做重点上色..适用怎样的人 08/29 14:54
66F:→ ileadu:简单的来说 你是把ci的view割出来独立使用.. 这样讲就好啦 08/29 14:56
67F:→ tkdmaf:所以是误会吗? 08/29 14:57
68F:→ ileadu:恩 文章太长 挑重点看 只看到像ci的部分 08/29 14:59
69F:→ tkdmaf:不是每个人一开始都能接受SMARTY或是ci 08/29 15:01
70F:→ tkdmaf:这个东西就只是为了多少让他们先了解程式和样板的可分离性 08/29 15:01
71F:→ tkdmaf:另一方面就只是我自己在研究VIEW的做法。 08/29 15:07
72F:推 pthuang:好啦 搞了半天只是因为误会嘛....别吵别吵 ^^"a 08/30 00:07
73F:推 knockout:建议不要教学生 framework 或是 smarty 08/31 11:36
74F:→ knockout:http://templatepower.codocad.com/download.php 08/31 11:36
75F:→ knockout:上面有比较简单的做法 ~ 学生要学的是基础 08/31 11:37
76F:→ tkdmaf:我是觉得如果对物件导向有一定的了解了。 08/31 17:36
77F:→ tkdmaf:要学framework就没什麽问题。 08/31 17:37
78F:→ tkdmaf:假设我教学生整个连物件都教完的话。我会马上叫他们用CI。 08/31 17:39







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:iOS站内搜寻

TOP