2006-12
02

花了一个星期的时间从零开始打造了这个 Web 2.0 风格的主题。主色调为橙色。 其实还主要是受到了这篇文章的影响, 大号字体,圆角,倒影,阴影等效果全都用上了。Firefox 2.0、Opera 9、IE6 下测试通过, 估计Firefox 1.5和Opera 8应该也没有问题。

simple-web-20-orange-screenshot.png

制作过程中着实被IE6郁闷了好几次。不支持透明png,box模型计算bug,overflow的特殊处理, 一系列令人头疼的问题,一直在想,要是世界上没有IE这个东西该多好……然而残酷的现实是 IE市场占有率最高,唉……

不过虽然制作很辛苦,结果还是挺满意的。最爽的就是在页脚上写上 create by charlee 的时候, 那个爽啊,就像当年中国爆炸原子弹时一样。

上述那些问题的解决方案以后另撰文阐述。也许过一年IE7流行开来之后, 这些问题就不复存在了。

另外感谢 fcicq 指出主题的错误。 我的blog上装了很多插件,而这个主题也用到了很多插件的内容。 等过阵子有时间我会将主题对插件的依赖性改掉的。

依赖的主题

  • Ultimate Tag Warrior
  • WP-PageNavi

2006/12/06

已经修改了主题,去掉了对插件的依赖性。

下载地址:attachsimpleweb2-orange-100.zip



2006-10
09

wp-cache 这个插件能够将 WordPress 的页面输出内容进行缓存, 这样第二次访问该页面时就不必访问数据库,从而加快页面生成速度,并降低服务器负载。 但很可惜这个插件是为 Unix/Linux 系统设计的,如果服务器是 Windows,该插件将会出现错误。 在Windows下使用该插件需要做些修改。

  1. 修改 wp-cache/wp-cache.php,找到 wp_cache_check_link() 函数,紧接着该函数的 global 变量声明 加入下列语句:
    return true;
    该函数的功能是检查符号链接,而Windows系统不支持符号链接,所以加入 return true 让该函数短路。
  2. 将 wp-cache/wp-cache-phase1.php 复制到 wp-content 下并改名为 advanced-cache.php。 官方安装手册上要求使用 ln -s 命令建立符号链接,而Windows并不支持符号链接,只能直接复制了。
  3. 修改 wp-cache/wp-cache-phase2.php,查找 ob_end_clean (大约在 220 行前后)将其修改为 ob_end_flush, 再将约10行之后的 flush 语句注释掉。

这样在插件面板中激活wp-cache,并在选项面板中 Enable Cache 即可。

另一个常见的问题就是 cache 不起作用,浏览任何页面 wp-content/cache 下也不会生成 cache 文件。 很可能因为当前的主题末尾忘记使用 </html> 标记。修改主题的 footer.php 文件并在最后添上 </html> 即可。



2006-10
03

Weighted Categories 这个插件经过修改之后可以用来显示 TagCloud。 但是这个插件显示出的 TagCloud 总觉得有点别扭。一般人都是擅长某几个方面,很少样样精通的, 因此一般的博客总是会出现几个文章数非常多的标签,以及大量仅有一两篇文章的标签。 而 Weighted Categories 插件使用四则运算来计算标签的大小(附图公式(1)),结果就造成几个巨大标签混杂在大量的小标签中的 “众星捧月”的现象。

例如,假设有四个标签,文章数分别为 tagA=100、tagB=10、tagC=5、tagD=1,标签级别为 1~10,则各个标签的级别如下:

标签文章数计算式级别
tagA100100 / 99 * 9 + 110
tagB1010 / 99 * 9 + 11
tagC55 / 99 * 9 + 11
tagD11 / 99 * 9 + 11

显然,由于tagA的存在,其他标签都被挤到了最底层。

解决这个问题的方法就是利用对数函数。(对数函数的效果可见本文。) 计算公式见附图公式(2)。

公式(2)的结果与对数的底是无关的,见公式(3)。

用公式(2)计算上例得到下面的结果:

标签文章数计算式级别
tagA100log(100) / (log(100)-log(1)) * 9 + 110
tagB10log(10) / (log(100)-log(1)) * 9 + 15
tagC5log(5) / (log(100)-log(1)) * 9 + 14
tagD1log(1) / (log(100)-log(1)) * 9 + 11

显然这个结果要比原来的结果漂亮多了。

tagcloud-ev.png


2006-10
01

mysql 从版本 4.1 起增加了多国语言字符集功能。 数据在插入到数据库或者从数据库中取出时,mysql会自动进行字符集变换。 在创建数据库时必须要指定数据库字符编码,而客户端在连接mysql时也必须要指定客户端字符编码。 假设数据库字符编码utf8,而客户端字符编码gb2312, 那么执行select时mysql会将字符串从 utf8 转换成 gb2312, 而在执行 insert、update等时会将客户端输入的数据从 gb2312 转换成 utf8。

WordPress的数据使用 UTF-8 编码,因此在 mysql-5.0中创建数据库时应当将字符集指定为 utf8。 遗憾的是 php 等脚本语言不会自动设置客户端字符编码,因此mysql会选择默认的 latin1 , 这样在执行 select 时mysql会将数据从utf-8转换到latin1,造成乱码现象。

解决方法就是在执行 mysql_connect 之后执行以下语句

mysql_query("SET NAMES utf8");

使用phpMyAdmin-2.8.0.2完整的升级方法如下:

  1. 从原有的数据库中导出表结构和数据。
  2. 在mysql-5.0中创建数据库,设置字符校对为 utf8_general_ci。
  3. 向数据库中导入数据,导入时设置数据编码为utf8。
  4. 修改 wp-includes/wp-db.php,在wpdb类的wpdb函数中(57行前后)添加以下内容。
    function wpdb($dbuser, $dbpassword, $dbname, $dbhost) {
        $this->dbh = @mysql_connect($dbhost, $dbuser, $dbpassword);
        ......
        $this->query("SET NAMES utf8");          // 添加这一行
        $this->select($dbname);
    }
mysql-5-update.png


2006-09
30

用过 del.icio.us 的人一定知道,该网站的标题栏后面有一个标签输入框, 在输入框中输入标签名即可直接跳转到想要看的标签,而不必从纷繁芜杂的标签云中去寻找。 如果你在 WordPress 中添加了标签云, 一定也想在标题栏后添加一个类似于 del.icio.us 那样的输入框吧。

这里是仿照 del.icio.us 制作的标签输入框代码。attachcrumb.zip 使用方法如下。

  1. 首先按照这个方法打开永久链接。
  2. 下载 prototype,然后将 prototype 和本文附带的 crumb.js 放到你的主题目录下的 js/ 目录下,然后在主题的 header.php 的 <head> 标记内加入以下代码。
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/prototype.js"></script>
    <script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/crumb.js"></script>
  3. 在你想加入标签输入框的地方加入以下代码(通常是在blog的标题后)。
    <h1 id="pagetitle">
      <a id="top"></a><a href="<?php echo get_settings('home'); ?>/"><?php bloginfo('name'); ?></a>
      <!-- 上面是blog标题,下面是标签输入框的代码 -->
      / <span id="crumb"><?php echo single_cat_title(); ?></span>
      <script>
        if(Crumb) 
          Crumb.go('crumb', '<?php echo get_settings('home').get_settings('category_base').'/'; ?>');
      </script>
      <!-- 标签输入框代码结束 -->
    </h1>
  4. 最后在主题的 style.css 中增加以下代码,以定义标签输入框的样式。
    span#crumb input {
      font-size: 0.7em;
      font-family:verdana,sans-serif;
      background-color: #FFFFFF;
      border: solid 1px #DDDDDD;
      color: #808080;
    }
    span#crumb input.crumb-focus {
      border: solid 1px #000000;
      color: #000000;
    }


2006-09
28

WordPress有个很好用的插件:Weighted Categories, 它能够将分类名显示成tag cloud,即文章数多的分类使用大号字体,文章数少的分类使用小号字体。 但是这个插件有两个问题,一是最后一个分类的链接不正确,这一点官方主页上也有人提出过; 二是各个级别的分类的样式是通过计算得出的,无法自定义样式。

针对以上两个问题,我修改了这个插件,并将其汉化。新的插件可以在这里下载。attachweighted-categories.zip

使用时将 weighted-categories.php 放到 wp-content/plugins 下,然后在管理面板中激活该插件。 然后在模板中加入以下的代码以显示tagcloud。

<div id="tagcloud">
<?php weighted_categories(1, 10, ""); ?>
</div>

然后需要在模板的 style.css 中加入你自己的分类级别样式定义(必须,否则各个级别显示出来都一个样)。 附带的 style-sample.css 为示例。

修改后的 weighted_categories 定义如下:

function weighted_categories($minlevel=1, $maxlevel=10, $exclude_categories)
  - $minlevel: 最小级别的编号
  - $maxlevel: 最大级别的编号
  - $exclude_categories: 不想显示的分类id,使用逗号分割,例如 "1,25"表示不显示 id 为 1 或 25 的分类

当然,为了让这些标签看起来更像真正的标签,我们需要在WordPress的选项中打开永久链接, 并在选项->永久链接分类基础选项中填入“/tag”,这样分类的链接就会显示为 /tag/分类名。