模块:使用CakePHP为XOOPS制作模块
作者: kiang于2007/11/24 23:56:58 9602次阅读本文将向您介绍如何使用bake来构建XOOPS的模块。 :)
环境
Windows XP Pro SP2
XAMPP 1.6.0a / PHP版本5.2.4
CakePHP 1.2.0.5875预发布
XOOPS 2.0.17.1
PDT 1.0
1. 在XAMPP中设置XOOPS,在PDT中打开一个项目,并将工作区指向XOOPS的根目录。
2. 下载并解压1.2版本的Cake,将cake文件夹移动到XOOPS的根目录中(D:\xampp\htdocs\xoops\cake)
3. 打开PDT,
运行 -> 外部工具 -> 打开外部工具对话框
在程序中添加一个条目
引用
名称:BakeXOOPS
主 -> 位置:D:\xampp\php\php.exe
工作目录:${workspace_loc:/xoops/cake/console}
参数:cake.php bake -working ../../modules/test/
*名称'test'是要构建的模块名称。
4. 执行BakeXOOPS两次,以获得Cake的基本框架并为新模块(test)设置数据库。
5. 在浏览器中打开http://localhost/xoops/modules/test/,查看Cake是否在test模块中工作。
6. 修改xoops/modules/test/webroot/index.php,在开头添加以下行
$xoops_path = dirname( dirname( dirname( __FILE__ ))));
require_once( $xoops_path . '/mainfile.php' );
include XOOPS_ROOT_PATH."/header.php";
并在结尾
include XOOPS_ROOT_PATH."/footer.php";
7. 修改xoops/modules/test/views/layouts/default.ctp,结果
全局变量$xoopsTpl;
$xoopsTpl->assign('xoops_module_header', $html->css('cake.generic') . $scripts_for_layout);
如果$session->check('Message.flash'))):
$session->flash();
endif;
echo $content_for_layout;
echo $cakeDebug;
8. 修改xoops/modules/test/webroot/css/cake.generic.css,尝试移除冲突行,结果如下
table tr.altrow td {
background: #f4f4f4;
}
td.actions {
text-align: center;
white-space: nowrap;
}
td.actions a {
display: inline;
margin: 0px 6px;
}
.cakeSqlLog table {
background: #f4f4f4;
}
.cakeSqlLog td {
padding: 4px 8px;
text-align: left;
}
/* Paging */
div.paging {
color: #ccc;
margin-bottom: 2em;
}
div.paging div.disabled {
color: #ddd;
display: inline;
}
/* Notices and Errors */
div.message {
clear: both;
color: #900;
font-size: 140%;
font-weight: bold;
margin: 1em 0;
}
div.error-message {
clear: both;
color: #900;
font-weight: bold;
}
div.error em {
font-size: 140%;
color: #003d4c;
}
span.notice {
background-color: #c6c65b;
color: #fff;
display: block;
font-size: 140%;
padding: 0.5em;
margin: 1em 0;
}
/* Actions */
div.index div.actions {
clear: both;
margin-top: .4em;
text-align: left;
}
div.view div.actions {
clear: both;
margin-top: .4em;
text-align: left;
width: 60%;
}
div.actions ul {
margin: 0px 0;
padding: 0;
}
div.actions li {
display: inline;
list-style-type: none;
line-height: 2em;
margin: 0 2em 0 0;
white-space: nowrap;
}
div.actions ul li a {
color: #003d4c;
text-decoration: none;
}
div.actions ul li a:hover {
color: #333;
text-decoration: underline;
}
/* Related */
div.related {
clear: both;
display: block;
}
/* Debugging */
pre.cake-debug {
background: #ffcc00;
font-size: 120%;
line-height: 18px;
margin: 4px 2px;
overflow: auto;
position: relative;
}
div.cake-stack-trace {
background: #fff;
color: #333;
margin: 4px 2px;
padding: 4px;
font-size: 120%;
line-height: 18px;
overflow: auto;
position: relative;
}
div.cake-code-dump pre {
position: relative;
overflow: auto;
}
div.cake-stack-trace pre, div.cake-code-dump pre {
color: #000000;
background-color: #F0F0F0;
border: 1px dotted #606060;
margin: 4px 2px;
padding: 4px;
overflow: auto;
}
div.cake-code-dump pre, div.cake-code-dump pre code {
clear: both;
font-size: 12px;
line-height: 5px;
margin: 4px 2px;
padding: 4px;
overflow: auto;
}
div.cake-code-dump span.code-highlight {
background-color: #FFFF00;
}
9. 修改xoops/modules/test/config/database.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' => '' );
}
10. 修改xoops/modules/test/config/core.php
禁用此设置
11. 修改xoops/modules/test/config/core.php中的缓存设置
12. 修改xoops/cake/libs/cache/file.php
禁用第79行
13. 然后您就可以开始烘烤模块了。 :)
已知问题
1. 在模块的xoops_version.php中,我无法使用$modversion['sub']来添加子菜单,就像其他XOOPS模块一样。
2. 有时候我会遇到空白页,切换调试设置或刷新页面可能会得到正确的结果。
3. 我不能同时打开调试设置。
4. 我遇到了许多与变量作用域有关的问题,它们与过去构建XOOPS模块的方式不同。
5. “永不”在生产中使用结果而不小心,要更加,更加,更多地留意。