PHP开发流程中的一个瓶颈
想谈一点关于PHP与前端配合的东西。
我工作四年多了,做了不少整合PHP数据与HTML代码的事情,从MVC的结构看,就是整合V和C的事情。这是一个非常单调乏味的事情,在开发过程中极其让人揪心。
一般的过程是这样的,设计师设计出页面样子,交给制作人员切页面,制作人员再将做好的页面给到开发,开发人员将数据输出到页面上,整个过程算完工了,至于测试那是以后的事情了。
举个简单的例子演示:
某个页面上有10个人的联系方式
设计过程没什么好说的,怎么好看怎么设计,设计玩之后,制作人员大约可以做成下面这个样子:
<html>
...
<ul>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
<li><a href="#">张三</a><span>电话:13000000000</span></li>
</ul>
...
</html>
交到开发人员手中,开发人员会按如下方式处理该页面:
1.删掉其中9个人的信息,留下一个作为模板。
2.利用留下的那个人的信息,将其中的数据替换成PHP变量,一般可以用smarty引擎。
最后处理结果如同下面这样的:
<html>
...
<ul>
{foreach from=$users item=user}
<li><a href="/uid={$user.uid}">{$user.name}</a><span>电话:{$user.phone}</span></li>
{/foreach}
</ul>
...
</html>
如果PHP端数据取正确的话,这样的结果是正常的。如果取到的数据为空,那么页面上可能会显示不正确,没有一个“没有联系人”的提示,这个会影响到用户的体验。
在整个过程中,耗费开发人员时间最多的环节有:
1.目测找到多余的9个人,删除。
这个例子太简单,所以很容易就找到哪九个人的数据是多余的。如果是一个微薄列表,删掉其中9个多余的微薄信息,那么恐怕这个工作不是那么轻松。一堆繁杂的HTML代码,其中充斥着样式,图片路径,各种尖括弧,让人眼花缭乱的。删除的时候,删错一个地方都不行,如果整天干这种工作,眼睛都要累死。
2.从剩下的一堆HTML中将内容替换成PHP变量。
看到”张三“两个字,你很容易把他和user['name']联系起来,看到13000000000,也很容易和user['phone']联系起来。但在实际开发中,从一堆HTML代码中找到正确的内容,title,alt,src等属性,还真不是件轻松的事情。比如
<img src="http://www.alisper.com/a/def/2012-09-28/b/test.jpg" width="400" height="300" class="webimg" alt="一张风景图" title="这是一张拉萨的风景图" />
一张图片的属性,包含了src,width,height,alt,title,要从中找到它们对应的PHP变量,然后小心翼翼的把两个引号中间的东西删掉,再仔细的敲上smarty变量,恐怕最少要一分钟吧。
这种小心翼翼的目测识别,再用鼠标选取引号中间的内容,再敲上对应的smarty变量(其中可能你不记得下标),是一件比较头疼的事情。还不说这只是一张图片,还有一大段HTML代码等着你处理呢。
这种繁琐的工作我陆陆续续做了四年,如同小时候看老人们清理棉花上的小渣渣,痛苦不堪。
如果所有的工作只是一个人来做,那么整个过程其实很简单。照着设计的样子一边写HTML代码,一边写PHP代码,写到上面那个图片例子的时候,根本不会先写一个静态的src,而是直接写上smarty变量就行了。省去了先写,再删,再写的冗余过程。
三个人与一个人的区别在于,三个人讲究各司其职,制作人员按效果做出页面,自己的责任就可以说没有了,剩下的装配工PHP开发,劳心劳力,做的东西正常是及格,稍有差错便是当作BUG,真是太苦逼了。
当然我们可以简化整个过程,不然我也不会写这篇博文。
拿到效果图之后,开发人员要根据页面写一个简单的程序输出内容(可以是测试用的),比如上面那个联系人列表,开发人员可以先模拟10个人的联系方式,这程序一点也不难写,假设模拟的数据放在$users中,将这个结果输出到一个空白的页面上。
制作人员访问这个空白页面的链接,可以看到如下结果:
array(
'uid' => 0,
'name' => 张三,
'phone' => 13000000000
)
…一共10个array
如果是上面那个图片的例子,制作人员可以看到这样的结果
array(
'src' => '...',
'width' => 400,
'height' => 300,
'alt' => '一张风景图',
'title' => '一张拉萨的风景图'
)
很显然,从array中找对应的属性,比从HTML代码中找对应属性要简单的多。
于是制作人员继续写代码
<ul>
{foreach from=$users item=user}
<li><a href="
写到这里,停下来看看变量下标,链接和该用户的uid有关,于是直接写上/uid={$user.uid},其他变量如是。
等制作人员写完了,效果也出来了,即便等开发人员放上真实的数据出错了,他检查的时候看到的也是一个已经写好的smarty模板页面,看起来轻松多了,因为HTML代码少了很多。
这种做法有两个前提:
1.开发人员需要准备好测试数据给制作人员。
2.制作人员需要知道smarty的写法。
这两个前提都没有坏处。
第一个前提要求开发人员在正式开发之前必须对数据结构了然于胸,第二个前提是制作人员得有一定的功底。
smarty本来就是制作人员的必修课,只是在国内这种环境下,大多数工作都被勤劳,善良的开发给包揽了。
I will try to end it.
浙公网安备 33010602011771号