中山php|最优网络中山做网站 中山php建站

最优良人

2012/09/22 at 11:16

好用的smarty标签:capture,literal,fetch

1,capture标签

capture的中文意思是抓取,它的作用是抓取模板输出的数据,当我们需要它的时候,调用它,以得到抓取数据的目的。例子:

  1. {capture name=test}
  2. <img src=”testimg.jpg”>
  3. {/capture}
  4. <div class=”image”>
  5. {$smarty.capture.test}
  6. </div>

说明:
在{capture name=”test”}和{/capture}之间的内容被存储到变量$test中,该变量由name属性指定.在模板中通过 $smarty.capture.test 访问该变量.如果没有指定name 属性,函数默认将使用”default” 作为参数,这一点很jquery中的clone

2,config_load标签

config_load可以直接将文件中的内容读取出来,这样可以省掉assign这一步。

  1. test.csv:
  2. pageTitle = ”config_load_test”
  3. bodyBgColor = ”#eeeeee”
  4. img = ”girl.jpg”
  5. width=”100″
  6. height=”100″
  7. index.tpl:
  8. {config_load file=”test.csv”}
  9. <html>
  10. <title>{#pageTitle#}</title>
  11. <body bgcolor=”{#bodyBgColor#}”>
  12. <img src=”{#img#}” width=”{#width#}” height=”{#height#}”>
  13. </body>
  14. </html>

上述过程中如果出现这样的问题Warning: Smarty error: unable to read resource, 请查看一下,你的test.csv是不是放在smarty的配置目录中,默认配置目录是configs

  1. /**
  2. * The directory where config files are located.
  3. *
  4. * @var string
  5. */
  6. var $config_dir      =  ’configs’;

3,literal标签的使用

做web开发,难免会写一些JS,jquery代码。js和jquery里面都会{}这样的符号,smarty会不会把它理解成php的变量呢?如果你不加literal标签的话,smarty肯定会把它理解变量了,加了就不会,例如:

  1. {literal}
  2. function getAbsLeft(e){
  3. var l=e.offsetLeft;
  4. while(e=e.offsetParent)l+=e.offsetLeft;
  5. return l;
  6. }
  7. function getAbsTop(e){
  8. var t=e.offsetTop;
  9. while(e=e.offsetParent)t+=e.offsetTop;
  10. return t;
  11. }
  12. {/literal}

4,php标签

当你习惯了assign后,你有没有想过,在模板文件里面直接写php代码呢,我想有的时候你肯定很想吧。例如:

  1. {php}
  2. global $result;
  3. foreach($result as $key=>$value){
  4. echo ”key=$key,value=>$value<br>”;
  5. }
  6. {/php}

5,strip标签

strip标签去除标签内的空格和回车,这一点我觉得,做手机开发的朋友肯定用的到,因为全角空格有可能会导致整个页面错乱,甚至是一个空白页面。手机屏幕小,估计用smarty的可能性也比较小。

  1. {strip}
  2. <div>
  3. <font color=”red”>strip</font>
  4. </div>
  5. {/strip}

6,fetch标签

fetch标签根php的file_get_contents挺想的,都可以把文件中的内容读出来,并且是个字符串的形势

  1. {fetch file=”./aaaa.txt” assign=”result”}
  2. {if is_array($result)}
  3. <b>is array</b>
  4. {else if}
  5. <b>not array</b>
  6. {/if}

 

 

标签:
comments Comments (481)    -
2012/09/17 at 17:12

htaccess实现域名绑定,拒绝其他域名访问

独立ip的主机,只要其他域名指向该ip都是可以访问的,多域名访问会产生大量重复内容,对seo非常不利,我们可以利用htaccess实现域名绑定,拒绝其他域名访问

在站点根目录建立.htaccess文件,写入如下内容:

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} !www.zui88.com [NC]
RewriteCond %{HTTP_HOST} !zui88.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^.* – [F,L]

这样实现的结果是只能通过www.zui88.com,zui88.com来访问站点,用其他的HOST访问都会显示403Forbidden。

其中:{HTTP_HOST}代表HTTP协议GET动作同时传递的Host的值,[NC]代表忽略大小写;[F]代表动作为禁止;[L]代表最终匹配。

标签:
comments Comments (459)    -
2012/09/13 at 11:45

网站被百度k了怎么办?被惩罚后如何恢复排名

网站被百度惩罚,两个多月了,排名还没有恢复,蜘蛛爬行正常,收录和快照也正常,应该就是域名被降权处理了。

这么久时间过去了,排名还是没有,说明被百度降权的域名想恢复是多么不容易,很多站长网站被降权后,做了很多补救工作,希望可以恢复,其实,我想百度数据库肯定有无数的降权域名,想单单把你的域名拿出来恢复权重几乎是不可能的,其实有一种有效的补救措施,不过代价比较大,就是被降权的域名直接不要了,换新的域名。

前天我做了一个尝试,注册了新域名 zui88.com ,把原来的域名zui88.com进行301重定向,到了第二天新域名zui88.com被收录,并且大部分关键词排名恢复,然后服务器被关闭,因为新域名没有备案,今天正式把网站迁移到香港服务器,以后就使用新域名,老域名就做转向用了。有待测试!!

 

标签:
comments Comments (475)    -
2012/08/21 at 16:55

新站如何能快速被百度收录

刚刚做好的一个网站,如何能快速被百度收录,并且可以查询的到呢,个人以为有以下几点:

1,网站上线时必须至少有一点原创内容支撑,可以先发一些新闻产品,公告通知,技术知识的文章,保障网站不会太空洞,避免完全复制网络的内容。

2,必须存放在一个相对干净的主机空间,所谓干净的主机空间就是该主机ip没有被搜索引擎降权,该ip下的其他网站没有不良内容或垃圾站,有可能的话尽量用一个独立ip的空间,并且查一些该ip以前的使用情况。

3,必须有高质量的外部导入链接,比如收录良好的资讯类网站,发布一条公司介绍的信息,带上公司的网址链接,如果该信息被收录的话,那么网站很可能也已经被顺带收录了,应该提供给了搜索引擎蜘蛛一个入口爬行到我们网站来

第三点尤为重要,我曾经试过帮客户发了一条信息,信息秒收,客户站也被秒收。

标签:,
comments Comments (437)    -
2012/08/16 at 11:58

JS获取file上传文件路径,后缀,大小,文件名

/**
*函数描述:获取input type=file的图像全路径
* @obj input type=file的对象
**/
function getFullPath(obj)
{
if(obj)
{
//ie
if (window.navigator.userAgent.indexOf("MSIE")>=1)
{
obj.select();
return document.selection.createRange().text;
}
//firefox
else if(window.navigator.userAgent.indexOf("Firefox")>=1)
{
if(obj.files)
{
return obj.files.item(0).getAsDataURL();
}
return obj.value;
}
return obj.value;
}
}

 

<input type="file" onchange="document.getElementById('img').src=getFullPath(this);" >

 

=========================================================================

 

 

#判断IE还是Firefox

function getFullPath(obj)

{

if(obj)

{

//ie

if (window.navigator.userAgent.indexOf("MSIE")>=1)

{

obj.select();

return document.selection.createRange().text;

}

//firefox

else if(window.navigator.userAgent.indexOf("Firefox")>=1)

{

if(obj.files)

{

return obj.files.item(0).getAsDataURL();

}

return obj.value;

}

return obj.value;

}

}

 

 

 

#判断后缀名

function yulan(){

var filePath =getFullPath(document.getElementById('UpFile'));

var fileText =filePath.substring(filePath.lastIndexOf("."),filePath.length);

var fileName =fileText.toLowerCase();

if ((fileName!='.jpg')&&(fileName!='.gif')&&(fileName!='.jpeg')&&(fileName!='.png')&&(fileName!='.bmp'))

{

alert("对不起,系统仅支持标准格式的照片,请您调整格式后重新上传,谢谢 !");

document.form1.UpFile.focus();

}

else

{

document.getElementById("preview").innerHTML="<img src='"+getFullPath(document.getElementById('UpFile'))+"' width=120 style='border:6px double #ccc'>";

}

}

 

 

#判断文件大小

var Sys = {};

if(navigator.userAgent.indexOf("MSIE")>0) {

Sys.ie=true;

}

if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){

Sys.firefox=true;

}

 

var maxLength = 5*1024*1024;

 

function checkFileChange(obj) {

var filesize = 0;

if(Sys.firefox){

filesize = obj.files[0].fileSize;

}else if(Sys.ie){

var filePath = obj.value;

var image=new Image();

image.src=filePath;

filesize=image.fileSize;

}

alert(filesize);

}

获取文件名

firefox的input表单的value值默认就可以获取到文件名,而ie 则显示文件路径。

所以要区别对待,在firefox下 lastIndexOf('/')得到的是-1,而在ie下,目录显示的又是反斜杠,\,当然在Linux
下,其他浏览器获取到的又是正斜杠 / ( 暂时未证明有Linux下有浏览器file获取到的值会是全路径);
得用两次判断:

function getFileName(path){
var pos1 = path.lastIndexOf('/');
var pos2 = path.lastIndexOf('\\');
var pos = Math.max(pos1, pos2)
if( pos<0 )
return path;
else
return path.substring(pos+1);
}

返回不带后缀的文件名

return name.substring(0,name.lastIndexOf('.'));

标签:,
comments Comments (184)    -
2012/08/01 at 17:36

ie6实现div页面固定不动,纯CSS中使用expression兼容fix

* html,* html body /* IE6 Fixed Position Jitter Fix */{background-image:url(about:blank);background-attachment:fixed;}
* html .fixed-top /* IE6 position fixed Top */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));}
* html .fixed-right /* IE6 position fixed right */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));}
* html .fixed-bottom /* IE6 position fixed Bottom */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));}
* html .fixed-left /* IE6 position fixed Left */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft));}

CSS中使用expression有ie才能识别。IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和
Javascript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javascript
表达式,CSS属性的值等于Javascript表达式计算的结果。 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。

例子: 1.给元素固有属性赋值 下面是定义container容器的宽度,如果<725就为自己的宽度,否则就等于725,相当于max-width:725px;。   <style type="text/css" media="screen">   #container { width: expression((documentElement.clientWidth > 725) ? "725px" : "auto" ); }   </style>   2.给元素自定义属性赋值 例如,消除页面上的链接虚线框。 通常的做法是:   <a href="link1.htm" onfocus="this.blur()">link1</a>   <a href="link2.htm" onfocus="this.blur()">link2</a>   <a href="link3.htm" onfocus="this.blur()">link3</a>   粗看或许还体现不出采用expression的优势,但如果你的页面上有几十甚至上百个链接,这时的你难道还会机械式地Ctrl+C,Ctrl+V么,何况两者一比较,哪个产生的冗余代码更多呢?   采用expression的做法如下:   <style type="text/css">   a {star : expression(this.onFocus=this.blur());}   </style>   <a href="link1.htm">link1</a>   <a href="link2.htm">link2</a>   <a href="link3.htm">link3</a>   说明:里面的star就是自己任意定义的属性,你可以随自己喜好另外定义,接着包含在expression()里的语句就是JS脚本, 在自定义属性与expression之间可别忘了还有一个引号,因为实质还是CSS,所以放在style标签内,而非script内。OK,这样就很容易 地用一句话实现了页面中的链接虚线框的消除。不过你先别得意,如果触发的特效是CSS的属性变化,那么出来的结果会跟你的本意有差别。例如你想随鼠标的移 进移出而改变页面中的文本框颜色更改,你可能想当然的会认为应该写为   <style type="text/css">   input {star : expression(onmouseover=this.style.backgroundColor="#F5F5F5";   onmouseout=this.style.backgroundColor="#FFFFFF")}   </style>   <input type="text">   <input type="text">   <input type="text">   可结果却是出现脚本出错,正确的写法应该把CSS样式的定义写进函数内,如下所示:   <style type="text/css">   input {star : expression(onmouseover=function()   {this.style.backgroundColor="#FF0000"},   onmouseout=function(){this.style.backgroundColor="#FFFFFF"}) }   </style>   <input type="text">   <input type="text">   <input type="text">   注意:不是非常需要,一般不建议使用expression,因为expression对浏览器资源要求比较高。


标签:, ,
comments Comments (437)    -
2012/07/21 at 12:35

JS 把字符串转成整数的函数

parseInt()把字符串转成整数

parseFloat()把字符串转成浮点数

js在处理变量的数学运算时一点要注意变量类型的转换

JS 字符串转整数 JS 字符串转整数方法主要有三种转换函数、强制类型 转换、利用js 变量弱类型转换。

1.转换函数: js 提供了parseInt()和parseFloat()两个转换函数。

前者把值转换成整 数,后者把值转换成浮点数。只有对String 类型调用这些方法,这两个函数才 能正确运行;对其他类型返回的都是NaN(Not aNumber)。 在判断字符串是否是数字值前,parseInt()和parseFloat()都会仔细分析 该字符串。 parseInt()方法首先查看位置0 处的字符,判断它是否是个有效数字;如 果不是,该方法将返回NaN,不再继续执行其他操作。但如果该字符是有效数 字,该方法将查看位置1 处的字符,进行同样的测试。这一过程将持续到发现 非有效数字的字符为止,此时 parseInt()将把该字符之前的字符串转换成数字。

例如,如果要把字符串"1234blue"转换成整数,那么parseInt()将返回 1234,因为当它检测到字符b 时,就会停止检测过程。 字符串中包含的数字字面量会被正确转换为数字,因此字符串"0xA"会被正 确转换为数字10。 不过,字符串"22.5"将被转换成22,因为对于整数来说,小数点是无效字 符。 一些示例如下: Js 代码parseInt("1234blue");//returns 1234parseInt("0xA"); //returns 10parseInt("22.5");//returns 22parseInt("blue");//returns NaNparseInt()方法还有基模式,可以把二进制、八进制、十六进制或其他任何 进制的字符串转换成整数。 基是由parseInt()方法的第二个参数指定的,所以要解析十六进制的值, 需如下调用parseInt()方法: Js 代码parseInt("AF",16);//returns 175 当然,对二进制、八进制, 甚至十进制(默认模式),都可以这样调用parseInt()方法: Js 代码parseInt("10",2);//returns 2parseInt("10",8);//returns 8parseInt("10",10);//returns 10 如果十进制数包含前导0,那么最好采用 基数10,这样才不会意外地得到八进制的值。

例如: Js 代码parseInt("010");//returns 8parseInt("010",8);//returns 8parseInt("010",10);//returns 10 在这段代码中,两行代码都把字符串 "010"解析成了一个数字。第一行代码把这个字符串看作八进制的值,解析它的 方式与第二行代码(声明基数为8)相同。最后一行代码声明基数为10,所以 iNum3 最后等于10。 parseFloat()方法与parseInt()方法的处理方式相似,从位置0 开始查看 每个字符,直到找到第一个非有效的字符为止,然后把该字符之前的字符串转 换成数字。

不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个 小数点,第二个小数点将被看作无效的,parseFloat()方法会把这个小数点之 前的字符串转换成数字。这意味着字符串"22.34.5"将被解析成22.34。 使用parseFloat()方法的另一不同之处在于,字符串必须以十进制形式表 示浮点数,而不能用八进制形式或十六进制形式。 该方法会忽略前导0,所以八进制数0908 将被解析为908。对于十六进制 数0xA,该方法将返回NaN,因为在浮点数中,x 不是有效字符。 此外,parseFloat()也没有基模式。 下面是使用parseFloat()方法的示例: Js 代码parseFloat("1234blue");//returns 1234.0 parseFloat("0xA"); //returns NaNparseFloat("22.5");//returns 22.5parseFloat("22.34.5"); //returns 22.34parseFloat("0908");//returns 908parseFloat("blue"); //returns NaN2.强制类型转换 还可使用强制类型转换(type casting)处理转换值的类型。使用强制类型 转换可以访问特定的值,即使它是另一种类型的。

ECMAScript 中可用的3 种强制类型转换如下: Boolean(value)--把给定的值转换成Boolean 型;Number(value)--把给定 的值转换成数字(可以是整数或浮点数);String(value)--把给定的值转换成字 符串。 用这三个函数之一转换值,将创建一个新值,存放由原始值直接转换成的 值。这会造成意想不到的后果。 当要转换的值是至少有一个字符的字符串、非0 数字或对象(下一节将讨论 这一点)时,Boolean()函数将返回true。如果该值是空字符串、数字0、 undefined 或null,它将返回false。 可以用下面的代码段测试Boolean 型的强制类型转换。 Js 代码Boolean("");//false– empty stringBoolean("hi");//true– non-empty stringBoolean(100);//true– non-zero numberBoolean(null); //false-nullBoolean(0);//false-zeroBoolean(new Object());//true– objectNumber()的强制类型转换与parseInt()和parseFloat()方法的处理方式 相似,只是它转换的是整个值,而不是部分值。 还记得吗,parseInt()和parseFloat()方法只转换第一个无效字符之前的 字符串,因此"4.5.6"将被转换为"4.5"。 用Number()进行强制类型转换,"4.5.6"将返回NaN,因为整个字符串值不 能转换成数字。 如果字符串值能被完整地转换,Number()将判断是调用parseInt()方法还 是调用parseFloat()方法。 下表说明了对不同的值调用Number()方法会发生的情况: 用法结果 Js 代码 Number(false)0Number(true)1Number(undefined)NaNNumber(null)0Number("5 .5")5.5Number("56")56Number("5.6.7")NaNNumber(new Object())NaNNumber(100)100 最后一种强制类型转换方法 String()是最简单的, 因为它可把任何值转换成字符串。

要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString()方法,即把1 转换成"1",把true 转换成"true",把false 转换成 "false",依此类推。 强制转换成字符串和调用toString()方法的唯一不同之处在于,对null 或undefined 值强制类型转换可以生成字符串而不引发错误: Js 代码var s1=String(null);//"null"var oNull=null;var s2=oNull.toString();//won't work,causes an error3.利用js 变量弱类型 转换 举个小例子,一看,就会明白了。 Js 代码script var str='012.345';var x=str-0;x=x*1;/script 上例 利用了js 的弱类型的特点,只进行了算术运算,实现了字符串到数字的类型转 换,不过这个方法还是不推荐的。

标签:
comments Comments (459)    -
2012/07/21 at 09:41

smarty 利用@ 在模版完整打印多维数组

有时候我们希望直接在模版上打印数组变量以供调试,打印的方式可以用php自带的print_r或者是自己写的调试函数,如debug().

如果直接这样打印多维数组 {{$var|print_r}},在模版看到的结果会是遍历后的所有的value,不会显示完整的数组结构,正确的方法是在函数前加个@,意思是把变量作为整体去对待

{{$var|@print_r}}

标签:
comments Comments (613)    -
2012/07/14 at 15:41

php利用谷歌实现自动在线翻译

php利用谷歌实现自动翻译,以下是两种实现的方式,php文档用utf8就不会出现乱码问题

第一种利用curl:

function translate($text,$language='zh-cn|en'){
if(empty($text))return false;
@set_time_limit(0);
$html = "";
$ch=curl_init("http://google.com/translate_t?langpair=".urlencode($language)."&text=".urlencode($text));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$html=curl_exec($ch);
if(curl_errno($ch))$html = "";
curl_close($ch);
if(!empty($html)){
$x=explode("</span></span></div></div>",$html);
$x=explode("onmouseout=\"this.style.backgroundColor='#fff'\">",$x[0]);
return $x[1];
}else{
return false;
}
}
echo translate('去');
第二种:利用get方式
function googleTran($text){
if(empty($text)) return "";
//反间碟
$wf=@file_get_contents('http://translate.google.cn/translate_t?sl=zh-CN&tl=en&text='.$text.'#');
if (false===$wf||empty($wf)){
return false;
}

//截取相关信息
$return = "";

$star="style.backgroundColor='\#fff'\">";

$end="</span></span></div>";
$p = "#{$star}(.*){$end}#iU";//i表示忽略大小写,U禁止贪婪匹配
if(preg_match_all($p,$wf,$rs))
{ print_r($rs);
return $rs[1][0];}

}

echo googleTran('去');

comments Comments (249)    -
2012/06/27 at 11:42

php,js判断网站是不是手机访问

PHP中用以下代码:

$uAgent = $_SERVER['HTTP_USER_AGENT'];

$osPat = "mozilla|m3gate|winwap|openwave|Windows NT|Windows 3.1|95|Blackcomb|98|ME|X Window|ubuntu|Longhorn|AIX|Linux|AmigaOS|BEOS|HP-UX|OpenBSD|FreeBSD|NetBSD|OS\/2|OSF1|SUN";

if(preg_match("/($osPat)/i", $uAgent )) //winwap 模拟WAP手机上网的一个浏览器; openwave|后面为各pc操作系统

{

echo "电脑访问";

}

else

{

echo "手机访问";

}

echo '<br/>'.$uAgent;
javascript中采用navigator.userAgent 来获取,但非智能机似乎不支持js。

支持js的移动客户端还可以用以下代码简单判断是不是windows电脑访问的

if(navigator.platform.indexOf('Win32')!=-1){
//go to pc
}else{
// go to 手机
}

comments Comments (6)    -