以 CakePHP 開發 XOOPS2 模組 - 第一步

edited 十月 2013 in CakePHP
情境說明:

因為過去有很多客戶、朋友被我鼓吹使用 XOOPS2 ,在我開始對 CakePHP 進入狀況時陷入兩難,我該繼續使用 XOOPS2 的手法為他們開發需要的模組,還是以 CakePHP 打造一個新的網站?新系統還得承接他們過去所有的資料與功能!前者最快,但是當我知道有更快的方法、當我知道自己正在寫的程式碼有其他工具可以快速產生(雖然不是完全取代),繼續用這種方式寫程式感覺就不是那麼有趣。後者呢,不是不可行,功能面的開發難度不高,但是執行效能、穩定度、安全性?換作我是他們,我不會想要承受這種風險。所以,折衷的手法,就是將 Cake 融入 XOOPS2 之中。

下面是我目前的進度,還沒有經過大量的測試,所以無法確定會出現什麼神奇的狀況;而且特別注意,我沒有辦法撥出那麼多時間為你除錯,因為系統整合遇到的問題千奇百怪,我還有接近滿載的工作量需要消化,希望在開始嘗試之前,你要有自己面對各種狀況的準備,別拿心情處理事情,切記。

步驟:

1. 將 Cake 1.2 中的 cake 目錄放到 XOOPS 根目錄
2. 打開 PDT ,進行下面設定:
Run -> External Tools -> Open External Tools Dialog
在 Program 新增一個項目,
Name : BakeXOOPS
Main->Location: D:\xampp\php\php.exe
Working Directory: ${workspace_loc:/xoops2017/cake/console}
Arguments: cake.php bake -working ../../modules/test/

*test 就是希望使用的模組資料夾
3. 執行 BakeXOOPS 程序兩次,第一次會複製基本架構,第二次會進行資料庫設定
4. 連線到產生的資料夾,確認預設狀態能否執行,例如: http://localhost/xoops2017/modules/test/
5. 修改 modules/test/webroot/index.php ,在開始的地方加入下面程式碼:
$xoops_path = dirname( dirname(dirname( dirname( __FILE__ ))));
	require_once( $xoops_path . '/mainfile.php' );
	include XOOPS_ROOT_PATH."/header.php";

結束的地方加入下面這一行:
include XOOPS_ROOT_PATH."/footer.php";

6. 修改 modules/test/views/layouts/default.ctp
改得剩這樣:
<?php echo $html->css('cake.generic');?>
	<?php echo $scripts_for_layout;?>
	<div id="container">
		<div id="content">
			<?php
				if ($session->check('Message.flash')):
						$session->flash();
				endif;
				echo $content_for_layout;
?>
		</div>
	</div>
	<?php echo $cakeDebug?>

7. 修改 modules/test/webroot/css/cake.generic.css

*拿掉會跟 XOOPS 衝突的 CSS 設定

8. 修改 modules/test/config/database.php
改成這樣:
<?php
if(!isset($xoopsOption)) {
    $xoopsOption['nocommon'] = 1;
    $xoops_path = dirname( dirname(dirname( dirname( __FILE__ ))));
    require_once( $xoops_path . '/mainfile.php' );
}
define('CAKE_DB_PREFIX', XOOPS_DB_PREFIX . '_');
class DATABASE_CONFIG {

	var $default = array(
		'driver' => XOOPS_DB_TYPE,
		'persistent' => false,
		'host' => XOOPS_DB_HOST,
		'port' => '',
		'login' => XOOPS_DB_USER,
		'password' => XOOPS_DB_PASS,
		'database' => XOOPS_DB_NAME,
		'schema' => '',
		'prefix' => CAKE_DB_PREFIX,
		'encoding' => ''
	);
}
?>

*記住,修改之後就不要再透過 bake 建立這個設定檔案,建議備份起來,因為不小心按到就要重改
**當然,你可以將部份異動套用到 cake/console/libs/templates/skel 中,只是更新 Cake 時就得多留意

9. 修改 modules/test/config/core.php

把 Session 相關設定都先停用,因為可能會跟 XOOPS 衝突

10. 接著就可以透過 Bake 自動產生程式碼作為程式開發的雛型

這是目前的進度,應該還有很多問題需要解決,有興趣的朋友可以試試, 11/25 可以進行比較深入的交流 :)

*XOOPS 官方網站也有一篇討論,這是我在進行到一半時發現的,他採用的是另外一種方式,有興趣可以參考:
http://www.xoops.org/modules/newbb/viewtopic.php?topic_id=59571&forum=8&post_id=265321

**現在 XOOPS 官方網站好像暫時關閉,從 GOOGLE 輸入下面關鍵字可以找到快取資訊:
site:www.xoops.org cakephp xoops translation

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=2967

評論

Sign In or Register to comment.