十一月
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

这篇文章已经有 37 条评论

Comments (33) Trackbacks (4)
You can leave a response or Trackback this entry .
  1. HACKCRAFT -#21

    @QiQiBoY
    呃..有些纠结了..你没明白我的意思…我知道是有这句代码的..我的意思是说不少人的博客只在主题目录下有ico而没有放到根目录下,浏览器读取的时候根据header标签读取,但是用这种方法添加就没有了。

  2. 吓我一跳 -#22

    这个方法不错 比上次万戈介绍的那个好

  3. Yongd -#23

    我也要考虑为我的博客添加此功能了。

    • QiQiBoY --#1

      @ Yongd : 希望你能成功。。。不过我发现用jQuery更容易。。 如果你已经引入jQuery了:!:

  4. 万戈 -#24

    最新评论测试,可删~

  5. Nox -#25

    为什么我的链接页面会是这个样子的,能不能改下。。。

    http://imn.im/links

    帮我看看,老大。

    • QiQiBoY --#1

      @ Nox : 我之前用的是mg的模板,以为友链调用都是跟我一样的,后来才发现好多都是用WP内置函数。你看一下mg的这篇文章,再来看我的就知道怎么修改了。http://www.neoease.com/show-wordpress-links-order-by-category/

  6. zwwooooo -#26

    拿走了,哈

  7. Pacifiers -#27

    I really liked visiting your blog, and it looks wonderful. If you get a chance you should visit my blog as well. I hope you have a good day!

  8. IM路人 -#28

    原理我看明白了,也比较简单,但有个问题

    我用的是来调用的

    你的那个 我应该加到哪里,求解

  9. IM路人 -#29

    我用的是来调用的<?php my_list_bookmarks('title_li=&categorize=1&orderby=rand'); ?>

  10. QiQiBoY -#30

    @IM路人
    嗯。。你下载inove这款主题,然后查看它的links.php模板。。。。我写这篇文章时刚接触wordpress,使用inove,以为每个主题的友情链接调用都是像inove那样的。。。

  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: