在主题上添加风格切换功能 (1)

Jan 22nd, 2009 Add Comment

本文讨论的是如何在主题上添加风格切换功能. 这里将以 Classic 主题为模板, 用红绿蓝三种颜色作为例子, 手牵手地教你如何实现这个功能. 当然这是最简单的实现, 它可以变得更加灵活, 更加强大, 但这些只能在以后的文章中另作讨论. 本文会为你展示一个尽量简化的, 便于理解模型.

1. 用 JavaScript 实现的切换功能
本例的演示主题中我已经提供了完整的 JavaScript 代码 (js/styleswitcher.js), 如果你对 JavaScript 并不熟悉则没有必要研究它, 知道怎么调用就行了. 这段代码要利用 Cookie, 可以获取当前主题的样式代号(第一次取默认主题的), 和保存当前主题的样式代号.
js/styleswitcher.js 文件内 99% 的代码来自 wpdesigner7 主题. 但我修改过的 1% 决定了我的处理方法和 wpdesigner7 主题并不相同, 后续文章中我会说说其中的区别与优缺点.

2 .在主题中引用脚本 js/styleswitcher.js
在 header.php 的 <head> 和 </head> 之间添加以下代码:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/js/styleswitcher.js"></script>

3. 在主题中添加切换按钮
在主题内任何地方添加都可以, 但为了方便查阅我们还是将这些按钮添加到 header 中. 一共三个按钮, 在 header.php 文件的最后面追加以下代码:

<div id="styleswitchers">
	<a id="style-green" onclick="setActiveStyleSheet('green');" href="javascript:void(0);">green</a>
	<a id="style-blue" onclick="setActiveStyleSheet('blue');" href="javascript:void(0);">blue</a>
	<a id="style-red" onclick="setActiveStyleSheet('red');" href="javascript:void(0);">red</a>
	<div style="clear:both;"></div>
</div>

4. 为切换按钮的外形定义样式
在 style.css 中追加以下代码:

#styleswitchers a {
	width:16px; /* 宽度为 16 个像素 */
	height:16px; /* 高度为 16 个像素 */
	text-indent:-999em; /* 不显示文本信息 */
	display:block; /* 为了不显示文本信息而定义为块状 */
	float:left; /* 左对齐 */
	margin-right:4px; /* 按钮右边的外边距 */
}

5. 定义不同风格的样式 (以红色为例)
创建文件 styles/red/default.cssstyles/red/global.css 两个文件, 其中 default.css 只在激活该风格时才会生效, 它控制整个界面的样式; 而 global.css 则是任何时候有效的, 它只负责确定切换按钮的样式.

Q1: 为什么不将 default.css 和 global.css 两个文件合并在一起?
A1: 因为我们要将主题样式和按钮样式分离开, 在本例中并看不出有什么优点, 但在后续文章的例子中, 这将变成极大的方便. 如: 一个主题本来有 1, 2, 3 三种风格, 当引入风格 4 的时候, 我们就不需要再去修改 1, 2, 3 中关于 4 风格的切换按钮样式了 (各负责各的).

Q2: 分为 default.css 和 global.css 两个文件对性能有什么影响?
A2: 因为链接数多了, 所以效率相对低一点点, 但这是微乎其微的, 不会影响用户体验.

Q3: 什么情况下不用分为 default.css 和 global.css 两个文件.
A3: 如果你的风格不多, 或者风格数量不变, 那没有必要分为两个文件.

这里的 styles/red/default.css 只是修改了 header 和 footer 的背景颜色, 代码如下:

.credit {
	background:#a09090;
}
#header {
	background:#a09090;
}

styles/red/global.css 定义了红色风格切换按钮的样式, 代码如下:

a#style-red {
	background:#a09090;
}
a#style-red:hover {
	background:#e09090;
}

以同样的方式创建 green 和 blue 风格. 如果你要创建更多风格或者用别的命名, 请保持使用英文, 数字和下划线的组合 (数字不能是第一个字符), 因为 HTML 标签中的 id 和 class 属性不能存在其他的字符.

6. 在主题中引入各种风格的样式
在 header.php 的 <head> 和 </head> 之间添加以下代码: (第一个为默认风格)

<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/green/default.css" type="text/css" media="screen" title="green" />
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/green/global.css" type="text/css" media="screen" />
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/blue/default.css" type="text/css" media="screen" title="blue" />
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/blue/global.css" type="text/css" media="screen" />
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/red/default.css" type="text/css" media="screen" title="red" />
<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/styles/red/global.css" type="text/css" media="screen" />

现在 Classic 主题已经拥有了简单的风格切换功能. 你也可以点击下面的链接下载我已经修改好的主题:
classic_with_styleswitcher_1.zip

下次, 我们会讨论一下本例与 wpdesigner7 主题在处理风格切换上的主要不同, 如果你本文或者以后的章节有任何意见和想法, 请在此留言.

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: 在主题上添加风格切换功能 (1)

  1. http://0.gravatar.com/avatar/cab963ed5a8f34ea97a0769184715808?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @mg12
    mohamad hassan 说的是这个link
    classic_with_styleswitcher_1.zip

  2. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @connie
    @calcifer 正解!
    评论者头像到后台禁掉就可以了.

    @mohamad hassan
    Which link?

  3. http://0.gravatar.com/avatar/cab963ed5a8f34ea97a0769184715808?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @connie
    1、修改CSS,找到 #tagline 删除 border-top:1px solid #FFFFFF; 就OK了。
    2、请使用插件…… Recent Comment,在widgets设置其显示模式

  4. http://1.gravatar.com/avatar/3ecc65a969d351f08906c4489909fa96?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
    mohamad hassan | May 18th, 2009 at 02:59

    hello dear
    the link of downliad is broken
    please repair
    best rigards

  5. http://1.gravatar.com/avatar/b95451f8e67d64027655dc932e4037f4?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    还有,就是我想在首页 最新留言那显示留言者的头像,请问该怎么弄呢?
    再谢啦.

  6. http://1.gravatar.com/avatar/b95451f8e67d64027655dc932e4037f4?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    你好!
    我也超喜欢你设计的主题,功能太全了,而且还可以根据自己的需要更改样式,非常好
    不过,偶是菜鸟,对css一窍不通,现在遇到点问题,就是我想去掉博客名称下面的细线,可是能力有限,搞了半天都没搞好,现在向前辈请教,请问能具体说明一下怎么做吗?谢谢

  7. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @Sean
    肯定会. 用不用看你怎么认为而已.

  8. http://0.gravatar.com/avatar/23ac4e3bdbe0bcbd47f6ed131cd0dca5?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这样做 会不会增加很多的http请求 ?影响速度啊?

  9. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @LSvKing.CN
    早换了, 那个没前途...

    @hiswing
    同乐

    @向右
    不晚, 2009 年都还没结束, 哈哈~

    @小王子
    互相学习.

  10. http://0.gravatar.com/avatar/4d5eeed93e9c0eee4e561d9b12176ce1?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  11. http://0.gravatar.com/avatar/8c3cce7bd5c29882a513c43f594a0146?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    希望现在说“新年好”应该不算太晚~呵呵

  12. http://0.gravatar.com/avatar/6a7fb06ff9b47454a5f76f5d54e52465?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    来拜年啦,新年快乐

  13. http://0.gravatar.com/avatar/82c825bf70afca16c4c39ef75c0610f3?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    不错,支持~~~~~~~~

  14. http://1.gravatar.com/avatar/91ec3bf021b47eeb87510ae07070b80f?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    哥们,来给你拜个晚年了,咋换域名啦。

  15. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @YYY
    这是 Highslide4WP 插件, 你可以到导航栏点击访问我的插件页面下载.
    h3 要改 sidebar.php 的东西, 如果你用 Widget 那就到 functions.php 修改吧.

    @Salafysidoarjo
    No, I am a Chinese.

  16. http://0.gravatar.com/avatar/e23c439f6b4143d7f3a3282bb1520663?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    very nice theme thanks....btw are you japanese?

  17. http://1.gravatar.com/avatar/1d7090579305596a4888f820b815fee6?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    刚发现了,发表评论后不用刷新页面而是等待的一个小画面怎么实现的?你这里太多符合我风格的东西了。哈哈。 :smile: 顺便提个建议:sidebar里的分隔条是5像素的,压扁成3像素高会觉得更精致。(个人观点 :grin:

  18. http://1.gravatar.com/avatar/1d7090579305596a4888f820b815fee6?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    你好,刚用上你的主题,很好很强大。想问下 :mrgreen: 这个表情是什么插件?还是用别的方法实现的。另外sidebar里的中文标题h3字体在哪里更换?我找了很久,谢谢了! :?:

  19. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  20. http://0.gravatar.com/avatar/8bc5a10d6cd90aec2d2e24b53042856f?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    技术文章,不错!
    新年快乐!

  21. http://0.gravatar.com/avatar/a2d74a6c3b2fc761e99fbc0354022fdb?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    这个功能实现的方式很多,单独的插件也许是个更好的选择,因为可以独立的卸载,而且可以跟所有的Themes共存。

  22. http://1.gravatar.com/avatar/bdb8b1b5ce2de2b8d0c1f6e89049ce28?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我想知道..这个主题还有没有机会支持2.7的套套回复?

  23. http://0.gravatar.com/avatar/c419cb20777cc932e6edbc4aecf3400d?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    看来大家都忙去过年了!!
    我是来拜年的,新年快乐哈!

  24. http://1.gravatar.com/avatar/b2a4a8583709521e13d79f8519b07954?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    呵呵,新年恭祝各位,新春快乐,万事胜意,心想事成,牛年有喜! :wink:

  25. http://1.gravatar.com/avatar/9a5193348fd9e5b46528fdf6f3d849fe?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    祝万事如意,牛年行大运,万事如意。

  26. http://0.gravatar.com/avatar/021df48f47b605c198fc71f2c2660d78?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  27. http://0.gravatar.com/avatar/490cf262668eebb0f0f1a50d9d48d702?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    @猪小猪
    @unicac
    @M.蘾娚
    (- -!) 一个极少图片的主题再慢也不会比一个靠图片搭建起来的主题慢, 心理作用...

  28. http://1.gravatar.com/avatar/98eba59253334dcc5848b41c13d6f6ad?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我在测试blog的主题,感觉有点慢,O(∩_∩)O~ :cool:

  29. http://0.gravatar.com/avatar/023faf26aad027c7f758b870d18594da?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  30. http://1.gravatar.com/avatar/b19a2eda07d44c4a9e83c8e99046be75?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    紧紧跟随mg的脚步,一步一步学完这个教程

  31. http://1.gravatar.com/avatar/be693e2632ae5668ec1fecc8e6f8c9e5?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    that's cool, thanks for the tips to change theme easily:) :razz:

  32. http://0.gravatar.com/avatar/c9f93a2f60fc94dcefa1c886320ac389?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    文章很好,很有用的。转载一下,Thank you!O(∩_∩)O~

  33. http://1.gravatar.com/avatar/3fb2a66e82fc52526ca963d5046a097e?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    没事还是不要换主题的好!

  34. http://1.gravatar.com/avatar/f1f1679b34c2b32808c882bf9428fe57?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    的确感觉有点慢!

  35. http://1.gravatar.com/avatar/bc0c69a6bf72455c4abb653a1d70747a?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    收藏,顺便祝新春快乐,万事胜意 :cool:

  36. http://0.gravatar.com/avatar/a910172a6cbd474d7020c3c55c517dac?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    似乎用过类似功能的插件……

  37. http://1.gravatar.com/avatar/5e70189097512d41a7c30d8ac6fc7be5?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    沙发!!
    我觉得你的主题太过于强大了,感觉速度慢些

  1. Loading...