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 = 'mantisbt-dev@lists.sourceforge.net';
        $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;
    }
}

插件所在目录结构如下:

143228153.jpg

插件首页是以插件名称命名的。内容如之前所占的代码,其中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: p_w_upload; 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开发手册。