
之前在研究 Profile 模組時,就有在想欄位驗證的問題,後來 cainiao 兄有問到,所以阿舍就找了個空檔來研究,不過,都是斷斷續續的,一直沒有法好好的來研究一下,終於有個春節假期可以來看看,所以就來瞭解一下,果然,真的和阿舍想的不一樣,本來阿舍以為直接在 xxx.tlp.php 裡加 Javascript 就好了,結果,Drupal 官網的文件上有說...."不可以".....=____=!!。{PS.這篇寫有一陣子了,忘了貼上來了....-____-!!}
其實,阿舍一開始的想法是說,先做一個 Profile 編輯用的 tpl.php 的範本檔,然後在檔案裡加入阿舍自己寫的 Javascript 程式碼或加掛一個 Javascript 檔,但是,際實要做起來,也是有點麻煩的,只有一個 Profile 的範本檔是還好,但是,如果要應用在不同的內容類型的話,那麼也就要為每一個內容類型都去弄一個 tpl.php 檔,實在是有點不夠效益哩 !!...。
所以,阿舍就去查了一下官網,看看有沒有比較好的 "撇步"...,經過一番的翻來翻去,怎麼找都是在講那個 drupal_add_js 函數,這樣阿舍就有點搞不懂了, drupal_add_js 函數是一個 PHP 的函數,要在那裡把這個函數給放進去呢 ?
阿舍一下想不出個所以然來,不過,等了一會兒,阿舍去喝了一杯黑糖泡熱水 ( 過年總是在吃一些有的沒的....=____=!! )之後,就想起,好像那裡有可以塞 PHP 程式碼的...不就是那個 「區塊 ( Block)」嗎 ? 於是,阿舍就到 「管理」 ? 「網站建置」? 「區塊」( /admin/build/block ) 去新增一個區塊,然後在「區塊說明: ( Block description )」隨便填入一個名稱,而「區塊標題: ( Block title )」則是千萬別填,接著在「區塊內容:(Block body)」放入下列程式碼:( 阿舍是用 Story 內容類型來當例子說明的 )
Drupal 5.x
<?
if ($node->type= "Story") {
// 請把 "Story" 換成大德要作用的內容類型。
drupal_add_js("/aa/aa.js");
// 請把 "/aa/aa.js" 換成大德自己的 Javascript 檔案 。
}
?>
Drupal 6.x
<?
if ( $type= "Story") {
// 請把 "Story" 換成大德要作用的內容類型。
drupal_add_js("/aa/aa.js");
// 請把 "/aa/aa.js" 換成大德自己的 Javascript 檔案 。
}
?>Drupal 6 已經有提供 $type 變數可用來判斷內類型,而 Drupal 5 沒有,只能從 $node 物件來得知,所以兩個版本的寫法有點不同。
接著,要把「輸入格式 ( Input Format )」設定為「PHP code」,這時,如果是使用 Drupal 5.x 的大德們,要先按「儲存區塊 ( Save Block)」後回到區塊總覽頁面,再按「設定」進入才會看到下面提到的欄位項目。
在接著的「自訂顯示設定: ( Custom visibility settings: )」項目,選「使用者不能控制是否要顯示此區塊。( Users cannot control whether or not they see this block. )」,不然 ,使用者要是沒顯示這個區塊,那麼要加入的 Javascript 就會不見了。
再來的「為特定角色顯示區塊: (Show block for specific roles: )」這個項目,就三個選項都不用勾,這樣就會所有人都有效了。
最後的「在特定頁面裡顯示區塊: ( Show block on specific pages: )」項目,選最下面的那個「只在以下頁面裡顯示此區塊.) ( Show on only the listed pages. )」,然後在下面的欄位輸入:
node/*/edit
node/add/story
第二行的 story 請改成和最上面的 PHP 程式碼相同的內容類型,這樣就可按「儲存區塊」來回到區塊的總覽頁面來設定這個新區塊的顯示區域 ( Region ),阿舍有試過,不管是放在那個區域,Drupal 都會因為是呼叫 drupal_add_js 函數放入 Javascript 的關係,會把新加入的 Javascript HTML 程式碼和 Drupal 內建或其它模組的 js 檔放在一起,所以,可以隨便放,OK 的啦!...^^=。
再來就要來驗收看看囉 !! 以阿舍為例,就是去新建或編輯一個 Stroy 的文件,然後,檢查產生的 HTML 原始碼裡有沒有加入這個 aa.js ,如果有就算成功一半了,接著,就再新增或編輯一個別種的內容類型,一樣的,檢視所產生的 HTML 原始碼,如果沒有發現有這個 aa.js,那麼就算成功了哩!!^^=。
- 增加新的回應
- 瀏覽次數: 4402
这种方法感觉不太妥当,感觉还是在 template.php 中书写要好些。
Hello anyliv 兄,
是啊 ! 在 Drupal 裡加入 Javascript 的方法有很多種,阿舍挑了一種自己看的懂的方式來寫 ! 所以就提供參考囉 !! ^^=。
阿舍...
阿舍的 Drupal 架站經驗談
http://drupal.soa.tw

hi, 阿舍兄:
好长时间没来了,问声好。最近被搞的头大,都没时间来学习。今天来了就看到这篇文章,感谢。