十一月
30

一句代码美化你的链接页面模板(links.php)-自动显示favicon图标,非js方法

很多时候,很长时间以后,我们找了很多友链。但是这些友链并不是要全部放到首页侧边栏友链处,或者有些人根本就将所有链接都放到内页。于是,为了简便,做一个链接页面模板(links.php)是个不二选择。

很多人,很多WordPress主题都这样做了。通过WordPress的调用函数可以自动添加删除友链。很方便。

但是,有些人的链接页面就是一堆,一个接一个,密密麻麻;有的稍好,还分分类。如下面:

tmpB495
我之前也是这么做的,简单的分分类,然后css中给每个a链接前面加个小网络图标。其实这么做完全可以了。但是,前几天我在某位博友那里看到他的友链展示页面,前面的图标不全是小网络图标,有些则是那个博客的favicon地址栏图标。看起来非常不错。今天突然想到,我是不是也可以改造一下自己的友链页面。

虽然WordPress后台有给每个链接添加图片的设置,通过函数可以调用,但是那得手动一个一个添加图片,这么一来还不如搞个静态的页面。现在都讲究自动化,这个当然也要。我没有与之前看到的那位博主交流,今天一时也记不得那次是在哪位博主那里看到的了,不知道他是如何实现的,是用强大的jQuery还是自己写的JavaScript亦或者是其他方法。我是钟情于使用jQuery的,因为提供的强大的选择器功能可以很方便地的选择页面需要的元素。开初步实现了了给每个有favicon的博客链接添加其favicon图标,但在要去掉有favicon图标的链接前的小地球网络图标时,我忽然想到,其实没必要这么麻烦。于是,诞生了这么个简单的方法(以下不是教程,是我自己所用主题修改的一个思路。实现方法请看文章结尾):

我的链接模板(inove)处代码如下:

<div class="links"> 
<ul> 
<?php 
$bookmarks = get_bookmarks(回调参数); 
if ( !empty($bookmarks) ) { 
foreach ($bookmarks as $bookmark) { 
echo '<li><a href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" target="_blank" >' . $bookmark->link_name . '</a></li>'; 
} 
} 
?> 
</ul> 
<div class="fixed"></div> 
</div>

PS:这段代码并不十分好,中间又传递了参数,将链接单独提取出来了,不过这样一来倒是正好方便我以下的修改了。而大多数人的用的比较简洁的代码是

<?php wp_list_bookmarks(回调参数); ?>

参数参考wp手册。如果你是这样的调用函数,下面我说的插入的代码则要加入到回调参数中了。

css中样式中对a链接处样式:

.links{} 
.links ul{} 
.liks li{} 
.linkcat li a{ 
background:url(img/links.gif) no-repeat; 
padding-left:22px; 
height:16px; 
line-height:16px; 
display:block; 
}

我可以直接在上面绿色的<li>标签后面加上一个img——<img width="16px";height="16px"; src="’ . $bookmark->link_url . ‘/favicon.ico" />,即绿色字体代码变为:

<li><img width="16px";height="16px"; src="' . $bookmark->link_url . '/favicon.ico" /><a href="' . $bookmark->link_url . '" title="' . $bookmark->link_description . '" target="_blank" >' . $bookmark->link_name . '</a></li>

这样,如果有地址栏图标的博客地址就会出现favicon图标了。但是,原先的地球图标依然存在,我们要想办法将其隐藏掉。这里可以用JavaScript,但是,css也可以做到。那么,css中如何修改呢?

我们可以用这个favicon图标覆盖掉原先的,并设置图标背景颜色与网页颜色一致。

ww

css中对这个favicon图标的样式设定(根据自己具体情况自定义设置,这里是举例):

.post .content .linkcat li img { //选择img图标元素 
float:left; 
background:背景颜色; 
margin:X X; 
}

这样,我们就可以通过覆盖来隐藏掉那个小地球图标。最后,看看我自己的效果吧,也可点击本站导航“links”页面

tmp1819

很不幸,但我做完这一切的时候,发现只在Firefox3.6下测试通过,IE下favicon图标浮动在地球网络图标下方,opera和chrome下获取失败的图标显示XX。最终,这使我明白,各个浏览器对于获取图片失败的不同处理方式。

——————————————————————分割线——————————————————————

呵呵,讲了这么多,最后居然只能在火狐下实现。其实我也是在说了以上那么多话以后才发现这个兼容性错误的。怎么办,重新来过?于是我想换个思路,使无法获取图标的时候能获取一个默认图标。我于是查资料,发现有两个方法可以解决:

  1. 图片地址用http://www.google.com/s2/favicons?domain=博客地址,这个可行,但是我发现取得的默认图标是有白色背景的,我不想为了这个方法而去修改页面颜色。
  2. 利用img的onerror属性,定义获取图片失败后的默认图片。如下: <img width="16px";height="16px"; src="’ . $bookmark->link_url . ‘/favicon.ico" onerror=”javascript:this.src=\’files/links.gif\’” />

很重要的一点,onerror后面双引号里面那个JavaScript脚本,单引号前面必须加上转义符“\”,因为这段img代码是在php中用“echo()”输出的。不加转义符会出问题,但是我对php只是初步了解,实在看不出和哪里冲突了,难道是因为多了个等号?

其实我一开始就思考岔路了,把一个简单问题复杂化了。甚至一度想用JavaScript去实现。另外我也被之前加入的那个默认网络图标给迷惑了,一直在想如何能在有favicon图标的时候隐藏它,没有favicon的时候则显示它。而其实直接去掉它,弄张默认图片就行了。

如此一来,实现就很容易了,直接诶将以上代码写在要显示的地方即可。甚至css也不用写了。对,只需这一句代码。

——————————————————————分割线——————————————————————

最后,提醒一点啊,这里我是通过“http://博客地址/favicon.ico”来获取那个地址栏图标的,也就是说只有你的favicon图标放在博客根目录下才可以获取。而我们一般也是推荐这个地址栏图标用ico格式,命名为“favicon”并放置于根目录。虽然gif,png格式也可以,但是对于ie就会出现问题。

补充:上面很乱,有人抱怨看不懂。总结一下,就是上面那些完全都不必看,那是我自己摸索的思路。想要添加favicon图标,只需在每个li标签中添加<img width="16px";height="16px"; src="链接地址/favicon.ico" onerror=”javascript:this.src=\’默认图片\’” /> 即可。

另外,大家也都看到了,我的友链较少,也欢迎各位认真经营自己博客的博主来与我交换链接。

补充:本来我是准备每周更新两到三篇日志的,但是突然发现马上明天就是12月份了。所以趁着今天周末,昨天和今天各更新了一篇。以后能不能及时更新也说不准。时间,真的不多了。。。

本文标签: , , , ,

分享

本文短网址: http://qiqi.boy.im/29

这篇文章已经有 38 条评论

Comments (34) Trackbacks (4)
You can leave a response or Trackback this entry .
  1. 万戈 -#1

    很好,写的好详细

  2. QiQiBoY -#2

    @ 万戈

    万戈 :

    很好,写的好详细

    看了你的友链页面,你的是通过js调取的吧。。。

  3. evlos -#3

    呵呵,Php方法显示Favcion灰常有创意 ~
    支持一下博主 ~

  4. GEZ鸽子 -#4

    不错!博主的空间很漂亮啊!羡慕!!!

  5. QiQiBoY -#5

    @ evlos
    这个是在php中修改的,不过其实修改的也都是围绕img这个标签来的。。。

    @ GEZ鸽子
    呵呵,谢谢诶,我其实更喜欢听到别人“简洁大方”之类的赞美 :smile:

  6. 卢松松 -#6

    可以把CSS取出来 放到ASP上去

  7. QiQiBoY -#7

    @ 卢松松

    卢松松 :

    可以把CSS取出来 放到ASP上去

    你是指将样式写到php里吧,我用的是WordPress。因为这些css写入php中生成html时每个img对象都会重复,所以我还是写入style.css中了。这样我感觉差别也不大。
    另外,松松你的博客我已经好多天都无法打开了。我是教育网。是不是被河蟹了?

  8. 夏影残雪 -#8

    介个。。。介个。。。。。
    你说得蛮好蛮详细的。。。。

    可素。。。。这个…… 呃~~ -______-” 。。。。。
    我一小白不太懂耶,我也想实现这种效果,不如给link的模板代码给我看看吧, :arrow:

  9. 夏影残雪 -#9

    另外,想请教一下你那个评论表情弹出窗口怎么实现的?

  10. QiQiBoY -#10

    @ 夏影残雪
    你可以将你的links.php邮件发给给我,我改好后再发给你,行吧?
    我的Email
    about qiqiboy

    夏影残雪 :

    另外,想请教一下你那个评论表情弹出窗口怎么实现的?

    表情窗口是用mg的Highslide4WP插件,你可以在此查看及下载http://www.neoease.com/highslide4wp/

  11. QiQiBoY -#11

    @ 夏影残雪
    汗。。看走眼了。。。。。
    那个link源码我已经在文章中写出来了,第一个代码框里的就是啦。。。完整的就是在前后加上< ?php get_footer(); ?>和< ?php get_header(); ?>,获取头部和底部模板就是了。。 :twisted:

  12. Blinux -#12

    哇。qiqi的博客很漂亮阿

  13. 笑话 -#13

    不错,有空试试看,我的都手动添加,蛮难看的…

  14. QiQiBoY -#14

    @ Blinux
    呵呵,谢谢

    @ 笑话
    友链不多的话,手动添加加也还不错。。

  15. HACKCRAFT -#15

    但是WP的favion.ico好像是放在主题目录的,如果手动加的话应该还是不麻烦

  16. QiQiBoY -#16

    @ HACKCRAFT

    HACKCRAFT :

    但是WP的favion.ico好像是放在主题目录的,如果手动加的话应该还是不麻烦

    你理解错了,一般情况下我们命名地址栏图标为favicon.ico,并置于网站根目录下,不必特别添加代码浏览器即会自动搜寻这个图标并显示出来。
    但是放置于主题目录或其他位置下,要想让浏览器识别,必须在header中添加“
    《link type=”image/x-icon” href=”图标放置地址” rel=”shortcut icon”/》
    ”才行,并且名称可以随意设置,文件格式也可以是jpg、gif、png等。

  17. HACKCRAFT -#17

    @QiQiBoY
    添加的连接是读取域名根目录的图标favicon.ico,如果WP的博客没有将favicon.ico也放在根目录下这样就没有图标,而浏览器可以正常读取图标,这个如果加上读取主题下的就不错了~~

  18. QiQiBoY -#18

    @ HACKCRAFT
    我只能告诉你放在WP主题目录下是不可以的,你可以查看一下你的页面源码,header最后一行你的就有上面我说的那句代码。

  19. 上海女seo朱云 -#19

    不太会写代码

  20. QiQiBoY -#20

    @上海女seo朱云
    其实不难的,这个就是给具有折腾精神的博友看滴。。。

  1. 增强用户体验,进一步美化友链页面,添加loading图片

    [...] 上篇文章我讲了对友情链接页面的美化——自动添加favicon.ico图标,后来在测试中,发现由于icon图标是从各个网站上下载下来的,由于其所处服务器的不同,导致下载速度不一,有时需要很久才可以下载过来,这严重影响了我的网站的加载速度。有没有什么方法能改变这种状况? [...]

  2. 修改trackback样式,统一评论外观

    [...] trackback的“头像”来自发送trackback的网站的favicon图标,这个容易获得,从trackback的链接中获取网站域名,然后通过google那个获取网站favicon图标的地址获得图标。当然,我并不是这个方法,因为我觉得我有更好的方法。可以参考我早期的一篇文章《一句代码美化你的链接页面模板(links.php)-自动显示favicon图标,非js方法》。我的友链页面也是用这种方法,还可以加上loading背景图,而不用担心favicon图标太小或透明露出后面的loading图片,因为图标加载成功后就会清除掉loading。 [...]

  3. 补充《修改trackback样式,统一评论外观》中代码

    [...] 具体的我在《一句代码美化你的链接页面模板(links.php)-自动显示favicon图标,非js方法》此文中已经提到过,当然,你也可以使用google的favicon图标缓存地址,改为以下形式 [...]

  4. 添加带favicon的自定义友情链接页面

    [...] 123456.page-links{overflow:hidden;margin:0 0 24px;padding:0;} .page-links h3{border-bottom:1px solid #bfbebe;text-align:center;margin:0;} .page-links ul{margin:0;padding:5px 0 0 0;} .page-links ul li{float:left;width:150px;line-height:16px;height:16px;margin:5px 5px 0;padding:0;list-style-type:none;} .page-links ul li:hover{background:#f2f2f2;} .page-links ul li img{width:16px;height:16px;margin:0 5px -2px 0;padding:0;border:none;} 5. 建立一个页面,使用links为页面模板即可。 注:ICO图标最好上传到网站更目录,这样便于谷歌收入。在Opera下ICO图标也最好上传到网站更目录,本站友情链接页面使用的是谷歌自带的ICO图标,在文 章开头已经给出地址。 如果您想了解关于本文代码的原理,可以阅读 这篇文章。 [...]

Leave a Reply

Hi , say something.

  • :?:
  • :razz:
  • :sad:
  • :evil:
  • :!:
  • :smile:
  • :oops:
  • :grin:
  • :eek:
  • :shock:
  • :???:
  • :cool:
  • :lol:
  • :mad:
  • :twisted:
  • :roll:
  • :wink:
  • :idea:
  • :arrow:
  • :neutral:
  • :cry:
  • :mrgreen: