注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

John's Blog

天空,有梦就可以飞翔!

 
 
 

日志

 
 
关于我

刚走出校园的毕业生,就读计算机网络专业,对网站建设有一定的基础。开始探求Drupal已有一段时间,对Drupal的发展很是看好。现就职于深圳慧衡科技有限公司(intematrix.cn),它是一家专门服务于中国及海外中小企业的网络营销分析和优化服务提供商。 QQ交流群:44581272

网易考拉推荐

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

2009-04-20 11:15:42|  分类: drupal学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

文章转自drupal.org

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。关于扩展模块的组织方式请查阅其他文章):

  • cck
  • content_copy
  • content_permissions
  • fieldgroup
  • number
  • optionwidgets
  • text
  • userreference
  • imagefield
  • link
  • email
  • blockreference
  • cck_blocks
  • cck_fieldgroup_tabs
  • cck_formatters
  • commentreference
  •  

    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 下,如图所示:
    Drupal中CCK  Views 模块使用小结(之一) - Drupal 探求者 - Johns Blog

     

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

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

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

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

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

    安装上列CCK模块,我们使用文本类型时拥有如下类型的控件,我们选择单行文本框(Text Field)控件:
    Drupal中CCK  Views 模块使用小结(之一) - Drupal 探求者 - Johns Blog

    点击继续按钮到下一页 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)

    说一下后两组的设置。
    Drupal中CCK  Views 模块使用小结(之一) - Drupal 探求者 - Johns Blog

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

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

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

    帮助文本(Help text):需要按照什么要求、什么方式录入字段内容,可以在这里进行指定。帮助文本只出现在创建、编辑时的界面中,不会出现在最终显示的页面内;
    Drupal中CCK  Views 模块使用小结(之一) - Drupal 探求者 - Johns Blog

    必须(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))的控件形式(参阅第一部分中的截图)和“格式化”的文本处理方式——我想借用可视化编辑工具直接进行格式的设置。现在的管理字段界面看起来是这个样子。
    Drupal中CCK  Views 模块使用小结(之一) - Drupal 探求者 - Johns Blog

     



      评论这张
     
    阅读(305)| 评论(0)
    推荐 转载

    历史上的今天

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2016