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", 難以管理
其實反向 node reference 只是一個 views,
使用 node reference 作 filter, 限定某 NID 便可以
只是, 每新加一個 "project" 便需要一個 views
再推導出應該使用 views arguments 傳入 "NID from URL"
反向節點連結便 ok 了
Attachment | Size |
---|---|
node reference view.png | 14.61 KB |
2010-07-12 JQuery UI combobox
jquery ui 是一個方便的 jquery 擴充庫,
Drupal 中最常用的就一定是 datepicker 了
免去了很多麻煩的日期選擇器
而且用法很多, 兩個一組的, "未來"限定的等等
而另一個很好用, 但不常用的就是一個 autocomplete 的擴充, combo box
它可以是單選 <select> 的完美替代品,
它包含一個 textfield 和一個button
在 textfield 輸入的時候就會將 <select> 內的相關選項以 autocomplete 方式顯示
或者按一下 button, 全個 <select> 內的選項都會顯示
令使用者可以使用類似 <select> 的方式選取
但它有兩個 bug
1. <select> 的 <option> 的 attribute selected=selected 不會預設被選中
做就了我在 github.com 的 commit (ref3)
2. autocomplete 的值不會被更新直至 autocomplete onblur
在選了combo box 後, 直接 submit 的話, 便會發現 <select> 的值沒有被更新
直至 <select> onblur 了, 使用 firebug 令會很清楚
而 fix 便是:
<script>
minLength: 0,
close: function(event, ui) {
$(this).blur();
}
</script>
ref: http://jqueryui.com/demos/datepicker/
ref2: http://jqueryui.com/demos/autocomplete/#combobox
ref3: http://github.com/joetsuihk/jquery-ui/commit/670f8bf4a3b1783db4733269c0b...
2010-07-05 Exploring ubercart
Trying to setup a site for simple seats reservations.
ubercart is such a huge module set...
to be continue..
如何善用 settings.php 幫助 deployment, 區分 dev, live 伺服器
Live 和 Dev (開發) 的伺服器雖然說是應該完全一樣 (無論數據庫還是代碼上)
但始終都需要區分它們
例如使用不同的數據庫連接, site name 變數不一樣等等
令 deployment 的時需要多花些功夫
例如使用 svn branch 分開兩份 settings.php
但方便的程度便不及我以下介紹的這個方法了
編程概念很簡單
利用 dev 伺服器使用 dev.example.com, 而live 使用 www.example.com 作區分
php 中的 <?php $SERVER['HTTP_HOST'] ?>
便可以得出 domain name
settings 中便可以:
<?php
if ($_SERVER['HTTP_HOST']=='dev.example.com') {
$db_url = 'mysql://root@localhost/dev_db';
} elseif ($_SERVER['HTTP_HOST']=='www.example.com') {
$db_url = 'mysql://root@localhost/live_db';
}
?>
更可以配合使用 $conf
變數方便其他地方使用, 例:
<?php
$conf['env'] = 'dev';
$conf['site_name'] = 'Development server';
?>
Drupal 郵寄副送設定 mail add cc, bcc
在公司應用的 Drupal 內, contact form 當然提供了一個方便的聯絡方式
只是 contact form 並沒有 cc 和 bcc 的收件者設定
需要自建立一個模組, 並使用 hook_mail_alter() 來自定義cc 收件者
實際使用的 code:
<?php
function joe_module_mail_alter(&$message) {
if ($message['id'] == 'email_contact') {
$message['headers']['cc'] = 'joe@example.com';
}
}
?>
其中的
$message['id']
是模組名加上 drupal_mail 的 $key 變數例如 email_contact 其實是修改 email 模組的:
<?php
drupal_mail('contact',$array);
?>