深入解析模板技术原理【一】

1、模板的由来
在没有模板技术之前,使用PHP开发程序,通常都是php代码和html混编在一起。比如说新闻列表,很可能就是一个newslist.php页面,结构如下:


<?
//从数据库中读取出要显示的新闻记录
?>
<html>
<head>……..
</head>
<body>
<?
While ($news = mysql_fetch_array($result)) {
?>
<!--输出新闻标题   -- >
<?
}
?>
</body>
</html>

那么这样有什么问题呢?首先,不利于分工合作。一般来说,都会由程序员来写代码,美工人员设计页面。那么在这种方式中,程序员必须等待美工人员把界面设计好才能开始工作。也就是说程序员和美工的工作是不能同步的。其次、不利于维护,可维护性差。比如说程序固定后,要修改界面,那么必须由美工修改后,程序员再重新添加。最后,程序结构混乱,可读性差。HTML和PHP混编在一起,一旦程序一多,就会变的非常的凌乱。
理解模板原理——使用PHP标签的模板技术
模板技术正是为了解决这些问题而出现的,为了解决这些问题,最早出现的是使用php标签的模板技术。
首先,我们要明白模板的目的是什么。模板主要要实现几个任务呢?第一、美工和程序的分离。更确切的说法是获取数据和显示数据的分离。第二、分工。良好的分工合作。
比如说新闻列表,如果使用模板,我们就可以把新闻列表的操作分成两部分:
1、 getnews.php 负责从数据库中读取数据到数组$news中,不关心$news是如何显示的。
2、 Shownews.php 负责把$news数组输出成HTML页面。而它不需要理会$news是从哪里来的。
好,这样,我们就实现了美工和程序的分离,达到了我们的初步目的,但是如何把这两个页面联合起来,并实现listnews.php的功能呢?
这就需要另外一个页面listnews.php,来负责把“美工(显示数据)”和“程序员(获取数据)”连接起来。应该说这个页面就是很简单了。
假设getnews.php的代码如下:

[……]

阅读更多

网页尺寸的界定

由于页面尺寸和显示器大小及分辨率有关系,网页的局限性就在于你无法突破显示器的范围,而且因为浏览器也将占去不少空间,留下给你的页面范围变得越来越小。一般分辨率在800×600的情况下,页面的显示尺寸为:780×428个象素;分辨率在640×480的情况下,页面的显示尺寸为:620X311个象素;分辨率在1024X768的情况下,页面的显示尺寸为:1007×600。从以上数据可以看出,分辨率越高页面尺寸越大。
浏览器的工具栏也是影响页面尺寸的原因。一般目前的浏览器的工具栏都可以取消或者增加,那么当你显示全部的工具栏时,和关闭全部工具栏时,页面的尺寸是不一样的。
在网页设计过程中,向下拖动页面是惟一给网页增加更多内容(尺寸)的方法。但我想提醒大家除非你能肯定站点的内容能吸引大家拖动,否则不要让访问者拖动页面超过三屏。如果需要在同一页面显示超过三屏的内容,那么你最好能在上面做上页面内部连接,方便访问者浏览。
1、800*600下,网页宽度保持在778以内,就不会出现水平滚动条,高度则视版面和内容决定。
2、1024*768下,网页宽度保持在1002以内,就不会出现水平滚动条,高度则视版面和内决定。
3、在ps里面做网页可以在800*600状态下显示全屏,页面的下方又不会出现滑动条,尺寸为740*560左右  
4、在PS里做的图到了网上就不一样了,颜色等等方面,因为WEB上面只用到256WEB安全色,而PS中的RGB或者CMYK以及LAB或者HSB的色域很宽颜色范围很广,所以自然会有失色的现象
5、1024*768 下网页的尺寸:width=955,height=600
800*600 下网页的尺寸:width=760,height=420

一般分辨率在800×600的情况下,页面的显示尺寸为:780×428个象素;
分辨率在640×480的情况下,页面的显示尺寸为:620X311个象素;
分辨率在1024X768的情况下,页面的显示尺寸为:1007×600


网页尺寸,随心缩放
通常情况下,IE浏览器中显示出来的网页,其尺寸大小相对是固定不变的,访问者想自行改变浏览页面的大小时,往往只能通过设置显示分辨率的方法,来简单地改变浏览页面的尺寸大小,不过这种方法对网页尺寸的缩放程度非常有限。其实利用“打印预览”命令,你能随心所欲地缩放网页尺寸。
首先用IE打开需要进行尺寸缩放的目标页面,再单击IE菜单栏中的“文件”选项,从弹出的下拉菜单中执行“打印预览”命令(要使该命令有效,必须事先安装好打印机或虚拟打印机);随后IE浏览页面将被自动切换到“打印预览”模式下,此时你可以连续单击工具栏中的“放大”图标,对当前页面的尺寸进行任意放大,同样可以对目标页面的尺寸进行随意缩小,当然也可以在图4窗口的缩放比例列表中,指定一个合适的缩放比例;例如要将网页尺寸放大一倍的话,就可以将缩放比例设置为“200%”,要想将网页缩小一倍显示的话,可以将缩放比列设置为“50%”。

[……]

阅读更多

爱聚合破解版带注册机 那是不能用的

爱聚合破解版前一阵子在网络上流行,就有用它建个垃圾站的想法,百度K不K先不说,主要是省事,正好手中还有几个闲置的域名拿来试试,网上主要流行的现在是一个叫什么爱聚合5.0破解版带注册机的版本,下载打开爱聚合5.0破解版的压缩包里面有个《注册机.exe》的文件,这就是所谓的注册机了,打开后的截图是这个样子:
爱聚合5.0破解版带注册机
你仔细研究下就会发现它其实这个并不是一个真正的应用程序,它只是加载了一个网络上的页面,当这个网址找不开的时候你的注册机也就打不开了,在你的注册机里也会显示你用浏览器打不开页面时的信息,然后你再点这个注册机的“提交”按钮,它会提示你需要保存一个文件,这个文件就是所谓的授权文件,这时候你会发现它的原形了,在这个对话框上你有名称:setup.php、类型:php script、从:www.ttpals.com这说明你要保存的文件是从www.ttpals.com这个网站上发送过来的,如果用些相关的Http协议分析软件跟踪,在你点提交的时候提交的网址是:http://www.ttpals.com/system/indtle.php,打开看看是什么?呵呵,和你的注册机是不是一样?
到这里我们也并不能说些什么,接下来请看:
打开:http://www.ttpals.com/system/,因为它没有指定默认打开文件,所以你就看到这个文件目录了,在里面有个"c.txt"的文件,点击打开它,或者另存为下载也可,到现在已经差不多快1M了, 这些都是使用过爱聚全破解版的网址,当然如果刚才你填写了自己的网址,到文件的最后面找找也会有你的网址的,这些信息对爱聚合的官方来说可是一笔财富,可以根据这些信息找到你的网址,让你另外购买正版也好,起诉也好,啊…,也不知当你看到这些信息的时候这些证据还在不在,嗯,自己先存一份。
网上还有另外几种版本,也是这个样子的,都是用的www.ttpals.com这个网站的,有兴趣的也可以研究下自己也写个注册机发到论坛里,弄些流量,呵呵,不多说了。

爱聚合5.0破解版下载:http://www.xun6.com/file/06ddb1527/iJuhe.rar.html

[……]

阅读更多

jquery 实现加两行输入框表格实现自动路由功能

一下是代码:记得要用JQuer。 目前删除功能如果删除的是在中间位置,会所删下面填入数据一起删掉,谨慎使用。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">     
<html xmlns="http://www.w3.org/1999/xhtml">     
<head>     
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />     
http://jquery.js     
<title>Table</title>     
<script>     
$(document).ready(function(){     
var _val=$("#content_show").val();     
//接入码     
$("#access_id").change(function(){     
var _tmp=$(this).val();     
if(_tmp==""||_tmp.length==0)     
{     
if(_val==""||_val.length==0)     
{     
return;     
}     
else     
{     
var _pos=_val.indexOf("+");//int _pos=_val.indexOf("+");     
var _len=_val.length;     
_val=_val.substr(_pos+1,_len);     
}     
}     
else     
{     
_val=_tmp+"+"+_val;     
}     
$("#content_show").val(_val);     
}) 
//命令字 没完成    
$("#command_id").change(function(){     
var _tmp=$(this).val();     
if(_tmp==""||_tmp.length==0)     
{     
if(_val==""||_val.length==0)     
{     
return;     
}     
else     
{     
var _pos1=_val.indexOf("+");     
var _pos2=_val.indexOf("#");     
if(_pos2<0)     
_pos2=_val.length;     
_val=_val.substr(_pos1+1,_pos2);     
}     
}     
else     
{     
_val=_val+$(this).val()+"+";     
} 
$("#content_show").val(_val);    
})     
$("#but").click(function(){     
var $tr=$("#tab_child tr");     
var _len=$tr.length;     
/*     
//测试添加<tr/>标签内容     
alert("<tr id='"+_len+"'>n"     
+"<td align='center'>"+_len+"<input type='checkbox' style='display:none' name='recorder' value='"+_len+"'/></td>n"     
+"<td align='center'><input type='text' id='para"+_len+"' name='para"+_len+"' />n"     
+"<td align='center'><a href='#' onclick='deltr("+_len+")'>删除</a></td>n"     
+"</tr>n");     
*/     
$("#tab_child").append("<tr id='"+_len+"'>"     
+"<td align='center'>"+_len+"<input type='checkbox' style='display:none' name='recorder' value='"+_len+"'/></td>"     
+"<td align='center'><input type='text' id='para"+_len+"' name='para"+_len+"' />"     
+"<td align='center'><a href='#' onclick='deltr("+_len+")'>删除</a></td>"     
+"</tr>");     
}) 
//测试,打印整个<table/>的内容    
$("#info").click(function(){     
alert($("#tab_child").html());     
}) 
//初始化可路由模块    
for(var i=1;i<=5;i++)     
{     
$("#klymk").append("<option value='"+i+"'>模块"+i+"</option>");     
} 
//初始化已路由模块    
// do something here... 
//初始化增加,移除按钮状态    
changeButtonStatus(); 
//增加按钮操作    
$("#item_add").click(function(){     
var _all=$("#klymk>option").length;     
if(_all>0)     
{     
var _len=$("#klymk>option:selected").length;     
if(_len<=0)     
{     
alert('请选择需要添加的模块名称!');     
return;     
}     
else     
{     
$("#klymk>option:selected").each(function(){     
$("#ylymk").append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");     
var _val=$("#showbox").val(); //获得隐藏域的值     
_val=_val+$(this).val()+"+"+$(this).text()+",";     
$("#showbox").val(_val);     
// alert("隐藏域的值的值: "+$("#showbox").val());     
$(this).remove();     
})     
changeButtonStatus();//改变按钮状态     
}     
}     
else     
{     
$(this).attr("disabled","true");     
}     
})     
$("#item_del").click(function(){     
var _all=$("#ylymk>option").length;     
if(_all>0)     
{     
var _len=$("#ylymk>option:selected").length;     
if(_len<=0)     
{     
alert('请选择需要移除的模块名称!');     
return;     
}     
else     
{     
$("#ylymk>option:selected").each(function(){     
$("#klymk").append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");     
var _val=$("#showbox").val(); //获得隐藏域的值     
var _str=$(this).val()+"+"+$(this).text()+",";     
_val=_val.replace(_str,"");     
$("#showbox").val(_val);     
// alert("隐藏域的值的值: "+$("#showbox").val());     
$(this).remove();     
})     
changeButtonStatus();//改变按钮状态     
}     
}     
else     
{     
$(this).attr("disabled","true");     
} 
})    
}) 
//删除选中的<tr/>    
var deltr=function(index){     
// alert("删除第 "+index+"行");     
$tr=$("#tab_child tr");     
var _len=$tr.length;     
if(index>_len)     
{     
return;     
}     
else     
{     
// alert($("tr[id='"+index+"']").html());     
if(confirm('您确定删除该记录吗?'))     
{     
$("tr[id='"+index+"']").remove(); //删除当前行     
for(var i=index+1;i<_len;i++)     
{     
var _val=$("#para"+i).val();     
$("tr[id='"+i+"']").replaceWith("<tr id='"+(i-1)+"'>"     
+"<td align='center'>"+(i-1)+"<input type='checkbox' style='display:none' name='recorder"+(i-1)+"' value='"+(i-1)+"'/></td>"     
+"<td align='center'><input type='text' id='para"+(i-1)+"' name='para"+(i-1)+"' value='"+_val+"' />"     
+"<td align='center'><a href='#' onclick='deltr("+(i-1)+")'>删除</a></td>"     
+"</tr>");     
}     
}     
else     
{     
return;     
}     
}     
} 
//改变增加、移除按钮的状态    
var changeButtonStatus=function()     
{     
var klymk_len=$("#klymk>option").length;     
var ylymk_len=$("#ylymk>option").length; 
//可路由模块    
if(klymk_len<=0)     
{     
$("#item_add").attr("disabled","true");     
}     
else     
{     
$("#item_add").removeAttr("disabled");     
// $("#item_add").get(0).disabled=false;     
// $("#item_add")[0].disabled=false;     
}     
//已路由模块     
if(ylymk_len<=0)     
{     
$("#item_del").attr("disabled","true");     
}     
else     
{     
$("#item_del").removeAttr("disabled");     
}     
}     
</script>     
</head>     
<body>     
<table id="tab_parent" border="1" width="80%" align="center">     
<tr>     
<td>输入展示</td>     
<td><input type="text" id="content_show" name="content_show" size="50" value="" readonly="readonly" /></td>     
</tr>     
<tr>     
<td>接入码</td>     
<td><input type="text" id="access_id" name="access_id" /></td>     
</tr>     
<tr>     
<td>命令字</td>     
<td><input type="text" id="command_id" name="command_id" /></td>     
</tr>     
<tr>     
<td>参数</td>     
<td>     
<table id="tab_child" border="1" width="100%">     
<tr>     
<td width="20%" align="center">序号</td>     
<td align="center">参数名称</td>     
<td align="center">操作</td>     
</tr>     
</table>     
<input type="button" id="but" value="add"/>     
<input type="button" id="info" value="show"/>     
</td>     
</tr>     
</table> 
<br/> 
<table width="80%" cellpadding="0" align="center" class="listshow" border="1" cellspacing="0">    
<tr>     
<td align="center">可路由模块</td>     
<td align="center">&nbsp;&nbsp;</td>     
<td align="center">已路由模块</td>     
</tr>     
<tr>     
<td class="black" width="30%" align="center" height="150">     
<select id="klymk" multiple="multiple" style="text-align:center;width:300px;height:150px;"><!-- 设置multiple属性,支持多选 -->
</select>    
</td>     
<td align="center" width="5%">     
<input type="button" id="item_add" value="增加" />     
<br/>     
<br/>     
<input type="button" id="item_del" value="移除" />     
</td>     
<td class="black" width="30%" align="center">     
<select id="ylymk" multiple="multiple" style=" text-align:center;width:300px;height:150px;"> 
</select>    
<input type="hidden" value="" id="showbox" name="showbox" />     
</td>     
</tr>     
</table>     
</body>     
</html>

[……]

阅读更多

你会关心吗?她会关心吗?

拉你右手  21:55:22
我怎么了
小葱  21:55:35
我没怎么啊
小葱  21:56:03
我怎么了,你会关心吗?
小葱  21:56:50
就算你会关心,她会关心了吗?

小葱  21:56:51
算你会关心,她会关心,她会关心了吗?

小葱  21:56:53
你会关心,她会关心,她会关心,她会关心了吗?

小葱  21:56:59

关心,她会关心,她会关心,她会关心,她会关心了吗?

[……]

阅读更多

已走过的20年–纪实生活喜剧

20岁,不多不少,每天听到周围关于20人生黄金阶段教授,却又从四处传来20岁别太计较,当你走过之后会发现一切都是幼稚的成长而已。

我比较认同一切都是比较幼稚的成长的观点,也正如此我这20年也就没取得在同龄人面前值得炫耀的成绩。

一直在幼稚的成长着,唯有能让自己沾沾自喜的也就是偶尔会自己跳出自己的思想,回望一下自己成长的路,从旁观者的角度看自己多样的生活,那是也便是我最大的收获,收获了一份属于自己的生活喜剧:{关于生活:悲观的人看它是一场闹剧,享受的人看它是一场喜剧。}

[……]

阅读更多

熬至滴水成珠-好书推荐

池莉著

人生的春(1) 

————看看豆瓣上激烈的热评》》 去当当购买《熬至滴水成珠》

        有一种春,是无法守候的。这就是人生的春。人生的春往往与年龄没有关系,却只是一种苏醒。这样的苏醒,如偏僻乡村篱笆上的野玫瑰,花朵开得烂漫,意象上却单单只有光明,简单,敦厚与宁静。

不要以为意象上的光明,简单,敦厚与宁静容易得到。更不要以为有了偏僻乡村,目的就八九不离十了。不是的。这种意象不是浅显的看图说话。能够形成这种意象的,要木篱笆,要野玫瑰,要好阳光,要一道碎石小路,从篱笆下面蜿蜒伸出,远远地,远远地深入到了起伏的山坡,要山坡上有茂密的针叶林,要林子里淡淡地散发着松香。

[……]

阅读更多

QQ书签-系统维护中-腾讯唬人的把戏

QQ书签的用户量非常大,但是QQ书签这个应用正在被腾讯边缘化。

因为网络收藏夹有太多不可控制的不良网址可能会随时出现,所以腾讯的QQ书签己经完全屏蔽掉了自由访问公开的收藏信息了。除了首页几个仅剩的垃圾样版以外,用户根本无法再查看和分享到其他用户收藏的网页了。

QQ用户的网络收藏夹的记录也只能是自己输入账号密码登录后才能查看了。

QQ书签-系统维护中-腾讯唬人的把戏

[……]

阅读更多