mantisBT开发一个基于新浪云计算sae的多人文件管理系统的项目遇到问题总结:
这个首先就是申请一个新浪的账号,用于搭建MantisBT缺陷追踪系统。搭建过程还是略过吧,我感觉这些过程都不是特别重要,自己花个半天时间或一天时间也就搭建成功了,现在我主要讲一讲我开发的时候遇到的一些问题,以及相应的解决方法。
搭建过程中如果是开发使用,就不用一定会用到mail功能,那么我们就可以注释掉注册时邮箱验证。
下面我简单介绍一下MantisBugTracker系统插件开发的规范。
首先是插件开发:
MantisBT的插件类,是继承于MantisPlugin类,其中注册函数主要是设置插件的基本配置。例如插件名、插件描述、插件的主页等等.如何给插件添加一个主页面,其中print_project_menu主要实现在系统的主菜单栏中添加改插件。
<?php class FileManagerPlugin extends MantisPlugin { function register() { $this->name = plugin_lang_get( 'title' ); $this->description = plugin_lang_get( 'description' ); $this->page = 'file_show'; $this->version = '1.0'; $this->requires = array( 'MantisCore' => '1.2.0', ); $this->author = 'jerry'; $this->contact = '[email protected]'; $this->url = 'http://www.mantisbt.org'; } function install() { return true; } function hooks( ) { $t_hooks = array( 'EVENT_MENU_MAIN' => 'print_menu_projects', ); return array_merge( parent::hooks(), $t_hooks ); } /* * 添加link */ function print_menu_projects( ) { $t_links = array(); // plugin_page函数用来拼接pages目录下面的php页面 $t_page = plugin_page( 'file_show.php' ); $t_lang = 'fileManager'; $t_links[] = "<a href=\"$t_page\">$t_lang</a>"; return $t_links; } }
插件所在目录结构如下:
插件首页是以插件名称命名的。内容如之前所占的代码,其中lang放置的多语言支持文件,pages是放置插件的相关页面,files放置css,js图片等文件,core主要放置一些引用类库的文件。
其中插件编写常用函数和问题介绍
1.如何获取当前登录用户信息:
//获取用户信息 $row = user_get_row( auth_get_current_user_id() ); extract( $row, EXTR_PREFIX_ALL, 'u' ); $_SESSION['u_id'] = $u_id; $_SESSION['u_name'] = $u_username;
2.如何将该插件添加到菜单栏中:
function hooks( ) { $t_hooks = array( 'EVENT_MENU_MAIN' => 'print_menu_projects', ); return array_merge( parent::hooks(), $t_hooks ); } /* * 添加link */ function print_menu_projects( ) { $t_links = array(); // plugin_page函数用来拼接pages目录下面的php页面 $t_page = plugin_page( 'file_show.php' ); $t_lang = 'fileManager'; $t_links[] = "<a href=\"$t_page\">$t_lang</a>"; return $t_links; } 3.如如何
3.如何解决sae上storage下载的问题。
<?php require_once '../core/config.php'; if(!isset($_GET["filename"])){ echo "short of filename"; exit(); } $filename = $_GET["filename"]; $downFile = $_GET["downFile"]; //检查文件是否存在 if (!$sae->fileExists( $domain,$filename)) { exit (); } else { $newName = urlencode($downFile); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$newName); header('Content-Transfer-Encoding: binary'); echo file_get_contents('saestor://'.$domain.'/'.$filename); } ?>
4.如何获取页面的连接。
plugin_page( '页面的名字(除去扩展名)' );
5.如何获取file目录下的文件
plugin_file( 'foo.css' );
6.如何跳转页面
print_successful_redirect( plugin_page( 'foo', true ) );
7.如何获取lang里面设置的常量:
plugin_config_delete( 'foo_or_bar' );
8.打印页面的头布局:
html_page_top( plugin_lang_get( 'configuration' ) );
9.打印页面的尾布局:
html_page_bottom();
10.引发一个事件:
event_signal( 'EVENT_EXAMPLE_FOO' );
以上是常见的问题和指南,如果想要更详细的信息请参考,MantisBugTracker开发手册。