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

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的代码如下:

[……]

阅读更多

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

爱聚合破解版前一阵子在网络上流行,就有用它建个垃圾站的想法,百度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>

[……]

阅读更多

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

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

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

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

[……]

阅读更多

熬至滴水成珠-好书推荐

池莉著

人生的春(1) 

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

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

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

[……]

阅读更多

今天收到封-whois信息正确性提醒的邮件。

今天收到一封邮件标题为域名(xxxx.com)whois信息正确性提醒_Whois_Data_Reminder_Notice

发信的是[email protected]
信的内容:
尊敬的用户:
根据ICANN的规定,注册人必须保持域名信息正确完整。请您注意及时更新域名的注册信息。
请检查您的域名whois信息是否正确:
您的域名whois信息如下:

//这里显示中文的域名注册信息

[……]

阅读更多

朋友-快乐追梦

每个人都有自己的梦想,你我也不例外,我们一起为梦想奔忙的时候,会很快乐,但有时候我们也会迷茫,努力了很多得到了些什么呢?

下面是我一位致力于彩绘艺术朋友的作品,他现在的生活或许很忙碌,或许并不是他想要的,但我想告诉他你已经迈出了成功的一大步,坚持到达终点,世界将会为你改变;

 

梦想正如梦里敦煌;

一幅一幅都是梦想的前进

[……]

阅读更多

谷歌改版启用新Logo 修改搜索结果页

Google悄然修改网站Logo,采用了更鲜明的色彩,背景阴影也有所减少。搜索结果显示也相应做出调整,使用户更容易找到信息和图片。

    有趣的是,在谷歌改版后的首个名人纪念日中,为了纪念俄国作曲家柴可夫斯基,谷歌选择旧金山芭蕾舞团为纪念柴可夫斯基170年诞辰所演出的由柴可夫斯基谱曲的芭蕾舞剧《天鹅湖》,图中女舞者是华人首席芭蕾舞演员谭元元,以及他的男伴Tiit Helimets。

谷歌改版启用新Logo 修改搜索结果页

[……]

阅读更多

15个网站设计和开发的Chrome插件

1.Speed Tracer
Speed Tracer is a tool to help you identify and fix performance problems in your web applications. It visualizes metrics that are taken from low level instrumentation points inside of the browser and analyzes them as your application runs.
Speed Tracer 是一款功能强大的性能分析插件,可以让用户深入的了解 Web 应用的运行情况,找出自己的 Web 应用运行缓慢的原因。
2.Eye Dropper
Eye Dropper and Color Picker extension which allows you to pick color from any webpage or from advanced color picker.
Eye Dropper允许用户从任何网页中中提取需要的颜色代码。
3.Firebug Lite
Firebug Lite is a tool for web developers, that allows you to edit, debug, and monitor CSS, HTML, and JavaScript live in any web page.
Firebug的Chrome版本,允许用户在页面中实时编辑,调试或者监测 CSS / HTML / JavaScript 文件。
4.Chrome SEO
The Google Chrome SEO Extension provides easy access to Search Engine Optimization Tools that can help you with Competitive Analysis, Keyword Research, Backlink Checks, PageRank Checks and other daily SEO tasks.
Chrome SEO 扩展可以让用户非常方便的访问访问分析,关键字研究,回链检查,PR 检查等。[……]

阅读更多