線上使用者

目前共有 0 位註冊使用者8 位訪客 在線上。

新會員

  • hihi
  • lady8904
  • xyz
  • arsisthesis
  • selly

書籍推薦

如何加入 Javascript 到 Drupal

Arthur Yu 的照片
Average: 2.6 (5 votes)

之前在研究 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,那麼就算成功了哩!!^^=。

cainiao
User offline. Last seen 2 年 34 週 ago. Offline
Joined: 10/29/2008
hi

hi, 阿舍兄:

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

Arthur Yu
Arthur Yu 的照片
User offline. Last seen 2 日 8 小時 ago. Offline
Joined: 12/17/2007
好久不見...

Hello cainiao兄,

是啊 ! 好久沒看到cainiao兄的消息,有空常來囉 !! ^^=。

阿舍...
阿舍的 Drupal 架站經驗談
http://drupal.soa.tw

阿舍...
阿舍的 Drupal 架站經驗談
http://drupal.soa.tw

anyliv (未確認)
这种方法感觉不太妥

这种方法感觉不太妥当,感觉还是在 template.php 中书写要好些。

Arthur Yu
Arthur Yu 的照片
User offline. Last seen 2 日 8 小時 ago. Offline
Joined: 12/17/2007
是啊 ! 做法有很多種哩 !!

Hello anyliv 兄,

是啊 ! 在 Drupal 裡加入 Javascript 的方法有很多種,阿舍挑了一種自己看的懂的方式來寫 ! 所以就提供參考囉 !! ^^=。

阿舍...
阿舍的 Drupal 架站經驗談
http://drupal.soa.tw

阿舍...
阿舍的 Drupal 架站經驗談
http://drupal.soa.tw

BloggerAds

Facebook Page

Drupal 新聞

Translate


訂閱服務...

最新回應

阿舍的隨手....