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))的控件形式(參閱第一部分中的截圖)和“格式化”的文本處理方式——我想借用可視化編輯工具直接進行格式的設置。現在的管理字段界面看起來是這個樣子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章