将 Blogroll 分为两栏 (2)
书接上一回...
上一回我们已经对所需的界面布局作了分析. 可能因为相隔太久, 你已经忘记了那些内容, 可能你根本还没看过那篇日志. 那么, 你可以先去看看: 将 Blogroll 分为两栏 (1)
在本回中, 我们将说说确定功能, 理清思路和准备数据. 上次我说过会改写 WordPress 的源代码或自己写一个, 我认为新作一个思路会较为清晰, 所以加了这一环节. 在写代码之前, 我们要做些准备工作, 一切都是为了敲代码时可以更 "欢快" 些.
在下一回中, 我们以这些功能作为目标, 对这些数据进行处理, 做成一个简单的插件.
功能:
这里只是简单的列举一下我们想要的功能, 其实这也是一个目标. 从这些可预见的功能中, 我们需要确定参数, 粗略的处理方法, 还有数据.
1. 显示多栏
上一回中, 已经演示过如何分两栏显示 Blogroll 的内容. 两栏可以实现, 那么 3 栏, 4 栏肯定也是可以的...
参数: columns, 限制它在 1-4 之间, 0 是空的, 而 5 栏或以上的可用性太低了.
2. 限制显示数量
可能你有 40 个友情链接, 就算分成两栏也显得太长, 那么你会希望存在这么一个功能.
参数: limit, 可以设置为显示全部.
3. 显示某一类别的 Links
很多人不仅仅有 Blogroll, 可能还有 Favors, Friends 等等. 他们在创建链接时就进行了分类, 必须提供这功能. 而当用户不提供任何类别时, 应该将所有连接都显示出来, 或许他要的就是这样的效果.
参数: category, 输入分类名称, 只显示指定分类中的链接.
4. 排序
可以选择排序对象和排序方式, 还应该提供随机排序. 其中排序对象至少应该支持链接名, URL 和等级三种.
参数: orderby 和 order
5. target
不符合 W3C 标准的一个标签, 但在几年前一度盛行, WordPress 的链接也提供此功能.
参数: target, 可让用户选择使用, 但不推荐.
6. 分页导航
需要简单的 Ajax 支持, 将在以后的环节中展开.
思路:
根据上面列举的功能, 我们可以初步地知道要做些什么了. 接下来要弄清楚该如何处理, 并需要关注数据库中哪些内容? 这部分内容需要略懂数据库管理系统.
对于链接, 链接名字, URL 和 链接描述这三项是必须的. 所以需要从 wp_links 中获取 link_name, link_url 和 link_description 这三个字段.
1. columns, 用于显示多栏, 可以在程序中创建一个计数器, 每处理一个链接就自加 1. 然后对 columns 的值取模, 当余数为 0 则可另起一行.
2. limit, 限定显示条目. MySQL 提供 LIMIT 关键字, 如显示 20 条, 可以在 SQL 后加上 LIMIT 20.
3. category, 用于显示某类的链接. 我们先到后台看看: 在创建链接时, 可以选择类别.
在 WordPress 数据库的 wp_links 表中有 link_category 这个字段, 但此 category 非彼 category, 可别轻易被骗了. 要找到真正的 "类别" 得跨几个表呢, 你可以点击右上角的类图放大查看. wp_term 表中存放的 name 是我们真正想要的 category.
可能你已经注意到, wp_term-taxonomy 表中叫 parent 的字段. 幸运的是 links 目前并不支持这种父类子类关系, 那只是针对文章分类的, 相信 99.9% 的人都不会手动去编辑它, 所以我们可以忽略之.
以上都是针对指定显示类别的. 而对于那些不指定显示类别的, 其实只需要 wp_links 一张表...
4. orderby 和 order, 用于对数据排序, 除了随机排序, 应该成对出现. 默认以链接名字升序摆放. 因为需要提供按等级排序的功能, 所以必须从 wp_links 中得到 link_rating 这个字段的数据.
5. target, 此参数不推荐使用, 但为了兼容这个功能, 需要从 wp_links 中获取 link_target 字段.
数据:
对于需要处理的数据, 用 SQL 列出来. 这部分内容可能需要一些简单的 SQL 语句知识. SQL 是第四类语言, 简单易懂, 或许你一看就明白了.
对于不指定 category 的, 数据采集如下: (假如按链接名字升序摆放, 显示数量为 10)
SELECT T1.link_name AS name, -- 显示的链接名称 T1.link_url AS url, -- URL T1.link_description AS description, -- 描述 T1.link_target AS target, -- target 字段 T1.link_rating AS rating -- 等级 FROM wp_links T1 WHERE T1.link_visible = 'Y' -- 只显示被设置为可见的那些链接 ORDER BY name ASC -- 按链接名称升序摆放 LIMIT 10; -- 显示数量为 10
对于指定 category 的, 数据采集如下: (假如按链接名字升序摆放, 显示数量为 10, 显示类别是 Blogroll)
SELECT T1.link_name AS name, -- 显示的链接名称 T1.link_url AS url, -- URL T1.link_description AS description, -- 描述 T1.link_target AS target, -- target 字段 T1.link_rating AS rating -- 等级 FROM wp_links T1, wp_term_relationships T2, wp_term_taxonomy T3, wp_terms T4 WHERE T1.link_visible = 'Y' -- 只显示被设置为可见的那些链接 AND T1.link_id = T2.object_id AND T2.term_taxonomy_id = T3.term_taxonomy_id AND T3.term_id = T4.term_id AND T4.name = 'Blogroll' -- Blogroll 类别 ORDER BY name ASC -- 按链接名称升序摆放 LIMIT 10; -- 显示数量为 10

好像终于找到想找的相关资料。我想问相关人士个问题,如何调用wp的link_description以修改它的样式?先谢谢您了。
wp自带的搜索不好用 -.-
不过我还是自已找到了!嘻嘻,也多谢你~~
@Betty
善用搜索, 哈哈~
http://www.neoease.com/wp-recentcomments/
超过50%的话就会在本列中换行,不算错乱吧
show all的链接在widget里好像是没法写,如果用sidebar调用的话就可以直接写,或者在下面再加个文本widget,标题不写,内容就写这个链接……
你们程序强人,什么都能写程序来解决,其实很令人佩服啦
然而关键是,我昨天在这留言提了个问题,现在却怎么也找不到是在哪篇留的了……
@Betty
是说得方法我知道, 但当时我还有别的用处, 而且我想加个 show all 的按钮. 而且用百分比将不够空间的挤下去, 那么当某个 item 的长度超过 50% 时就会发生错位. 我也知道这个插件可用性不高, 所以很久没更新了, 呵呵~ 我还在想, 有没有什么好的用法?
汗,发表之后符号都没了……
简言之就是每个item都用一个li包起来(也就是系统默认的状态),而不是像你开始那样把两个包在一个li里。调节百分比就可以控制显示几列,比如33%就是三列。我试了在ie、firefox、chrome下看都没问题。
汗一个,用css就可以实现的东西,至于写这么麻烦的程序吗……
如果html这样
Widget Title
Item 1
Item 2
Item 3
Item 4
Item 5
Item 6
css这样写
li { width:50%; float: left;}
不知道是不是你要的结果?
期待新主题的发布,太喜欢了。简约中的硬朗~
不错的,不要换了!哈哈哈!
@zwws
不可否认, 我在几个不同时期的显示器看我博客的效果是有些出入的.
但这主题换了色调就不算 Blocks 系列了, 有点为难呵...
@mg12
在CRT下显示的正常就OK了。对液晶“优化”个啥哦。
@Jim
其实不是纯技术博客, 我只是觉得授人以渔胜于授人以鱼而已. 就算不能自己做插件, 起码也略懂一些, 自己可以修改一下. 这只是一个简单的插件的简单教程, 如果被某程序员看到了, 可能还遭人笑话呢.
关于 Blog 颜色, 在纯屏的现实还算可以, 可能在液晶上的效果不一. 谢谢你的提议, 我会想办法的.
纯技术型的博客,这些东西,实在是懒得去研究!
MG12,你博客这个颜色不好看呀,还是深点的颜色好看些!嘿嘿!
@空间端点
没修改 WP 内核代码, 可能那样说起来会更乱.
@etian007
看不懂也正常, 写的时候头脑不太清醒, 现在看也有点混乱, 呵呵.
@yeardo
编辑器我用 WordPress 自带的. 如果你是说代码高亮的插件, 我用的是 wp-syntax.
你用的什么编辑器哟……
俺看不懂的说..囧!
强,这次升级到修改数据库和wp内核代码,我也好好学习一下~