smarty模板引擎,列表循环方法

说明:mysql_connect()方法连接mysql数据库

inc.php代码:

$con = @mysql_connect($dburl, $uname, $upass);
if (!$con) die('MYSQL.Connect.Error!');
mysql_query("set names 'utf8'");
mysql_select_db($dbname, $con);

 

list.php代码

include_once 'include/inc.php';
include 'include/smarty/Smarty.class.php';
$smarty = new Smarty();//实例化
$smarty -> template_dir = './templates/'.THEME.'/';//模板目录
$sql="select * from content";
$res=mysql_query($sql);
$data = array();
while ($row = mysql_fetch_assoc($res))
{
$data[] = $row;
}
$smarty -> assign('list', $data);//给变量赋值

$smarty -> display('list.html');//显示模板

 

list.html模板代码:

代码一:

{foreach item=item from=$list}
<br>
标题:<a target="_blank" href="detail.php?id={$item.id}">{$item.c_title}</a>
内容:{$item.c_content}<br>
{/foreach}

代码二:
{section loop=$list name=list}

{$list[list].c_title}
{$list[list].c_content}

{/section}

 

 

smarty半小时快速上手入门教程

本文讲述了smarty快速上手入门的方法,可以让读者在半小时内快速掌握smarty的用法。分享给大家供大家参考。具体实现方法如下:

一、smarty的程序设计部分:

在smarty的模板设计部分我简单的把smarty在模板中的一些常用设置做了简单的介绍,这一节主要来介绍一下如何在smarty中开始我们程序设计。下载Smarty文件放到你们站点中。

index.php代码如下:

 

<?php
/**
*
* @version $Id: index.php
* @package
* @author www.jb51.net
* @action 显示实例程序
*/
include_once("./Smarty/Smarty.class.php"); //包含smarty类文件 

$smarty = new Smarty(); //建立smarty实例对象$smarty
$smarty->templates("./templates"); //设置模板目录
$smarty->templates_c("./templates_c"); //设置编译目录
$smarty->cache("./cache"); //缓存目录
$smarty->cache_lifetime = 0; //缓存时间
$smarty->caching = true; //缓存方式

$smarty->left_delimiter = "{#";
$smarty->right_delimiter = "#}";
$smarty->assign("name", "zaocha"); //进行模板变量替换
$smarty->display("index.htm"); //编译并显示位于./templates下的index.htm模板
?>

二、解释smarty的程序

 

我们可以看到,smarty的程序部分实际就是符合php语言规范的一组代码,我们依次来解释一下:

1:/**/语句:

包含的部分为程序篇头注释。主要的内容应该为对程序的作用,版权与作者及编写时间做一个简单的介绍,这在smarty中不是必需的,但从程序的风格来讲,这是一个好的风格。

2:include_once语句:

它将安装到网站的smarty文件包含到当前文件中,注意包含的路径一定要写正确。

3:$smarty = new Smarty():

这一句新建一个Smarty对象$smarty,简单的一个对象的实例化。

4:$smarty->templates(""):

这一句指明$smarty对象使用tpl模板时的路径,它是一个目录,在没有这一句时,Smarty默认的模板路径为当前目录的templates目录,实际在写程序时,我们要将这一句写明,这也是一种好的程序风格。

5:$smarty->templates_c(""):

这一句指明$smarty对象进行编译时的目录。在模板设计篇我们已经知道Smarty是一种编译型模板语言,而这个目录,就是它编译模板的目录,要注意,如果站点位于linux服务器上,请确保

teamplates_c里定义的这个目录具有可写可读权限,默认情况下它的编译目录是当前目录下的templates_c,出于同样的理由我们将其明确的写出来。

6:$smarty->left_delimiter与$smarty->right_delimiter:

指明在查找模板变量时的左右分割符。默认情况下为"{"与"}",但在实际中因为我们要在模板中使用<script>,Script中的函数定义难免会使用{},虽然它有自己的解决办法,但习惯上我们将它重新定义

为"{#"与"#}"或是"<!--{"与"}-->"或其它标志符,注意,如果在这里定义了左右分割符后,在模板文件中相应的要使每一个变量使用与定义相同的符号,例如在这里指定为"<{"与"}>",htm模板中也要

相应的将{$name}变成<{$name}>,这样程序才可以正确的找到模板变量。

7:$smarty->cache("./cache"):

告诉Smarty输出的模板文件缓存的位置。上一篇我们知道Smarty最大的优点在于它可以缓存,这里就是设置缓存的目录。默认情况下为当前目录下的cache目录,与templates_c目录相当,在linux系统中

我们要确保它的可读可写性。

8:$smarty->cache_lifetime = 60 * 60 * 24:

这里将以秒为单位进行计算缓存有效的时间。第一次缓存时间到期时当Smarty的caching变量设置为true时缓存将被重建。当它的取值为-1时表示建立起的缓存从不过期,为0时表示在程序每次执行时缓

存总是被重新建立。上面的设置表示将cache_lifetime设置为一天。

9:$smarty->caching = 1:

这个属性告诉Smarty是否要进行缓存以及缓存的方式。它可以取3个值,0:Smarty默认值,表示不对模板进行缓存;1:表示Smarty将使用当前定义的cache_lifetime来决定是否结束cache;2:表示

Smarty将使用在cache被建立时使用cache_lifetime这个值。习惯上使用true与false来表示是否进行缓存。

10:$smarty->assign("name", "zaocha"):

该数的原型为assign(string varname, mixed var),varname为模板中使用的模板变量,var指出要将模板变量替换的变量名;其第二种原形为assign(mixed var),我们要在后面的例子详细的讲解这个成员函数的使用方法,assign是Smarty的核心函数之一,所有对模板变量的替换都要使用它。

11:$smarty->display("index.tpl"):

该函数原形为display(string varname),作用为显示一个模板。简单的讲,它将分析处理过的模板显示出来,这里的模板文件不用加路径,只要使用一个文件名就可以了,它路径我们已经在$smarty->templates(string path)中定义过了。

程序执行完后我们可以打开当前目录下的templates_c与cache目录,就会发现在下边多出一些%%的目录,这些目录就是Smarty的编译与缓存目录,它由程序自动生成,不要直接对这些生成的文件进行修改。

以上我简单的把Smarty程序中的一些常用的基本元素介绍了一下,在后边的例子中你可以看到将它们将被多次的使用。

三、模板说明

接下来介绍一个section循环块与foreach循环块,本来它应该属于模板部分,但是由于它们是smarty的精华所在,而且与smarty程序设计部分联系非常紧密,所以就在本节单独拿出来讲一下。

1: foreach:用于循环简单数组,它是一个选择性的section循环,它的定义格式为:

 

{foreach from=$array item=array_id}
{foreachelse}
{/foreach}

其中,from 指出要循环的数组变量,item为要循环的变量名称,循环次数由from所指定的数组变量的个数所决定。{foreachelse}用来当程序中传递过来的数组为空时的处理,下面是一个简单的例子:

 

模板文件:

example.htm页面如下:

 

foreach 输出一个“二维关联数组”的数据: 

{#foreach item=new from=$news#}

新闻编号:{#$new.id#}

新闻内容:{#$new.title#}

{#foreachelse#}
数据库中没有新闻输出!

{#/foreach#}

{foreach from=$newsArray item=newsID}
新闻编号:{$newsID}
新闻内容:{$newsTitle}
{foreachelse}
对不起,数据库中没有新闻输出!

{/foreach}

这是一个错误的不显示数据,本文做了更正。

 

程序文件:example.php如下:

 

<?php
/*********************************************
*
* 文件名: example.php
* 作 用: 显示实例程序2
*********************************************/
include_once("./Smarty/Smarty.class.php");
$smarty = new Smarty();
$smarty->templates("./templates");
$smarty->templates_c("./templates_c");
$smarty->cache("./cache");
$smarty->cache_lifetime = 0;
$smarty->caching = true;
$smarty->left_delimiter = "{#";
$smarty->right_delimiter = "#}";
$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻");
$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻");
$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻");
$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻");
$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻");
$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻");
//这是一个二维关联数组
$smarty->assign("newsArray", $array);
//编译并显示位于./templates下的index.htm模板
$smarty->display("example.htm");
?>

输入结果:example.php输出如下:

 

 

这里将输出一个数组: 

新闻编号:1

新闻内容:第1条新闻

新闻编号:2

新闻内容:第2条新闻

新闻编号:3

新闻内容:第3条新闻

新闻编号:4

新闻内容:第4条新闻

新闻编号:5

新闻内容:第5条新闻

新闻编号:6

新闻内容:第6条新闻

 

foreach还可以用foreachelse来匹配,用foreachelse来表示当传递给foreach的数组为空值时程序要执行的操作,具体的使用方法,请参考手册的说明。

2. section:

section的产生是为解决foreach的不足的,与foreach一样,它用于设计模板内的循环块,它较为复杂,可极大程序上满足程序需要,所以在程序中我习惯使用它而不使用foreach,基本原形为:

 

{section name = name loop = $varName[, start = $start, step = $step, max = $max, show = true]}

 

参数解释如下:

name: section的名称,不用加$

$loop: 要循环的变量,在程序中要使用assign对这个变量进行操作。

$start: 开始循环的下标,循环下标默认由0开始

$step: 每次循环时下标的增数

$max: 最大循环下标

$show: boolean类型,决定是否对这个块进行显示,默认为true
这里有个名词需要说明:

循环下标:实际它的英文名称为index,是索引的意思,这里我将它译成"下标",主要是为了好理解。它表示在显示这个循环块时当前的循环索引,默认从0开始,受$start的影响,如果将$start设为5,它也将从5开始计数,在模板设计部分我们使用过它,这是当前{section}的一个属性,调用方式为Smarty.section.sectionName.index,这里的sectionName指的是函数原型中的name属性。

{section}块具有的属性值,分别为:

1. index: 上边我们介绍的"循环下标",默认为0

2. index_prev: 当前下标的前一个值,默认为-1

3. index_next: 当前下标的下一个值,默认为1

4. first: 是否为第一下循环

5. last: 是否为最后一个循环

6. iteration: 循环次数

7. rownum: 当前的行号,iteration的另一个别名

8. loop: 最后一个循环号,可用在section块后统计section的循环次数

9. total: 循环次数,可用在section块后统计循环次数

10. show: 在函数的声明中有它,用于判断section是否显示

它们的具体属性大家可以参考手册,在程序中可灵活使用它的这些属性,模板部分我就使用过index属性,大家可以回过头去看看。

同样,{section}也可以配合使用{sectionelse},用来表示传入的数组变量为空时对模板进行的处理。

我们把上边的那个例子使用{section}来替代{foreach}来实现现样的功能,注意,在这个例子中我只将tpl模板中的{foreach}用{section}来实现,php程序文件中没有任何改动,同时加了{sectionelse}处理块:

example.tpl模板文件如下:

 

这里将输出一个数组: 

{section name=loop loop=$News}
新闻编号:{$News[loop].newsID}
新闻标题:{$News[loop].newsTitle}
{sectionelse}
对不起,没有任何新闻输入!
{/section}

 

example.php文件如下:

 

<?php
/********************************************* 

*

* 文件名: example7.php

* 作 用: 显示实例程序2

*********************************************/

include_once("./comm/Smarty.class.php");

$smarty = new Smarty();

$smarty->templates("./templates");

$smarty->templates_c("./templates_c");

$smarty->cache("./cache");

$smarty->cache_lifetime = 0;

$smarty->caching = true;

$smarty->left_delimiter = "{";

$smarty->right_delimiter = "}";

$array[] = array("newsID"=>1, "newsTitle"=>"第1条新闻");

$array[] = array("newsID"=>2, "newsTitle"=>"第2条新闻");

$array[] = array("newsID"=>3, "newsTitle"=>"第3条新闻");

$array[] = array("newsID"=>4, "newsTitle"=>"第4条新闻");

$array[] = array("newsID"=>5, "newsTitle"=>"第5条新闻");

$array[] = array("newsID"=>6, "newsTitle"=>"第6条新闻");

$smarty->assign("newsArray", $array);

//编译并显示位于./templates下的index.tpl模板

$smarty->display("example.tpl");

?>

example.php 输出文件如下:

 

这里将输出一个数组: 

新闻编号:1

新闻内容:第1条新闻

新闻编号:2

新闻内容:第2条新闻

新闻编号:3

新闻内容:第3条新闻

新闻编号:4

新闻内容:第4条新闻

新闻编号:5

新闻内容:第5条新闻

新闻编号:6

新闻内容:第6条新闻

这里的{section}块的对于变量的命名方式感觉有些别扭,不过没关系,你只要记住模板变量使用:

 

$loopName[name].var这种模式就行了,loopName为loop处赋予的变量名,[name]为name处赋予的字符串,.后为为你要在程序数组中设定要与值相对应的下标名称就行了。

好了,本文关于smarty程序设计学习指南就写到这里,对于一般的应用,这些知识已经够用了,其它的一些高级技巧大家请参看手册中的例子,此外相关的还有Smarty在实际应用中的例子,以php内置的mysql语句,phplib中的DB类,ADODB,Pear中DB类等等。

php查询mysql输出例子

< ?php
$sql="select * from content";
mysql_query($sql, $con);

$result = mysql_query($sql);
if ($result){
  echo "
    "; while($row = mysql_fetch_array($result)) { echo '
  • '.$row['id'].'|'.$row['title'].'|'.$row['desc'].'
  • '; } echo ""; } ?>

基于Web的IM系统 Mibew Messenger

Mibew Messenger (原名Open Web Messenger )是一个基于 Web 浏览器的即时消息系统,可以用来跟你的客户在线上即时的沟通,特别适用用来做网页的即时客服功能。它可以让客户或访问者与管理员在线聊天(所有聊天记录都将被记录)。该系统支持无限个客服人员、访问 者和聊天记录。提供一个Web管理界面,让管理员可以:设置自动回复信息,跟踪访问人员是从哪里点进来的,搜索历史聊天记录,将信息转发给其它管理员,标 记“变态”访问者,查看当前所有通话情况,当客服人员离线时访问人员还可以留言。聊天窗口外观完全可利用模板自定义。

Latest stable version: Mibew Messenger 2.1.0, 2015-07-14 

下载地址:

https://mibew.org/download2 (官方不含中文,下载页有中文语言包)

http://pan.baidu.com/s/1minJVC0 (含中文)

 

PHP define() 函数

在用jtbc做站时,遇到一个定义常量,无法获取到值,经过排查,得知,define() 函数未设置case_insensitive参数时,默认是区分大小写的。

定义和用法

define() 函数定义一个常量。

常量类似变量,不同之处在于:

在设定以后,常量的值无法更改
常量名不需要开头的美元符号 ($)
作用域不影响对常量的访问
常量值只能是字符串或数字
语法

define(name,value,case_insensitive)
参数 描述
name 必需。规定常量的名称。
value 必需。规定常量的值。
case_insensitive
可选。规定常量的名称是否对大小写敏感。

若设置为 true,则对大小写不敏感。默认是 false(大小写敏感)。

例子

例子 1

定义一个大小写敏感的常量:

<?php
define("GREETING","Hello world!");
echo constant("GREETING");
?>
输出:

Hello world!
例子 2

定义一个大小写不敏感的常量:

<?php
define("GREETING","Hello world!",TRUE);
echo constant("greeting");
?>
输出:

Hello world!

HTML5三个设计方向的自我定位

e45ee7ce7e88149af8dd32b27f9512ce

导语:如今,移动端H5如雨后春笋般迅速发展花样繁多,无论是宣传产品、内容介绍、新闻推广都会想方设法搞套H5出来。

如今,移动端H5如雨后春笋般迅速发展花样繁多,无论是宣传产品、内容介绍、新闻推广都会想方设法搞套H5出来。那么如何在众多H5中脱颖而出?如何使手上的资源发挥最大化?如何扬长避短,做出吸睛的H5?都是摆在我们面前的问题。

在我看来移动端H5可以向三个方向进行设计定位:内容方向、交互方向和视觉方向。

1、内容方向是指介绍内容为主的H5,从用户情感出发,基于大众所熟知和想了解的方面入手。如节日类、信息广告类、电视影片类等。

2、交互方向是指注重与用户建立丰富的互动体验,以用户操作为主要卖点。如游戏类、广告类。

3、视觉方向是指以画面为主的H5,这里指的不单单是好看,而是把重点放在画面执行上,画面更有丰富的动效,做到非常强力视觉冲击力。

设计策划占到以上3方向的一种为“优”,具备两种为“精”,有三种为“神”。但是,重要的是每个方向需要做到极致。我认为目前能占两种的H5还是有一些的,不过具备三种的几乎是不可能。因为想要在这三方向都顾及到的话,最致命缺陷就是文件量太大,目前的带宽和设备的限制对过大的H5传播有着很大影响。

一、内容方向的H5

首先介绍下内容方向的优秀H5。重点放在内容方面要引人入胜,能够吸引特定用户,把H5有目标、有目的的去投放。

《活着》项目组策划的《活在此时》,充分透析了北漂一天的忙碌生活,直击为了生活而奋斗着的年轻人内心,主题震撼,内容充实,闻者心动,见者伤感。

e45ee7ce7e88149af8dd32b27f9512ce
 

为抗战胜利70周年举行盛大阅兵仪式而策划的《阅兵手册》,内容上充分展示了各个方阵的信息,在看阅兵直播的同时,手持这款H5,既长见识还能在人前卖弄。

7d0665438e81d8eceb98c1e31fca80c1
 

系列H5《传统节气》。随着人们开始越来越关注传统文化的传承,二十四节气的由来、习俗等知识,越来越多的人想深入了解。实时推出《传统节气》,既满足了此类人群的需求,又弘扬了传统文化知识。

7d0665438e81d8eceb98c1e31fca80c1
 

二、交互方向的H5

交互方向的H5,重点放在和用户的交互体验方面,让用户有很强的参与感。这就需要在互动过程中要做到完美的体验,吸引用户一步一步按照设计师思路看完H5。

交互方向H5一大类是小游戏,早期的围住神经猫、虐心的小鸟等都是火遍朋友圈。《俄罗斯阅兵—抢答1分钟》参与互动答题,再配上风格独特的手绘图案,可以说是H5中的精品。

a2b1e6813eec96052c81d40ba16e8c59
 

一夜爆火的《吴亦凡即将入伍》游戏推送广告,创新的交互方式让人眼前一亮。整个H5都会让观众惊奇的看到最后。

d72d187df41e10ea7d9fcdc7f5909205
 

《万能时装屋》和《哆啦A梦道具专卖店》,都是可以选择不同的元素,自由组合,最终达到不错的广告效果。

《万能时装屋》是用户在不同的部位选择自己喜欢的装饰,最后把选择的装饰生成一个完整的形象,电商就可以推荐用户一些喜欢的产品,而且可以拼出搞笑、无厘头的形象,增加H5应用趣味。

《哆啦A梦道具专卖店》借用哆啦A梦神奇道具的组合,也是生成实际存在的产品,推送给用户,不免让大家觉得非常有趣神奇。

fad6f4e614a212e80c67249a666d2b09
 

三、视觉方向的H5

视觉方向的H5拥有着炫酷的画面、华丽的动效以及特点鲜明的手绘,让人印象深刻,过目不忘。

说到视觉表现力,不得不提的是大众点评出过一系列H5,无论是画面效果还是夸张的动效,都能给人留下深刻的印象,但是对于内容和交互上就没有那么深入人心了。

0a8005f5594bd67041f88c6196192646
 

《AKQA Winterlands》借势圣诞节,让用户进入水晶球,环视3D场景,让用户有身在其中的感觉,在视觉和互动上达到双赢。

38b3eff8baf56627478ec76a704e9b52
 

了解策划H5的三个方向,不管是编辑、设计师或是开发工程师都可以根据自身的特点去策划H5,编辑如果觉得自己能把内容做的引人入胜,就可以在内容方向下功夫。设计师自然需要在交互上视觉上发挥最大的能力。

尽量在某一方向上做到最优的同时,兼顾其他两方向。定会做出精品H5。

六个步骤搞定更换网站服务器

最近又不少站长朋友发帖咨询说要更换网站的服务器了,但是怕误操作导致网站被K,因为已经有不少的站长朋友来反馈,说自己因为换了IP导致网站被K了。

那么今天百度站长平台新人训练营版主EVER非你不爱就来跟大家谈一下,如何更换网站服务器,换IP,把损失降低到最低,现在我们通过对织梦网站的举例,来进一步的操作!

  一、备份您的网站

首先要做的是将我们的网站进行数据库的打包,对于织梦系统的网站来说,只需要在后台选择【系统】-【数据库备份/还原】选项即可,而后等待数据备份完成!

  图1 织梦数据库备份操作

  图2 织梦数据库备份完成

  二、更换域名解析

在域名提供商那里更换您的域名解析,将域名解析到新的IP上,这里使用百度云加速为例。

  图3 将域名解析到新的IP上

  三、上传网站到新服务器

将您备份好的网站上传并解压到另外一台服务器上,并按照该网站程序的规则进行数据还原,并模拟访问网站是否正常,保证没有死链接的出现!

而使用织梦程序搭建的网站,我们只需要根目录下的整个文件夹打包上传到新的服务器上即可。

而后我们需要进行的操作就是网站的安装和数据的还原了,在上传了整个文件夹后,我们需要将织梦防止重新安装的锁定文件(在install文件夹下的install_lock.txt文件)删除!

  图4删除锁定文件

  接着我们修改锁定文件(install文件下的index.php.bak和module-install.php.bak文件),去除它们的后缀名.bak。

  图5 修改锁定文件后缀名

  访问我们的新服务器上的域名/install/index.php进行织梦网站的重新安装!

  图6 织梦网站的重新安装

  图7 进行织梦程序的安装

  图8 织梦数据库的还原

  图9 数据库还原成功

  四、登录百度站长平台,做IP更换通知

待域名成功绑定并解析到新的IP以后(最好先PING一下是否已经正常解析),即可登录百度站长平台进行对搜索引擎的IP更换通知了,这一步我们就用到了百度站长平台的抓取诊断功能!

  图10PING域名查看解析是否成功

  图11 进入百度站长平台进行抓取诊断

  当我们看到抓取诊断的文件头出现了新的IP的时候,证明我们的基本换服操作已经完成!

  图12抓取诊断成功

  五、保留旧服务器数据、等待服务器最后抓取

如果有条件,最好可以保留旧服务器上的数据两周左右(具体的时间根据网站蜘蛛日志而定),而后就可以清空旧服务器上的数据了!

  六、换服成功

通过以上五步,网站更换服务器就已经成功了!

美国虚拟主机与国内主机哪个好 最全优劣对比

互联网的发达迅速占领拉近了世界的关系,从实物到虚拟,网站之间的交流与影响更是其中变化最快的一组。
最初的一批站长们或许已经转型步入了创业潮,但与网站相关的服务器、域名、主机等问题却仍是大多数互联网“商人”(创业者、站长、企业……)们需要了解的基本技能。
在虚拟主机领域较为出名的三大品牌:国内主机,以及其中特指的香港主机,美国虚拟主机。接下来通过美国虚拟主机与国内主机的主要性能、优劣等方面的详细对比,以帮助网站运营者们作出一个最佳、最合适的虚拟主机选择。
国内主机优势、劣势
速度更块
主机与网站的距离常常是决定着网速的主要因素,即便是拥有更好稳定性的海外主机,在经过多次的路由中转、或是光缆的跨洋跨海之后,虚拟主机的运行速度也多会慢下很多来。
而作为直接影响用户体验的网站运行速度、以及与之相关的稳定性等,都注定了国内主机的速度将更快。
除了一些跨境电商网站在此性能上刚好完全相反以外,所有的国内建站者使用国内的主机都将具有更加的速度优势。
版权问题相对松弛
我们不去讨论政策的好与坏,只就版权的现况来看,国内对版权问题的管理相对松懈,使用美国虚拟主机的网站,相对应的,将面临的投诉等各种版权问题也就更多,而国内主机的使用者们也就面临着更少的版权处理问题。
适用程度
在语言的适用程度上,从技术支持到主机使用再到售后服务,国内主机的使用也都更占有优势。
美国虚拟主机的优劣
免备案
这几乎是很多站长们选择美国虚拟主机的主要原因之一,向工信部提交各种备案信息处理繁琐又复杂,死在提交路上的就占有很大一部分,对于草根阶级的站长们来说,处理各种行政问题也就更加困难,那么dudrop、godaddy等一系列免备案的美国虚拟主机也就成了大批站长们的“救命草”。
性价比高
从技术层面讲,美国虚拟主机普遍比国内主机强,无论是技术支持还是24小时的售后技术服务,都比国内的主机要好,对比于国内大部分虚拟主机,dudrop等技术更强,服务更到位的美国虚拟主机也都更能获得站长们的青睐。

如何使用rel=‘external nofollow’标签来控制链接权重

nofollow标签是一两年前由Google领头新创的一个标签,目的是尽量减少垃圾链接对搜索引擎的影响。这个标签的意义是告诉搜索引擎这个链接不是经过作者自己编辑的,所以这个链接不是一个信任票。

这个标签通常是用在博客的评论或论坛帖子中,因为这些地方是最多垃圾链接出现的地方。现在主流的博客和论坛软件都自动在评论和帖子的链接中加上了这个标签。几乎所有wordpress博客和Z-blog,当然清晨博客也在内,在seo方面都做的很不错。

新站点的推广少不了用这种方法,在一些权重比较高的、流量大的博客或论坛发表评论并留下签名链接是新站长的一惯做法。如此说来,这种做法似乎毫无作用了,因为没用nofollow标签的博客太少了。 这个博客也是新站,前段时间做小量的这类工作,看来成效确实不大,至少在谷歌网站管理员工具中的反向链接统计中没有反应出任何有效链接。

很多文章都说Google,Yahoo,MSN表示支持这个标签,最近百度官方也提出的完全支持这个标签。

external就是指外部站点,我们要在新窗口中打开链接传统的通常做法是在链接后面加target="_blank",我们采用过渡型的 DOCTYPE(xhtml1- transitional. dtd) 时没有问题,但是当我们使用严格的DOCTYPE(xhtml1-strict.dtd)时,这个方法将通不过 W3C的校验,会出现如下错误提示:

div css xhtml xml Example Source Code Example Source Code
"there is no attribute target for this element(in this HTML version)"

原来在HTML4.01/XHTML1.0/XHTML1.1严格DOCTYPE下,target="_blank"、target="_self"等等语法都是无效的,为什么不允许使用target="_blank"呢?因为老外觉得不经过用户同意,没有明确提示就打开一个新窗口是不礼貌的。所以就通过 rel="external"来声明此链接是外部站点。至于如何在新窗口中打开,可以使用javascript实现:

function externallinks() {
  if (!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for (var i=0; i<anchors.length; i++) { 
    var anchor = anchors;
    if (anchor.getAttribute("href") &&  anchor.getAttribute("rel") == "external nofollow")      anchor.target = "_blank"; 
    }
    }
window.onload = externallinks

把上述代码保存成一个.js文件(比如external.js),然后通过外部联接方法调用:


HTML5 Shiv – 让IE系列支持HTML5

HTML5能为我们做的事儿很多,最为可口的就是语义化标签的应用,如果你已经在Chrome或者其他支持HTML5的浏览器上用过它的牛x,那这篇文章对你一定有用,因为现在你也可以在IE上用到HTML5。

下面是引用Google的html5.js文件,好处就不说了:

将上代码复制到head部分,记住一定要是head部分(因为IE必须在元素解析前知道这个元素,所以这个js文件不能在其他位置调用,否则失效)

当然,你也可以把代码拿出来自己看着办:

(function(){if(!/*@cc_on!@*/0)return;var e ="abbr,article,aside,audio,canvas,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video".split(','),i=e.length;while(i--){document.createElement(e[i])}})()

最后在css里面加上这段:

/*html5*/
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

主要是让这些html5标签成块状,像div那样。

好了,简单吧,一句话概括就是:引用html5.js  使html5标签成块状