锻造坊 - Blosxom

作者:Reuven M. Lerner

网络日志,或博客,在过去几年中 popularity 显著增长。在 1990 年代中期和后期,只有少数人写博客,但现在博客现象已成为一种压倒性的趋势。的确,博客正变得如此普及,《纽约时报杂志》今年早些时候发表了一篇关于它的文章——重点关注撰写自己博客的高中生。

例如,在我写这篇文章时,民主党初选目前正处于高潮,每位候选人至少有一个官方博客。专业的和业余的政治评论员都建立了自己的博客,以分析和反驳候选人在他们的博客和其他地方提出的主张。

上个月,我们研究了 COREBlog,这是一个 Zope 产品,可以轻松创建您自己的网络日志。当然,COREBlog 要求您拥有 Zope 副本,并且您可以安装和修改产品。并非每个人都拥有这种便利,而几乎每个 Web 托管服务提供商都允许在您的网站上运行用 Perl 编写的 CGI 程序。因此,许多最流行的博客软件包都是小型程序,不会引起 ISP 的愤怒。

本月,我们来看看 Blosxom(发音为 blossom),这是一个用 Perl 编写的网络日志软件包,旨在作为 Web 网站上的 CGI 程序运行。Blosxom 由 O'Reilly and Associates 的程序员 Rael Dornfest 编写。我最初认为 Blosxom 是一种不切实际的博客工具,认为它的小尺寸表明了它的能力。但 Blosxom 的强大之处不仅在于其强大的功能集,还在于它允许我们混合和匹配功能的方式。

安装

对于任何有 Web 服务器工作经验的人来说,安装 Blosxom 应该是一件轻而易举的事情。它由一个用 Perl 编写的 CGI 程序组成。就我而言,我所要做的就是将文件 blosxom.cgi 复制到 /usr/local/apache/cgi-bin,然后我就开始运行了。

当然,每件软件都至少需要一点配置,Blosxom 也不例外。所有配置都由程序顶部的几个 Perl 变量处理。注释使每个变量的用途相对清楚。例如,为了为我的系统配置 Blosxom,我更改了以下变量

  • $blog_title:Weblog 的标题,它会显示给用户以及在 RSS 联合供稿中。

  • $blog_description:博客描述,它会显示在首页和 RSS 供稿中。

  • $datadir:Blosxom Weblog 中的每个条目实际上都是磁盘上某个位置的文本文件;$datadir 定义了这些文件应该驻留的位置。

定义了这三个元素后,我的 Weblog 就可以运行了。

添加条目

我通过在 $datadir 中创建一个简单的文本文件 introduction.txt 来测试 Blosxom

This is a test entry.

<p>Hello!</p>

作为 Weblog 条目,这个条目相当无聊。但看到这个条目如何出现在我的 Weblog 中很有趣,前面是日期,后面是时间戳和永久链接,第一行以粗体显示,就好像它是标题或标题一样。

换句话说,您可以通过在数据目录中创建新的文本文件来向 Blosxom Weblog 添加条目。任何以 $file_extension 的值结尾的文件(默认情况下为 txt)都被视为 Weblog 条目。这样,以 ~ 结尾的 Emacs 备份文件永远不会被视为条目。但是,如果您像我一样有在写作时经常保存的习惯,您可能会惊讶地发现您的 Weblog 正在您写作时更新,实时地供全世界看到。如果您想在后台工作,只需在准备发布之前将 .txt 扩展名从文件名中删除即可。

在我的工作站上,我在主 cgi-bin 目录中安装了 Blosxom,我可以将我的 Blosxom 博客视为 http://localhost/cgi-bin/blosxom.cgi。

Blosxom 根据创建文件的时戳为条目分配日期和时间。因为我在 2 月 11 日下午 4 点创建了该文件,所以 Weblog 条目的时间戳为该时间。这意味着您可以使用 touch 命令追溯更改文件的时间戳,如

touch -t 200401011500 testing.txt

上面的命令将文件 testing.txt 的日期修改为 2004 年 1 月 1 日下午 3 点。(如果 testing.txt 尚不存在,则会创建它。)尽管这可能违反了 Weblog 宇宙的礼仪,但这当然是可能的。

更有趣的是,您可以使用命令行上的相同 touch 命令将 Weblog 条目的时间修改为将来。如果 $show_future_entries 配置变量设置为 1,则具有此类未来日期的条目将始终显示。但在默认配置中,条目仅在其日期与当前日期匹配时才显示。这意味着您可以定时炸弹您的条目,使其在特定时间和日期显示。

风格

如果这就是 Blosxom 提供的全部功能,我就不会太印象深刻。但在更仔细地检查它之后,我看到它包含了很多功能。这种功能归功于显示模板(称为风格,使用英式拼写)和接受任意数量插件程序的能力的结合。这两个功能的结合使 Blosxom 具有很强的可扩展性。

Blosxom 附带了两个内置风格,默认的 HTML 风格和可选的 RSS 风格,用于 RSS 联合供稿。您可以通过在末尾添加来查看 RSS 供稿?flav=rss到您博客的 URL 的末尾。因此,如果您通常在 http://localhost/cgi-bin/blosxom.cgi 上查看您的 Weblog,您可以在 http://localhost/cgi-bin/blosxom.cgi?flav=rss 上查看该站点的 RSS 供稿。或者,您可以通过更改您检索的页面的后缀来指定您首选的风格。因此,我们可以通过 http://localhost/cgi-bin/blosxom.cgi/index.rss 查看 RSS。

Blosxom 网站上提供了完整的风格注册表。但基本思想很容易掌握:在您的数据目录中,与您的 Weblog 条目一起,您创建一个 HTML 文件,其名称反映了您要更改的 Blosxom 输出的部分。

文件名后缀与您要修改的风格相同。因此,文件 header.html 更改了 Weblog 的标头在 HTML 风格中的显示方式,而 date.blah 更改了 Blosxom 在 blah 风格中日期显示方式。用户可以通过添加 flav 名称-值对(正如我们之前看到的)在 URL 中设置风格,默认值在 blosxom.cgi 本身中设置,变量为 $default_flavour。由于博客条目的后缀为 .txt,因此您不能具有 txt 风格。

每个风格文件都由一个 HTML 代码段以及可能实例化到特定文件中的 Perl 变量名组成。例如,故事风格文件接收变量 $title 和 $body 等。(Blosxom 网站上提供了完整列表。)因此,我可以更改我的博客的输出,使标题变得巨大且右对齐,后跟正文

<p>
<H1 align="right">$title</h1>
<br />
$body
</p>

上面的风格将 $body 变量(我们的博客故事的内容)逐字插入到 HTML 中。如果博客作者了解 HTML 并且愿意手动输入段落标签,这很好。但如果我们想让人们用空行分隔段落,我们需要在我们的故事上运行一个程序。幸运的是,Blosxom 通过可扩展的插件架构可以轻松编写此类程序。

插件

每个插件都是一个用 require 函数加载的 Perl 程序,它读取和评估特定文件中的代码。所以require foo.pl打开 foo.pl 并评估它包含的代码。我通常建议人们避免require而赞成use,它执行许多命令,包括 require。但是,由于 require 在运行时执行,而 use 在编译阶段执行,因此在这里使用它要容易得多。

Blosxom 假定插件目录(由可选的 $plugin_dir 变量定义)中的任何文件都是插件。插件按字母顺序加载和应用,这意味着如果您想确保首先或最后应用特定插件,您可能需要重命名它。

每个插件只不过是一个简单的 Perl 程序,它定义一个或多个子例程。每个插件都必须定义 start 子例程,该子例程仅返回 1。这允许 Blosxom 确定插件是否处于活动状态、准备就绪并愿意被调用。还有许多其他插件子例程可用,每个插件都可以选择定义,从条目(返回条目列表)到故事(允许您修改故事的内容)。通过以这种方式分解事物,Blosxom 允许进行大量的自定义和复杂化,同时保持核心代码小巧紧凑。

那么,插件可以提供哪些类型的功能?似乎只有少数限制。您可以更改从中检索 Weblog 条目的源、过滤此条目列表的方式、用于显示条目的模板以及条目本身的内容。

Blosxom 网站上提供了大量插件。其中一些插件依赖于其他插件,而另一些插件(如日历)仅在您使用支持该插件的风格时才会出现。其他插件可以立即工作,只需将其放入您的插件目录即可。

一个开箱即用的简单插件示例是 atomfeed,它提供 Atom 联合供稿。Atom 是 RSS 的竞争对手,已被许多重量级博客作者和程序员推广,这在很大程度上是由于 RSS 世界中现在显而易见的竞争标准。要获得 Atom 供稿,只需将 atomfeed 插件复制到您的插件目录即可。然后,您可以使用 http://localhost/cgi-bin/blosxom.cgi?flav=atom 或 http://localhost/cgi-bin/blosxom.cgi/index.atom 检索您的 Atom 供稿。

编写插件

列表 1 包含一个简单的过滤器,名为 egotrip,使我的名字在每次出现在 Weblog 条目中时都以粗体显示。请注意插件必须如何定义自己的包;这确保了每个插件的子例程都保存在单独的命名空间中,并使 Blosxom 能够确定包是否包含特定的方法名称。

列表 1. egotrip.pl


#!/usr/bin/perl

use strict;
use warnings;
use diagnostics;

package egotrip;

# Returns 1 to indicate the plugin is active
sub start
{
    return 1;
}

# Boldfaces my name
sub story {
    my ($pkg, $path, $filename, $story_ref,
        $title_ref, $body_ref) = @_;

    $$body_ref =~ s|Reuven|<b>Reuven</b>|g;
    1;
}

1;

实际工作在 story 子例程中完成,当 Blosxom 调用它时,会传递六个参数,这些参数对应于与条目相关的许多项目。在我们的例子中,我们只关心更改条目的正文,它位于最后一个变量中,称为 $body_ref。顾名思义,这是一个标量引用,这意味着我们可以通过使用两个 $$ 符号来取消引用来访问或修改其内容。考虑到这一点,我们能够用粗体显示我的名字的每个实例应该不足为奇

$$body_ref =~ s|Reuven|<b>Reuven</b>|g;

当然,我们可以使此步骤更加复杂,并插入指向许多不同项目的自动超链接

$$body_ref =~ s|(Reuven Lerner)|
↪<a href="http://www.lerner.co.il/">$1</a>|g;
$$body_ref =~ s|(Linux Journal)|
↪<a href="https://linuxjournal.cn/">$1</a>|g;

实际上,已经存在这种插件;它会自动创建指向社区驱动的维基百科的链接。放置在 [[括号]] 内的任何文本都会自动转换为指向该在线参考书的链接。

请注意,风格是 HTML 模板,我们可以在其中实例化 Perl 变量值,而插件是 Perl 程序。显示和操作之间的这种划分需要一点时间才能掌握,但它不应该太难。

至于我们之前的段落分隔问题,没有必要重新发明轮子。您只需下载一个插件 Blox,它允许您在编写博客条目时用空行分隔段落。然后,该插件会用您选择的 HTML 分隔段落。Blox 在 Blosxom 的插件注册表中列出(请参阅在线资源部分)。

Blosxom 将所有条目和风格都保存在一个目录中,这一事实让我有点不安,并让我怀疑该程序的可伸缩性。即使我的文件系统和 Perl 可以处理那么多文件而不会遇到太多麻烦,我真的想遍历所有文件吗?如果并且当这成为问题时,条目插件可能会提供正确的解决方案,从多个目录中收集文件并将适当的哈希返回给 Blosxom。

结论

Blosxom 是一个用于创建 Weblog 的强大工具;它比乍看起来的功能更多。Blosxom 由一个易于安装、易于配置的用 Perl 编写的 CGI 程序组成,但它的真正强大之处在于它允许您通过风格(显示模板)和插件例程的组合来更改显示的每个部分。通过混合和匹配现有的风格和模板以及您自己的风格和模板,可以轻松创建您自己的 Weblog。

本文资源: /article/7454

Reuven M. Lerner,一位长期的 Web/数据库编程顾问,现在是伊利诺伊州埃文斯顿西北大学学习科学的研究生。您可以通过 reuven@lerner.co.il 与他联系。

加载 Disqus 评论