如果,我想要寫支 .php 的程式,但要使用到 Drupal 的功能的話,要怎麼做呢?
因為某些原因,我要寫一支獨立於 Drupal 之外,但卻要撈出 Drupal 資料庫裏的東西出來秀的程式。正在不知從何著手時,發現到 Drupal 根目錄的 cron.php 不正是一個這樣的程式嗎? 於是發現只要在自行寫的 .php 一開頭加上如下的程式碼,就可以了!
<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
於是我試著利用 Views 來撈出資料來:<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$view_name = 'daily_list'; //name of view
$limit = 6; // number of returns
$view_args = array();
$view = views_get_view($view_name);
print views_build_view('embed', $view, $view_args, FALSE, $limit);
結果成功了!! 後來我又想把這支程式放到別的目錄去,不想把它和 Drupal 放在一起,但這麼一移,程式就不能跑了。研究了一下,發現到是 bootstrap.inc 在 include 的路徑是寫死的…靈機一動,繼出 chdir 大法 就成了。舉個例子,我在使用 Drupal 架的網站的一個叫 ooxx 的子目錄下寫了個 ooxx.php 的程式,於是我只要剛剛的程式碼開頭加上:
chdir(../);
就行了。
範例: http://drakeguan.org/front/front05/index.php (或是你連到 http://drakeguan.org/ 然後多 reload 幾次也行…)
附加檔案 | 大小 |
---|---|
drake_at_drupal.jpg | 109.25 KB |
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
學到東西了, 謝
Joetsui's blog
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
我才是要感謝你,你的 blog 寫了不少精闢的 drupal 開發文章呢,我受益良多 :)
和你的貢獻相比,我只是一點點的皮毛分享而以~
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
其實... 如果只要讀資料庫...
drupal_bootstrap( ); 的參數下 DRUPAL_BOOTSTRAP_DATABASE 就好了。
不然會因為讀了許多「有的沒有的東西」,造成回應時間變慢。
詳細的參數... 在 api 文件裡有。
函數說明文件
優點是方便,不用去理會一些有的沒有的設定。
缺點是效能上還是比直接寫mysql程式慢一些。
之前曾經過用,那個時候需要先下一個 chdir( ); 把工作目錄指到 Drupal 根目錄下。
不然require_once 的地方就會出錯,會找不到檔案。
不知道新版本是不是就沒有這個問題了。
現在我改用 PEAR 模組的 MDB2 來作資料庫的連線。功能上比 drupal 的 db_foo 強得多(畢竟是專門為連DB作的)。
因為是作為 api 給其它網站呼叫,所以用不到前台的畫面。所以就不用引用 drupal 的函數管理。
但是要作排序,資料表格呈現的話,感覺還是 drupal 的比較好用。
user, watchlog 的使用者列表、日誌排序功能,一直是我覺得神奇... 但仍沒搞懂的部分。居然可以用同一段 SQL 語法作那麼多變化....
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
的確是就像你說的那樣,我就是因為要用到 Views 的功能,所以才會使用 FULL。
你說的,使用 PEAR 模組,是指怎麼樣的情況咧?
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
架構是一個主站,多個子站。
支站登入是使用主站的帳號密碼,所以子站需要向主站要求帳號密碼。
也許有人會覺得奇怪,Drupal 本身不是就有分散認證的功能嗎?
但因為兩個原因,我不得不另外寫一個認證用的模組。
(1) Drupal 的分散式認證,是直接把遠端帳號的資料 copy 一份回來。
所以就算這個帳號在主站主機被停用,子站依然可以正常的登入。
這樣就無法由主站作帳號的管理。
(2) 除了登入完成後,除了本身帳號的資料外,還有其它客製的屬性是profile無法作到的。
所以還是要特別作一個傳和接的程式。
接收的部分還是用 Drupal hook 的功能作出。
傳值的部分則是用 PEAR::MDB2 連資料庫, 加上 PHP 5 的 SOAP 類別來傳值。
因為完全不用在意畫面,單純傳值,所以以能最快回應的方式來撰寫程式。
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
總覺得你有種...
玩上癮的感覺 哈哈~~
--
from open mind to open source~
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
試了一下,有個地方也許要修正,在chdir的地方加上' ',成為
chdir('../');
Re: 把 Drupal 的功能,套進自己寫的程式裏頭
Bootstrapping
http://devzone.zend.com/node/view/id/70
http://www.serversidemagazine.com/php/bootstrap-php-code