views

2010-11-01 features module - 一個 Drupal 內建的 views 版本管理系統

一直以來, Drupal 都沒有有效的方法可以管理 views 的設定參數
意思是說, 例如測試環境對 views 模組所做的變更,
沒有方便的方法可以將它轉移到真的對外伺服器之上
而只可以用 mysqldump, 或者複雜的使用 views 的 export
相似的問題出現在 cck 之上

最新的解決方法就是 features 模組
它的主體功能是將選取的設定輸出到一個全新的, 自定名稱的 "設定模組"
讓你下載 解壓 上傳 啟用 "設定模組"
然後只要 views cck 設定有改變
features 模組會知道
並給予:
輸出 (輸出新的 "設定模組"到真的對外環境)
還原 (還原到 "設定模組"的設定)

而你從此便可以對 views 和 cck 的設定參數作 SCM 了

edit: Part 2 (2010-11-22)

Multiple display::attachment to views

Display::attachment 是 views 2.x 新加的一個 display 類
用法類似block, 但它的特別之處是它的位置一定要在另一個 display::page 的前或後
所以才有 "attachment" 的名號

例如, "最近文章" (/recent_post) 前需要一個 "特選文章" 的block
當然可以建立一個 block, 然後使用 region 的方式放到 "最近文章" 頁面前
但也可以使用 attachment, attach 到 page 的前面就可以了

attachment 都有自己的 templates, 操作上和原理上都和一般的 display 沒有大分別
但比起 region+block 的方式就方便多, 也不需要自己增加 region 了

Drupal, Views date format

Drupal 內需要顯示日期的時間有很多,
node 的內頁, index page 的文章按日期排列等等

但 Drupal 只內建long, medium, short 三種預定了的日期格式
需要其他的格式當然可以自己在 theme 的層面使用 php 的 date()
但其實 Drupal 的 date module 可以使用 Drupal 設定的方式改變輸出的格式
Administer ›› Site configuration ›› Date and time ›› format ›› add (admin/settings/date-time/formats/add)
就可以將 "short" 改成 Aug 21, 2010 之類的格式了

自定Views 欄位輸出 Views fields display

開發多了以後, 慢慢發展了一個自己比較喜歡的 views templating 方式, 分享一下

1. Row style
絕大部份 "Row style" 都會使用 "fields",
是為了靈活性, 可以在 "Fields" 取需要的欄位
相反 "Row style" "node" 只可以選擇 "full node" 或者 "teaser"
而且它的輸出就會使用 node.tpl.php
不方便, 我習慣自己建立 "frontpage" 資料夾專門用作放置該 views 的 template 的

2. *.tpl.php 儲存結構
續上, 一個 views 在該 theme 之內都有一個資料夾
甚至是一個 display 一個, 例如 views "frontpage":
--theme_joe (資料夾)
----frontpage (資料夾)
------views-view-fields--frontpage.tpl.php
----taxonomy (資料夾)
------views-view-fields--taxonomy.tpl.php

Node "back" referenc-ing 反向節點連結


Node reference 是一種 cck 的欄位
用以放入另一個節點, 建立節點之間的關係
簡單的樹狀結構便可以使用 node reference 來建立主從關係

但今次要討論的是 "反向的 node reference"
想像兩個 content type "project" 和 "task"
"task" 需要一個 node reference 欄位指定它的所屬 "project"
但 "project" 頁面便需要一個 list of tasks
而也不可能在 "project" 同樣建立 node reference 到 "task"
太費時了, 既是雙重輸入 (double entry), 又 "project" 可以有很多 "task", 難以管理

views 表格頭 theming (table header theming)

先修文章:
http://joetsuihk.com/node/94
http://joetsuihk.com/node/95

Views 的table header是可以使用 *.tpl.php 修改的,
常見的應用包括使用 icon 而不使用 text 作為 label
只要修改 style output 的 views-view-table.tpl.php

2010-05-18 Drupal db_query vs views 的比較, 開發時要注意的地方

-
Free tags: 

一直看到國內的進階 Drupal 教程都會提到使用 db_query() 用以代替 views, 例如: http://drupalchina.org/node/9021
觀點大概是 views 使用太多資源了, 使用 db_query() 能直接存取數據資料, 性能上會比較好,
也更自由等等

以下是我的個人意見:

雖然是進階的教程, 但開發者在有其他可使用的方法之下直接存取是不可取的, 原因:

進階 views 模版(二): HTML 列表 Complex views templating, part 2, table, HTML list templates

part1

補一下 table 顯示之下的 theming.

假如你的 table 有4個 fields, views 的 theming information 便有6個 templates:
1個 display 的 tpl (page 或block)
1個 style tpl, 包含了 <table>
每1個 field 都可以有一個自己的 tpl (詳見 attachment)

HTML list (ul, ol) 也是同樣的情況
display + style tpl, 外加每個field 一個tpl
也可以做 field by field 的 tpl, 修改 <ul> 的class, <li>多個 span 之類

進階 views 模版(一): 簡介, 設定, tpl 檔 Complex views templating, part 1, intro, config, tpl

views 的 theming/templating 是Drupal theming 的高級班了
之前一直沒有信心將這個部份的教做好, 但這次都要挑戰一下難度, 唯有試試用多一點圖片展示了

首先, 我們常用的theme developer 是不能夠幫我們查出 tpl 的檔名的 (但仍可以看到可用的 vars)
因為 views 的 templating 機制雖和 Drupal core 的極相似, 但卻是views 自己定義的
主要是為了應付更複雜, 更多變的情況
但也不需要擔心, 概念上, 操作上都和我們一向做的非常相似

既然theme developer 不適用, views 有自己的 tpl suggestion: Basic settings 內的 Theme: information(下圖1)

上圖二便是 tpl suggestions, 而粗體則是現正在使用的 tpl 檔

views 中只顯示屬於自己角色的頁面

來自社區的一個問題: http://drupalchina.org/node/8514#comment-26113
比如我是 "writer" role, 我想要一個頁面都是 writer role 的用戶的nodes:

views 的 argument 應:
加, User:roles -> Provide default argument
Default argument type: PHP code:

Pages

Google