Drupal

关于Drupal的安装、使用、问题、修改等的讨论。也是目前唯一的Drupal中文交流论坛。

Views 模块教程 (四):解剖 (2)

Field 项是 views 模块的最终要部分,直接控制着输出视图的显示方式。一个典型的 tracker 页面由以下部分组成:

页面类型 标题 作者 回复数目 最新回复时间

可以参看 Drupal China 的 tracker 范例。所以,在 field 项里,我们需要做的就是按照需求选取字段 (field)。第一个要选取的就是 页面类型。在 Add Field 菜单中找到 Node:Type 点击添加,Node:Type 就出现在 field 项下了,然后我们要做一些设置, Label 就是这一项在列表中的显示名称,填入“页面类型”(英文版的 views 默认的是 Type)即可。Sortable 是设定是否按照这个字段排序,这里选择 no,如果选择 yes ,那么在 Default Sort 那里要选择默认的排序方式。

同样的,我们可以确定第二个 “标题”字段,添加 Node: Title 即可,在 Handler 设定下,我们选择 with updated mark,这样如果内容更新,标题上就会显示 “new”或者“”的标示。Option 设置为 “as link”,这样就可以生成链接了,注意,不是每个字段(field)都会有这样的 option,譬如 CCK 有一个辅助模块 Image Field,在views中并没有 as link 的选项,非常不方便,必须通过 patch 才能达到目的。

添加完所有的 field,工程就完成了大半了,每个字段的最右边都有操作的图标,你可以方便的上移或者下移以及删除这个字段。另外要注意的是,这里所有的 sortable 选项全部都是 No,这点对于网站的优化很重要,如果某个字段允许排序,那么访客在点击它的时候,事实上是对整个网站的内容进行排序,这样不仅慢而且浪费网站资源,但是如果不让字段排序,如何能做到显示“最新”文章呢?这个马上就要说到。

Field 项下是 Argument 项,在这里,不需要什么设置。

再向下是 Filter 项,它的作用是过滤掉你不想显示的内容,譬如这里,我们只希望发布的内容显示,所以我们添加 Node:Published 在 Operator 中选择 euqals (等于),value 中选择 yes。在你设计的任何试图中,通常都要添加这个 filter ,不然没有发表的内容也会被显示出来。注意,在filter 的右端还有一个 expose 选项,如果选择这个,那么这个 filter 就会变成 exposed filter ,也就是这个 filter 是“暴露”给访客的,访客可以使用这个filter 来过滤内容。

Filters 项下面就是 exposed filters 项,这里,你可以定义任何你向让访客使用的过滤器。

最后一项是 Sort Criteria,也就是排序标准,在这里我们可以设置默认的排序方式(这里设置排序的好处就是可以不把某个字段的属性设置为可排序,正如上文所述)。添加 “Comment: Last Comment Date”,order 设置为降序,option设置为 normal 即可,其他的option规定了时间选择的最小单位。

OK,到这里,整个 tracker 部分就讲完了,点击 mysite.com/tracker 是不是出现了最新文章的列表?呵呵,不过仔细一看,发现和tracker模块提供的tracker界面相比还了少些什么,对了,就是“所有最新文章”和“我的最新文章”这两个标签。我们现在用 views 做出的 tracker 只有所有的最新文章。如何在同一个页面添加不同的标签呢?下次再说:)

Blog分类: 

Views 模块教程 (三):解剖(1)

<

p>

Drupal 的基本组成部分是 Node, 外加 Node 的附属 Comment。对于一般的使用者来说,Node 是不可分割的;即便是熟练的使用者,在使用 Node 的各个字段时也会觉得非常的麻烦,而 Views 就可以方便的解决这个问题,从 Node 中提取你需要的字段,按照你希望的方式展示,并过滤掉你不希望出现的内容,Views 的工作流程可以用下图表示:

在明白这个流程后,让我们来解剖一个 Views 的实例,使用的样本是 Views 模块自带的 Tracker 视图。Drupal 的 Tracker 通常是 Tracker 模块提供,可以通过 yoursite.com/tracker 来跟踪网站最新的内容。但是有了 Views 模块,我们可以在不启动 Tracker 模块的情况下实现 Tracker 的效果。

在视图(教程中的 views 暂译为“视图”)的管理界面,找到 Default Views 是 tracker, titile 是 Recent Post 的那个视图,点击后面的 “add”,进入编辑状态。

Basic Information 项下,设置名称,访问权限和描述。名称的设置参加教程(二),访问权限和描述按照惯例。

Page 项下第一个选项 Provide Page View ,当你希望输出的结果是页面是勾选这个选项;第二个选项 URL,则是设置访问这个页面的地址,理论上讲,你可以设置任何地址,但是记住,需要使用相对地址,并且首尾不要用 “/”。譬如你想把访问的地址定义在 http://mysite.com/new ,那么这儿,你只需要填写 new 就可以了。这里,因为是在模仿 Tracker 的效果,所以URL 的地址也设置为 tracker。注意,如果 mysite.com/tracker 这个地址是系统已有的(譬如你启动了 tracker 模块),那么你定义的视图会覆盖系统已有的显示方式。另外,这个 URL 可以使用通配符变量,也就是 $arg, 这个变量的定义在下面讲。再往下,View Type, 提供了五种常用的视图显示方式:全文,摘要,表格显示,列表显示,和显示 RSS。Tracker 模块提供的默认显示方式就是 表格显示,所以这里我们也选择 Table View。再接下来的 Title,就是这个页面的标题,这里我们的定义为 Recent Posts,注意这个标题也可以使用 $arg, 譬如你定义的是一个分类的显示页面,你希望这个页面的标题是分类的名称。再往下的,use pager 这个选项决定是否使用分页显示,当结果比较多的时候,建议选择这个选项,Breadcrumb trail should not include "Home" 这个选项决定你页面左上方路径的现实方式,是否包括“home”;Node per page ,如果选择了分页显是,这里可以定义每页显示多少个结果;Header Footer,如果需要可以输入相应的页首和页脚信息;Empty Text 是你定义的 Views 返回的结果为 0 时显示的内容,譬如你定义了某个 term 的视图,但是这个 term 下没有文章,那么你可以在这里定义返回的结果。一般使用默认就可以了。menu 选项,第一个选项 Provide Menu决定是否为这个页面定义一个菜单,要和紧接的 Provide Menu as Tab 配合使用。如果选择提供菜单,但是不作为 Tab,那么这个页面的连接就会在 Drupal 的主菜单系统中显示,也就是在边栏里的导航菜单中显示;如果选择作为Tab,这不在边栏中显示,而在页面的上方作为标签显示。如果作为标签显示,那么 Make Default Menu Tab 这个选项则是确定是否把现在这个视图作为这个路径地址的默认视图,因为存在标签,所以一个基本路径地址可能有不同页面,譬如 tracker 模块提供的页面中,上面有“最新文章”和“我的最新文章”两个标签,默认的显示“最新文章”这个标签,关于如何设置多 tab 显示的方式 ,我们以后还要讲到(在我们的第一个实例里),这里从略。Tab Weigth 用来调整 tab 的顺序;Menu Title 定义这个页面在系统菜单中的名称,如果什么都不填则默认值为页面的名称。

Block 项这里什么都不用设置,因为我们定义的是一个页面而不是一个block。block的定义方式和 page 差不多,不同的是输出的结果是 block 而不是 页面。

再往下就是最有趣的字段,$arg 和 过滤器设置了。我们下次再说:)

Blog分类: 

Views 模块教程 (二):概述

安装 views 模块就不多说了,和其他的模块一样,上传,启动,然后在 Administrater -> Site Building 下可以找到 views 的配置页面(如下图所示)。

最上面的标签分别对应着 列表 添加 导入 主题向导 工具。“列表”标签下列出了所有已创建的视图。views 模块自带了四个常用的视图,分别是:“最新评论”,“首页”,“分类词”和“最新文章”。如果你自己添加了新的视图,它们将会单独列出(如下图):

注意,views提供默认视图与你自己创建的视图是分开显示并且有不同的选项的。你自己的创建的视图有 编辑 导出 删除 克隆 等选择而默认的视图里只有 添加 停止/启动 选择。我们现在以第二幅图的第二个视图为例来解释一下各列的含义。

最左边的是“视图”(view, 因为它正好和 Drupal 翻译中的 view 重复了,所以才会在这里被自动翻译为 查看),如果你希望你的视图覆盖默认的视图,这一项非常的重要,注意它只能包含字母和下划线,通常,如果你想覆盖的路径是 taxonomy/term 那么这个名称就是 taxonomy_term;如果你想覆盖 node 那么这个名称就是 node。如果你重新创建的页面,譬如 characters/name ,那么就无所谓了,不过按照惯例,你可以命名为 character_name

接下来是“标题”,当进入你定义的视图时,“标题”就会自动出现在页面的上方;

然后是“描述”,这个主要是方便你自己,知道你定义的这个视图是什么,防止以后遗忘;

然后是“提供”(provides),选择输出的是 页面(page),区块(block)还是 菜单(menu)。如果输出的是区块,那么在定义过这个视图后你可以方便的在区块管理中找到你新定义的区块,如果是菜单,则会出现在菜单管理中,注意,在选择生成菜单的时候你可以选择“标签显示”,这样就可以生成标签,就像最上面的 列表 添加 导入 主题向导 工具 标签一样。

如果你输出的是页面,则在 URL 下显示的就是你的页面的地址,注意,它可以覆盖已有的页面,譬如例子里的 taxonomy/term/$arg ,这里的 $arg 是一个 argument,这里我定义的是 term 的 id,这样它就可以覆盖所有 taxonomy/term 下的显示方式,类似个通配符,把诸如 taxonomy/term/1 ; taxonomy/term/2 等等都按照我定义的方式来显示。

最后一栏是可以进行的操作,上面已经说的很清楚了。你可以利用编辑你创建的视图,导出你自己定义的视图,删除它,或者是复制一份。

今天先到这里,下一次具体剖析一个视图的例子,讨论一下每一部分的含义。

Blog分类: 

老徐·《开啦》·土啊

铺天盖地的徐静蕾的《开啦》创刊号的报道。杂志咱不太关心,每月定期的就看哪几本,多了也看不过来。关心的是它的网站,google之,找到 http://www.kaila.cn/ ,打开看,第一眼发现是 Wordpress;第二眼发现是改自 Almost Spring 的主题(这个主题Drupal有ported的);第三眼看去,发现这个主题是不是《开啦》改的,而是一个WP爱好者在2005年7月7日更改发布的,名字叫做coolcode。太失望了,好歹请个美工,仔细设计个外观主题,俺们也好借鉴借鉴。一直想给 Drupal 做一个非常有中国味道的主题然后开源发布,这个想法最初是来自于 Firefox 的一系列非常流行的日本主题,可惜打小学毕业就没有再上过美术课,如今连画个鸡蛋都不像(其实小学的美术作业也都是同桌帮画的,一次画肖像,她画的是我,她帮我画,画得还是我,老师把我叫到办公室,问我有镜子没,我说俺一男生要镜子干啥,老师就火了,说,没镜子你咋画的自画像),呵呵,扯远了。不过觉得既然杂志包装的这么下功夫,网站也该做得用些心才对,现在这个看起来太《土》了:)

Blog分类: 

Views 模块教程 (一):简介

懒了很久,终于动笔写这个教程,α 版。

打个比方来说明一下 Views 的作用: Drupal 的核心就像一个毛坯房,墙窗户门都有了,也简单的粉刷过了,搬进来也能住;外观主题 (Theme)就像室内装修,可以按照自己的喜好来铺地板或是地毯,选择各种各样喜欢的墙纸(现在装修还需要墙纸么?hoho,俺对装修的概念还停留在10年前^_^)等等;模块呢,就好比家具,电器之类的,有了模块可以方便实现各种方便的功能,大部分模块都像冰箱电视一样,启动,摆在那里就行了,但是有些模块可以说是大工程,譬如 CCK,可以让你建设新屋子,有些是中等工程,譬如 views,它可以打掉你屋子之间的墙,改变屋子的格局,Drupal 的是建立在 node 上的,而views 的核心功能就是帮助你改变 node 的组织与显示模式。

举几个可能会用到 views 的例子:

  • 你希望首页的内容以不同的顺序显示。譬如不是按照从新到旧的顺序,而是按照“热门”程度(浏览次数,评论数目);
  • 你希望改变 taxonomy/term 的展现方式。当你点开某个 term 的时候,你看到的是这个 term 下内容的按照张贴顺修的列表,譬如你想改变这个列表的显示方式。默认的显示方式是“题目加摘要”,但是你希望它是以table的形式一目了然的显示所有必要的信息;
  • 你想用 /tracker 来跟踪最新的帖子,但是只希望某些类型的帖子显示(譬如,你的CMS站是销售某种产品的,你只希望在 tracker 中显示最新添加的产品,而不包括论坛的讨论贴)
  • 你想在区块(block)中显示某个分类下的最新的帖子;
  • 你想为用户现实“未读的论坛帖子”;
  • 你希望有一个类似“按月归档”的区块,可以方便访客按照时间来查询帖子;

如果你希望以上的功能,那么 views 模块是绝对必要的。这个教程大致按照如下计划书写,第二部分讨论如何试用一些“罐装”好的非常实用的 views 代码;第三部分举例说明写如何自己按照需要定制 views;第四部分讨论如何利用 views 和 cck 相结合,随心所欲的打造你需要的功能与现实效果。一言以蔽之,使用了 cck + views 之后,再加上一些简单的主题与css的技巧,基本上没有 drupal 仿造不出来的网站,也就是说你的毛坯房也可以改造为希尔顿:)

Blog分类: 

重新构建“相关链接”

每篇 blog 下面的“相关链接”可以方便的给blog读者更多的相关信息。在 Drupal 4.5 之前的年代,这项功能是通过 awTags 完成的,但是先在 awTags 已经湮灭了;在 Drupal 4.6 和 4.7 的年代,这项功能是通过 Flexiblock + Related Nodes实现的,但是现在这两个模块都停止更新了。所以在 Drupal 5.1 的年代,我们必须寻找其他的“相关链接”的解决方案,并且这个方案要“可持续发展”,不然过一段时间就要重头来过。于是这次就用 php codeRelated Links 解决了这个问题。着手解决这个问题其实可以分三步:1) 找到能生成相关链接的模块;2)想办法把生成的block摆在内容的正下方;3)CSS 美化。

Related Links 很好的解决了第一个问题,这个模块要比以前的 Related Nodes 更为强大,选项也更加丰富;而解决第二个问题就只能修改 node.tpl.php 了,加入现实 block 的代码。这样,就在每篇的 blog 的结尾根据 Tags 和 分类词自动生成了相关链接(事实上, Related Links和可以根据全文搜索来生成相关链接,不过担心这样会加重服务器端的负荷)。但是这些链接是单行排列的,比较长,所以就想把他们显示为通常的两竖行显示 ,这就需要 CSS 来控制,根据 A List Apart 上的这篇文章,可以很方便的利用 floating 属性生成双竖行的相关链接。最终得到了现在你看到的效果:)

Blog分类: 

Drupal 最新的 Update Status 模块

今天 Drupal 的Contributor们推出了一款非常实用的模块:Update Status。它通过 cron job 从 Drupal 总站的服务器端获取信息,可以检测你正在使用的模块是否有新的正式发布版。这样就大大的节省了站点维护的时间,不用经常的去查询已安装模块的升级信息了。同时,这个模块还在管理界面里直接提供了更新模块的下载链接,非常的方便。呵呵,据说这个模块会加入 Drupal 6.0 的核心模块中去。推荐安装一试。

Blog分类: 

新年,升级

守夜,等着看早上6点的春节晚会,虽然不一定精彩,但是毕竟是感受过年气氛的一种方式。闲着也是闲着,就动手把 blog 从 Drupal 4.7.4 升级到 Drupal 5.1。升级很顺利,也很快,有些模块不能用了,就暂停了,只要不影响最核心的功能就行。Flexinode 看来不敌 CCK,寿终正寝了,一些 flexinode 的页面还能正常访问,但是flexinode 的表格就不行了,好在并没有多少依赖 flexinode 的地方。其他需要修修补补的地方也不少,Drupal 5.x 的主题别有玄机,开始以为我自己的这个外观主题中间有 bug,所以不能选择别的 administrative theme,但是测试了其他一些 contributed 的外观主题,也有同样的问题,看来还需要仔细“解剖”一下 Drupal 5.1 的主题啊。升级到了 Drupal 5.1,就可以用强大的 CCK 和 Views 了,决定重新建设一下原来停工的部分内容。每次大的升级,都会伴随着漫长的抓虫收尾工作,这次也估计不例外。祝常来逛逛的同学们新春快乐!

Blog分类: 

Druapl 5.0 并汉化文件发布

Drupal 5.0 昨天正式发布,这次从Beta到RC到正式版的速度还是挺快的。新版本的 Drupal 改进很多,这里就一一枚举了,总之很值得升级。我这里也会尽快升级到 Drupal 5.0,呵呵,网站存在的时间越长,升级就越麻烦,不过这次应该比从 4.6 到 4.7 那次要简单一些,那次 Drupal 改数据库的编码,升级起来问题良多。在 Drupal 5.0 发布的同时,我们也制作完成了 Drupal 5.0 的汉化文件,可以在Drupal 主站下载。这次的汉化比 Drupal 4.7 快了很多,主要是很多热心的同好在测试版时就完成了大部分的汉化工作,大米又及时的做了整理,所以可以同时发布汉化,现在 Drupal 的 project management 系统改进了很多,可以方便的找到需要的release。呵呵,等到试用过没有问题候,将发布 Drupal 5.0 的汉化正式版。

Blog分类: