網生@誌 | zEUS.'Blog

首页 » 与我有关 » 2006-12-26 »

模板修改手札之分离Sidebar

Tag:
字体大小:T | T

引言:
众所周知,“JavaScript”是页面展开速度的大敌。所以为了保证速度,我尽量少在页面上添加JS。但由于wp-poll这个插件我一直没弄好,所以不得以选择了PollDaddy.com作为我的投票系统。什么是PollDaddy.com ?你可以参见 JC的这篇日志 。引用“PollDaddy”投票的同时就意味着在页面上添加了一段JS。据我观察每当页面刷到有JS的地方总会停顿下来,若JS没有被加载完成,那么JS后面的内容均不能显示。由于页面的展开顺序是由程序决定的,因而我尽可能把JS放在后面执行,这样就不会对页面的载入有太大影响。

插件也影响到了页面的展开速度,有的插件执行效率高,那么对整个页面的影响微乎其微。若是一个效率低下的插件的话,就比较惨了…不过和JS相比,插件的影响要稍小一些~~

正题:
每开一个页面(page.php)或者一篇日志(single.php),PollDaddy.com 都会加载一次,页面展开速度和页面总体外观都会受到一定影响,那么有什么办法可以尽可能减少 PollDaddy.com 对页面加载速度的影响呢?我想到的一个方法就是在打开page页面和single日志的时候不加载 PollDaddy.com 。

由于PollDaddy.com 位于 sidebar上,那么我可以另外做一个没有JS的sidebar来代替page页面和single日志上的sidebar。于是我做了一个新sidebar:“postsidebar.php”,上传到主题的根目录下,然后进入wp后台→外观→主题编辑器→编辑“single.php”,找到

<?php get_sidebar(); ?>

替换为:

<?php get_postsidebar(); ?>

我本以为 get 语句可以直接调用“.php”文件,可事实却并非如此。修改完毕之后我刷新single日志页面,发现一句错误提示,大意是没有找到“get_postsidebar”这个函数。然后我就想方设法的定义“postsidebar”,可最终都失败了。
但我实在不想就这么放弃,于是请教了hvl小O,他们给了我一些很好的建议和理论上的帮助,然后我又在Internet上搜到这么一篇文章:Sidebar一分為二。然后如此如此这般这般…于是乎大工告成!?

代替原来sidebar上的内容并非是更换sidebar文件,而是直接修改sidebar文件。在sidebar显示它上面的内容之前我们可以给它一个条件来决定是否显示该内容。例如我的sidebar被分成了3个部分,就拿第一部分“subcontainer”来说,先找到:

<?php if ( !function_exists(‘dynamic_sidebar’)
|| !dynamic_sidebar(1) ) : ?>

然后在它的前面加上一段:

<?php if (is_home()||is_page()) { ?>

最后在这段PHP if 语句的末尾加上:

<?php } ?>

那么我们就决定了sidebar上的“subcontainer”只在 home 页和 page 页显示,它就不会在 single 页上显示了。然后我在“subcontainer”这个类后面再加上一个新的“subcontainer”类,并赋给里面的内容另外的显示条件:

<?php if (is_single()) { ?>

和相应的:

<?php } ?>

那么,新的“subcontainer”类中的内容就只会在 single 页上显示了。相应的我把sidebar里的另外2个部分的显示内容也做修改。这样在 single 页上,我不仅去掉 PollDaddy.com 提升了页面展开的速度,而且在sidebar上放上了和日志相关的内容,给读者提供了一定的信息量。(不要BS我去掉PollDaddy.com的JS却放上了Adsense的JS啊 -_- 其实Adsense这个JS的载入速度是相当快的…)

花了大半天的时间终于达成了自己想要的效果,总体来说还是很满意的。不过我还是发现了一个问题,我定义了这些sidebar的内容可以分别显示在 home 页、page 页、single 页上,但它们无法显示在 分类汇总 和 标签汇总 页面上……貌似可以使用“ if—else”的条件语句来达成效果,可惜我不知道它们在PHP里具体的格式 T_T 还望PHP达人助我一臂之力啊!

zEUS.

« »

已经有208人发表了评论

  1. 摩摩诘 on 2008年, 六月 30日 at 11:45 上午 said:

    我K,代码被残忍地过滤了,好凄惨.[ → <
    [?php include(‘postsidebar.php’); ?]

    呵呵,这个问题我已经知道怎么解决了 🙂

  2. 我K,代码被残忍地过滤了,好凄惨.[ → <
    [?php include(‘postsidebar.php’); ?]

  3. 呵呵,搜到你这里来了,貌似可以用include语句来调用.php文件:

  4. 😉 不是有个中文站易投网么?www.evoting.cn

  5. 看到了,看来还是有修改的,没有集合的一个rar包?

  6. 咦?你用的不是 3栏的 K2 怎么只显示两栏?

  7. Parse error: parse error, unexpected $ in /home/www/zeuscn.net/wp-content/themes/3ColumnK2/sidebar.php on line 230

    也没发出来了

  8. 哈哈 我只有600多行哦

文章反相链接 Pingback/Trackback

  1. 博客版本升级 1.03 at I Should Do…| zEUS.’Blog
  2. wordpress模板 FH Freedom blue 0.2

发表您的看法

TOP COMMENTS BOTTOM