Drupal中CCK & Views 模块使用小结(之一)

Drupal中CCK & Views 模块使用小结(之一)


CCK和Views应该是Drupal最重要的扩展模块之一,以至于很多Drupal用户在进行D5或D6版本选择时,以这两个模块是否发布或者稳定作为重要依据。
CCK和Views为什么如此重要呢?因为,CCK和Views在从“内容”和“提取”两个方面给Drupal提供了更高的灵活性与适用性。
在谈CCK和Views的具体使用之前,有必要了解其工作原理,这进一步需要我们理解Drupal的部分工作原理。
关于内容组织、提取与呈现的基本思路
组织
Drupal 最为特别也最重要的一个特性是,将所有内容(或者具体些叫文章)看作节点(Node),这些节点具有公共的和私有的特性。每个节点都有Title,都有 Body,这些是相对显性的,它们就是这些内容我们能看到的部分;每个节点都是有人创建的(Author),创建都是有时间记录(Post date)的,等等,这些是节点的默认相对隐性部分。结合其他的功能模块,每个节点可以控制受这些功能模块影响的程度和方式,比如,是否接受用户评论。
对这些节点的特性进行单独的一个个设置是不合理的,因为可能我们需要面对成千上万的节点(内容)。那么对相似特性的节点进行分组分类,成为一个有效用的方式 ——这实际上是一个反推——Drupal为我们提供的内容类型(Content types)正是这样一种分组设置Node特性的途径。
提取
作为最基本的使用,印象中我们进行提取的操作几乎没有——因为通过内容类型的设置,如何从内容记录(数据库)中调用数据已经被确定了。比如,在内容类型中我们可以设置Body为空,因而使内容编辑、显示时没有Body正文部分。
但是更进一步的,如果需要一些默认Drupal没有直接提供的内容形式时,就需要用到提取了。在DrupalChina.org中 east 有篇文章《不使用views,如何自定义节点列表显示页面》,详细的介绍了“提取”数据的“手工”方式。
呈现
这个无需多说,主题(Theme)实现了Drupal内容的呈现方式。

CCK功能实用
 准备
前面提到,每个节点都拥有共性。在新安装Drupal后,默认提供了两种类型的内容,Page和Story。可以通过路径admin/content/types/查看他们。Page和Story提供了哪些可编辑内容?标题Title,正文Body。
假如,我想发布一篇关于某本本电脑的文章,希望包含电脑本本图片、本本配置表、本本特性清单,还有本本的价格、订购地址以及反馈邮件,甚至销售本本商家的地址,我该如何处理呢?
最简单的办法,装个FCKeditor一类的可视化编辑器,像在Word中一样,进行上述内容的录入、排版、保存、查看。有没有问题?当然没问题,但是也有很多问题(矛盾啊)。
在我们公司,很难找到一位可以保持前后同类word文档格式一致的同事。Word编辑有太大的随意性,无法控制保证上述各项内容录入的有效性是否完整录入,也无法控制设置格式的一致性——可能本本A的报价单使用表格样式,本本B则使用“价格:¥XXX”的文本形式。使用FCKeditor的问题与此类似,更重要的是,因为FCKeditor编辑的文章内容是一个整体,想要细一些的控制——比如只允许注册用户查看本本商家的地址和反馈邮件——是无法办到的。
CCK提供了另一种“复杂”的办法,你可以在“标题Title”、“正文Body”之外,为各内容类型提供各种字段(Field)级别的新内容条目,结合其他模块,可以进一步对这些字段进行控制,比如显示方式和访问方式(权限)。
扯的有些远,下面说说如何通过CCK设置一个本本类型的内容。开始之前请安装CCK模块以及部分CCK扩展模块,清单如下(其中加粗标注的部分模块是CCK 自带的,它们应位于sites\all\modules\cck\modules。关于扩展模块的组织方式请查阅其他文章):

cckcontent_copycontent_permissionsfieldgroupnumberoptionwidgetstextuserreferenceimagefieldlinkemailblockreferencecck_blockscck_fieldgroup_tabscck_formatterscommentreference

 

CCK模块类型

前面罗列了一些常用(实际是在6.X下可用CCK模块还不多)的CCK模块,有必要说一下这些模块的类型。总的来说,CCK模块分为两类:字段类型类(链接、邮件地址等原生字段类型,xxx_reference等引用字段类型)和辅助类(控件类型和显示模式等)。字段类型模块就是用来提供对应类型的字段(汗~~),如果稍有了解数据库的就能明白。

CCK及其扩展模块提供原生字段如number数字、text文本、link链接、email邮件地址、imagefield图像等类型的,这些字段类型都按相应类型的保存实际数据到数据库中;

而引用类型的字段(大都包含reference字样)则可创建其他内容的引用,数据库中只建立一个映射。比如使用userreference,可以创建一个对用户的引用,把它作为购买本本的联系人;

辅助类模块则用来提供更丰富易用的控件类型,比如optionwidgets为文本提供了下拉选择、文本框、自动文本框等等空间模式,用于构建更适合的录入、显示模式;

显示模式的模块,比如cck_fieldgroup_tabs,可以为字段组(后面看图详细介绍)提供标签页的显示外观。cck_formatters,则可为数字指定小数位数的模式,很适合用在金额显示的场合中。cck_blocks可以将CCK字段提供为一个块,可灵活的进行其他应用(区块应用我了解有限,可以查看一下其他文章)。
创建各种类型的CCK字段
新建一个内容类型
前面的废话中,大致说明了CCK存在的价值,也说明了CCK是必须结合内容类型(Content types)来使用的。因为我们要以本本为例,所以新建一个叫做本本的内容类型。这部分比较简单,大致罗列一下步骤即可(暂时使用英文版本):

1、进入 admin/content/types 下,点击 » Add a new content type 新增一个内容类型; 
2、进入 admin/content/types/add 下,需要输入的信息为: Name: 本本;Type: benben;Title field label: 名称;Body field label:简介 ,其他暂时不管; 
3、点击保存内容类型按钮,保存我们创建的本本内容类型; 
保存完毕后我们位于 admin/content/types 下,如图所示:

 

操作(Operations)下面提供了几个可操作选项,其中增加字段(add field)与管理字段(manage fields)与我们的CCK直接相关,先增加字段。点击进入。

计划一下需要增加的字段及类型
兴冲冲的进来了,却不知道要填写什么...重新计划一下我们要增加的信息(字段)类型:

 

本本型号,文字类型的,比如我的Acer TravelMate 3280,还可以更细;本本外观,图片类型的,把本本的外观照贴上去;本本产地,文本类型的,本本可能是台湾产的;本本单价,数字类型的,比如5000.00元每台(我不能提供这个价格的TM3280...);本本特性,文本类型的,比如什么蓝牙什么无线一类的,比较长的一些列表;本本参数,文本类型的,一项一项的参数名称和参数数据;本本评价,评论引用类型的,用户对某个本本的评价,可以加进来(抱歉,我还没有测试是先加还是后加,或者是自动引用,后面确认...)生产厂商网址,网址类型的,提供生产厂商的网站地址;意见反馈邮箱,邮箱类型的,提供一个邮箱地址可以让用户进行反馈方面的邮件沟通。为了避免垃圾邮件的骚扰,我们控制一下这个信息的访问权限——只有注册用户才能看见,当然你可以进行一些其他的权限设置;

当然还可以列更多,因为仅仅是个例子,也因为其他的问题,自己可以先去试试。
添加文本字段
我们已经在 admin/content/node-type/benben/add_field 页面下,如图所示录入下列信息:


字段名称(Field name)是用于机器识读的名称,因为作为字段类型保存,一旦设定后就不能更改,并且只接受小写英文字符、数字和下划线。所有字段名称以field_开头,总的名称字符数不得大于32(含field_部分);
字段标签(Label)是显示在编辑、浏览时用户友好的名称,希望最终的页面中这一项是什么样子,可以在这里指定;
字段类型(Field type)是存储数据到数据库中的数据类型,说起来有些拗口。简单的说,记事本只能打字,小画家只能画图,我们要根据需要显示的内容选择合适的数据类型。前面已经罗列,“型号”适合使用文本方式保存;
点击继续按钮进入下一步,关于字段类型(Field type)的其他选项后面陆续使用介绍。
添加文本字段
在这个页面中,我们需要设置该字段在创建时的控件类型(Widget type),如图所示,在这里还有机会更改字段标签:

安装上列CCK模块,我们使用文本类型时拥有如下类型的控件,我们选择单行文本框(Text Field)控件:

 

点击继续按钮到下一页 admin/content/node-type/benben/fields/field_benben_model ,我们会在这里完成field_benben_model字段的全部设置。

这是字段“field_benben_model ”的编辑页面,总共包含如下几个部分:

字段基本信息组(basic information) :这是我们前一步已经编辑完成的信息,包括字段标签(Label)控件类型(Widget type)更改基本信息按钮(Change basic information):如果需要更改,点击这个按钮即可。字段设置组(settings) :字段设置组仅影响用于本本这个内容类型的field_benben_model字段,包含如下选项:文本框大小(Size of textfield)默认值(Default value)显示分组(Display in group)帮助文本(Help text)全局设置组(Global settings) :全局设置组会影响所有引用field_benben_model字段的内容类型,包含如下选项:必须(Required))值的数量(Number of values)文本处理方式(Text processing)最大长度(Maximum length)允许的值(Allowed values)

 

说一下后两组的设置。

 

文本框大小(Size of textfield):根据我们编辑界面显示的需要,可以为文本框指定宽度(以字符数计算),这个值不会影响最后网页显示的效果;

默认值(Default value):可以为字段指定默认值,我们有两种方式可以选择,直接录入和通过php代码获得,php代码具有更灵活强大的特性。需要注意的是,如果在后面的允许的值(Allowed values)中进行了设置,那么这里的默认值也只能在其中进行选择;

显示分组(Display in group):显示分组为多个字段在编辑、显示时提供了一种整理的手段。实质上是分组为组内的字段提供了一个DIV外框,并为DIV预置了一些显示形式,比如字段集、可折叠字段集、折叠的字段集或者标签页等。当然也可以通过CSS为这些DIV自行定义格式。现在还没有创建字段组,我们后面会进行具体操作;

帮助文本(Help text):需要按照什么要求、什么方式录入字段内容,可以在这里进行指定。帮助文本只出现在创建、编辑时的界面中,不会出现在最终显示的页面内;

 

必须(Required)):前面我们有提到一种假设——我们希望录入时不漏掉某些重要信息——这里就是实现这种假设的途径。通过选中必须选项,操作员若提交时忘记录入该内容,则会收到一个错误提示并要求纠正。对于本本来说,型号是必须的;

值的数量(Number of values):一个具体的本本,应该只有一个型号,因此我们选择1。但如果是本本的靓照,那可能会有很多,比如6个角度的,那可以选择6。再或者,可能不确定已有照片的数量,由操作员自行决定,那么选择无限;

文本处理方式(Text processing):文本类型的字段可以有两种方式来处理,纯文本( Plain text)和可格式化的过滤文本(Filtered text (user selects input format))。对于型号这类信息来说,纯文本更适合。如果要想有段引用用户评价的内容,那么使用Filtered text更为适合;

最大长度(Maximum length):本本型号的字符数可能就18位,我们不能允许24位的型号存在,那么使用最大长度进行限制,设置为18,超过该字符数的内容在提交时会收到错误提示。可惜没有最小长度的选项,因为我们也不希望2位的错误型号存在,暂行的替代方式是,在帮助文本(Help text)中进行提示;

允许的值(Allowed values):如果要对输入内容进行限制,比如只允许输入今年新发布15款本本的型号,那么可以在这个清单中录入。操作员如果录入了去年的型号或者对手的型号,那么将收到错误提示并要求纠正。允许的值同样也提供php代码生成方式。

需要提醒的是,同时提供普通方式和php生成方式取值的输入区域,一旦使用了php代码,那么它将覆盖普通方式的设置。关于这两种方式录入的细节要求,可以阅读录入框下面的提示信息。

在上述步骤中,我们创建了第一个字段field_benben_model。点击了保存按钮我们会回到管理字段(Manage fields)页面下,我们现在可以继续添加其他预计的文本类型字段。

本本产地,文本类型的;本本特性,文本类型的;本本参数,文本类型的;

 

文本类型的产地、特性、参数我们按照与型号基本相同的方式创建。稍有不同的是“特性、参数”,我选择了多行文本框(Text area(multiple rows))的控件形式(参阅第一部分中的截图)和“格式化”的文本处理方式——我想借用可视化编辑工具直接进行格式的设置。现在的管理字段界面看起来是这个样子。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值