public function onInfo() { $header['title'] = '控制中心'; page::header($header); page::top(); page::navbar(array(array('id' => 'main', 'title' => '首页', 'href' => url::build('zotop/index/main')), array('id' => 'info', 'title' => '系统信息', 'href' => url::build('zotop/index/info')))); page::bottom(); page::footer(); }
public function onDefault() { $tables = $this->db->table()->get(true); $header['title'] = '数据库管理'; page::header($header); page::add('<div id="page" class="clearfix">'); page::add('<div id="side">'); block::header('数据库基本信息'); table::header(); table::row(array('w60' => '数据库名称', '2' => '' . $this->db->config['database'] . '')); table::row(array('w60' => '数据库版本', '2' => '' . $this->db->version(true) . '')); table::row(array('w60' => '数据库大小', '2' => '<b>' . $this->db->size() . '</b> ')); table::row(array('w60' => '数据表个数', '2' => '<b>' . count($tables) . '</b> 个')); table::footer(); block::footer(); page::add('</div>'); page::add('<div id="main">'); page::top(); page::navbar($this->navbar(), 'table'); //zotop::dump($tables); form::header(array('class' => 'ajax')); $column['select'] = '<input name="id" class="selectAll" type="checkbox"/>'; $column['name'] = '数据表名称'; $column['size w60'] = '大小'; $column['Rows w60'] = '记录数'; $column['Engine w60'] = '类型'; $column['Collation w100'] = '整理'; $column['manage view w60'] = '浏览'; $column['manage delete'] = '删除'; table::header('list', $column); foreach ($tables as $table) { $size = $table['Data_length'] + $table['Index_length']; $column = array(); $column['select'] = '<input name="id[]" class="select" type="checkbox"/>'; $column['name'] = '<b>' . $table['Name'] . '</b><h5>' . $table['Comment'] . '</h5>'; $column['size w60'] = (string) format::size($size); $column['Rows w60'] = $table['Rows']; $column['Engine w60'] = $table['Engine']; $column['collation w100'] = $table['Collation']; $column['manage view w60'] = '<a href="' . url::build('system/database/table/record') . '">浏览</a>'; $column['manage delete'] = '<a href="' . url::build('system/database/table/delete') . '" class="confirm">删除</a>'; table::row($column); } table::footer(); page::add('<div style="height:200px;"></div>'); form::buttons(array('type' => 'select', 'style' => 'width:180px', 'options' => array('check' => '优化', 'delete' => '删除')), array('type' => 'submit', 'value' => '执行操作')); form::footer(); page::bottom(); page::add('</div>'); page::add('</div>'); page::footer(); }
public static function latest_post() { $cache = kirby()->cache()->get('facebook.latest.post'); if (!is_null($cache)) { return response::json($cache); } $response = remote::get(url::build(array('scheme' => static::$graph_scheme, 'host' => static::$graph_host, 'fragments' => array(c::get('facebook.id'), 'posts'), 'query' => array('access_token' => c::get('facebook.accesstoken'), 'limit' => 1)))); if ($response->content) { // parse json string $data = str::parse($response->content)['data'][0]; $return = array('text' => $data['message'], 'picture' => $data['picture'], 'timestamp' => strtotime($data['updated_time']), 'time_formatted' => strftime('%d. %B %G', strtotime($data['updated_time'])), 'link' => $data['link']); // set cache for 10 minutes kirby()->cache()->set('facebook.latest.post', $return, 10); } else { return false; } return $return; }
public function onDefault($status = -1) { $header['title'] = '短消息'; page::header($header); page::top(); page::navbar(array(array('id' => 'main', 'title' => '短消息列表', 'href' => url::build('zotop/msg')), array('id' => 'send', 'title' => '发送短消息', 'href' => url::build('zotop/msg/send'), 'class' => 'dialog {width:600}')), 'main'); echo '<div style="padding:4px 15px;">'; echo '<table class="list">'; echo '<tr><td class="list-side">程序版本:</td><td>' . zotop::config('zotop.version') . '</td></tr>'; echo '<tr><td class="list-side">程序设计:</td><td>' . zotop::config('zotop.author') . '</td></tr>'; echo '<tr><td class="list-side">程序开发:</td><td>' . zotop::config('zotop.authors') . '</td></tr>'; echo '<tr><td class="list-side">官方网站:</td><td><a href="' . zotop::config('zotop.homepage') . '" target="_blank">' . zotop::config('zotop.homepage') . '</a></td></tr>'; echo '<tr><td class="list-side">安装时间:</td><td>' . zotop::config('zotop.install') . '</td></tr>'; echo '</table>'; echo '</div>'; page::bottom(); page::footer(); }
public function onDefault() { $header['title'] = '测试表单'; page::header($header); page::top(); page::navbar(array(array('id' => 'form', 'title' => '测试表单', 'href' => url::build('system/test')), array('id' => 'info', 'title' => '系统信息', 'href' => url::build('system/index/info'))), 'form'); form::header(array('class' => 'ajax')); block::header(array('title' => '基本信息', 'action' => 'more')); form::add(array('type' => 'checkbox', 'label' => t('多选框'), 'name' => 'test1', 'options' => array('1' => 'a1', '2' => 'a2', '3' => 'a1', '4' => 'a2', '5' => 'a1', '6' => 'a2'), 'value' => array('1', '2'), 'description' => '最多只允许选择三项')); form::add(array('type' => 'checkbox', 'label' => t('多选框'), 'name' => 'test11', 'options' => array('1' => 'a1', '2' => 'a2', '3' => 'a1'), 'value' => array('1', '2'), 'class' => 'block', 'description' => '最多只允许选择三项')); form::add(array('type' => 'select', 'label' => '下拉列表', 'name' => 'test22', 'options' => array('1' => 'a1', '2' => 'a2', '3' => 'a1', '4' => 'a2', '5' => 'a1', '6' => 'a2'), 'value' => array('2', '4'), 'description' => '提示信息')); form::add(array('type' => 'select', 'label' => '下拉列表', 'name' => 'test2', 'options' => array('1' => 'a1', '2' => 'a2', '3' => 'a1', '4' => 'a2', '5' => 'a1', '6' => 'a2'), 'value' => '2', 'description' => '提示信息')); form::add(array('type' => 'text', 'label' => '文本框', 'name' => 'test3', 'value' => '2的飞洒的发生地', 'description' => '提示信息')); block::footer(); block::header(array('title' => '高级信息', 'action' => 'more')); form::add(array('type' => 'image', 'label' => '上传图片', 'name' => 'test4', 'value' => '2的飞洒的发生地', 'valid' => 'required:true', 'description' => '提示信息')); form::add(array('type' => 'textarea', 'label' => '文本框', 'name' => 'test32', 'value' => '2的飞洒的发生地', 'valid' => 'required:true,maxlength:500', 'description' => '提示信息')); form::add(array('label' => '组合', 'type' => 'group', 'fields' => array(array('label' => '年', 'name' => 'year', 'type' => 'text'), array('label' => '月', 'name' => 'month', 'type' => 'text'), array('label' => '日', 'name' => 'day', 'type' => 'text')), 'description' => '生成一个复合控件')); block::footer(); form::buttons(array('type' => 'submit'), array('type' => 'reset')); form::footer(); page::bottom(); page::footer(); }
public static function redirect($url, $time = 0) { $url = url::build($url); header("Location: " . $url); exit; }
/** * Returns a page url for any given page number * * @param int $page The page number * @return string The url */ public function pageURL($page) { if ($this->options['method'] == 'query') { $query = url::query(); if ($page == 1) { unset($query[$this->options['variable']]); } else { $query[$this->options['variable']] = $page; } return url::build(array('query' => $query)); } else { $params = url::params(); if ($page == 1) { unset($params[$this->options['variable']]); } else { $params[$this->options['variable']] = $page; } return url::build(array('params' => $params)); } }
public function navbar() { return array(array('id' => 'default', 'title' => '系统角色列表', 'href' => url::build('zotop/role')), array('id' => 'add', 'title' => '添加角色', 'href' => url::build('zotop/role/add')), array('id' => 'edit', 'title' => '修改角色')); }
public function navbar() { return array(array('id' => 'tables', 'title' => '数据库管理', 'href' => url::build('system/database'))); }
public static function redirect($url, $params = null, $fragment = '') { $url = url::build($url); header("Location: " . $url); exit; }
public function navbar() { return array(array('id' => 'main', 'title' => '基本设置', 'href' => url::build('zotop/index/main')), array('id' => 'info', 'title' => '系统信息', 'href' => url::build('zotop/index/info'))); }
public function navbar() { return array(array('id' => 'default', 'title' => '图片库', 'href' => url::build('zotop/upload/default')), array('id' => 'upload', 'title' => '本地上传', 'href' => url::build('zotop/upload/image')), array('id' => 'bing', 'title' => 'Bing搜索', 'href' => url::build('zotop/upload/bing'))); }
public function navbar() { return array(array('id' => 'default', 'title' => '系统用户列表', 'href' => url::build('zotop/user')), array('id' => 'add', 'title' => '添加系统用户', 'href' => url::build('zotop/user/add')), array('id' => 'changepassword', 'title' => '修改密码'), array('id' => 'changeinfo', 'title' => '修改资料')); }
public function navbar() { return array(array('id' => 'edit', 'title' => '文件编辑', 'href' => url::build('filemanager/file/edit'))); }
public function onDefault($tablename) { $tables = zotop::db()->tables(true); $table = $tables[$tablename]; $fields = array(); if (isset($table)) { $fields = zotop::db()->table($tablename)->fields(true); } $indexes = zotop::db()->table($tablename)->index(); $page['title'] = '数据库管理 <i>></i> 数据表 [ <b>' . $tablename . '</b> ] <h6>' . $table['comment'] . '</h6>'; page::header($page); page::add('<div id="page" class="clearfix">'); page::add('<div id="main">'); page::add('<div id="main-inner">'); page::top(); page::navbar($this->navbar($tablename), 'fields'); form::header(array('class' => 'list')); $column = array(); $column['select'] = html::checkbox(array('name' => 'id', 'class' => 'selectAll')); //$column['key w30 center'] = '索引'; $column['name'] = '字段名称'; $column['type w150'] = '字段类型'; //$column['null w50'] = '空值'; //$column['default w100'] = '默认值'; //$column['comment'] = '注释'; $column['manage pri'] = '主键'; $column['manage index'] = '索引'; $column['manage unique'] = '唯一'; $column['manage fulltext'] = '全文'; $column['manage edit'] = '修改'; $column['manage delete'] = '删除'; table::header('list', $column); foreach ($fields as $field) { $column = array(); $column['select'] = html::checkbox(array('name' => 'id[]', 'class' => 'select')); //$column['key w30 center'] = '<span class="'.$field['key'].'">'.$field['key'].'</span>'; $column['name'] = '<a href="' . zotop::url('database/field/edit', array('table' => $tablename, 'field' => $field['name'])) . '" title="注释:' . $field['comment'] . ' 默认:' . $field['default'] . ' 空值:' . $field['null'] . ' 整理:' . $field['collation'] . '"><b class="' . $field['key'] . '">' . $field['name'] . '</b></a><h5>' . $field['comment'] . '</h5>'; $column['type w150'] = $field['type'] . (empty($field['length']) ? '' : '(' . $field['length'] . ')'); //$column['null w50'] = $field['null']; //$column['default w100'] = $field['default']; //$column['comment'] = $field['comment']; $column['manage pri'] = '<a href="' . zotop::url('database/field/primaryKey', array('table' => $tablename, 'field' => $field['name'])) . '" class="confirm {content:\'<h2>确定要将该字段设置为主键?</h2>\'}">主键</a>'; $column['manage index'] = '<a href="' . zotop::url('database/field/index', array('table' => $tablename, 'field' => $field['name'])) . '" class="confirm {content:\'<h2>确定要索引该字段?</h2>\'}">索引</a>'; $column['manage unique'] = '<a href="' . zotop::url('database/field/unique', array('table' => $tablename, 'field' => $field['name'])) . '" class="confirm {content:\'<h2>确定要将该字段设置为唯一?</h2>\'}">唯一</a>'; if (stripos((string) $field['type'], 'varchar') !== false || stripos((string) $field['type'], 'text') !== false) { $column['manage fulltext'] = '<a href="' . zotop::url('database/field/fulltext', array('table' => $tablename, 'field' => $field['name'])) . '" class="confirm {content:\'<h2>确定要将该字段设置为全文索引?</h2>\'}">全文</a>'; } else { $column['manage fulltext'] = '<a class="disabled">全文</a>'; } $column['manage edit'] = '<a href="' . zotop::url('database/field/edit', array('table' => $tablename, 'field' => $field['name'])) . '">修改</a>'; $column['manage delete'] = '<a href="' . zotop::url('database/field/delete', array('table' => $tablename, 'field' => $field['name'])) . '" class="confirm">删除</a>'; table::row($column, 'select'); } table::footer(); form::buttons(array('type' => 'submit', 'value' => '浏览选中项')); form::footer(); page::bottom(); page::add('</div>'); page::add('</div>'); page::add('<div id="side">'); block::header('数据表信息'); table::header(); table::row(array('w60 bold' => '名称', '2' => '' . $table['name'] . '')); table::row(array('w60 bold' => '大小', '2' => '' . format::byte($table['size']) . '')); table::row(array('w60 bold' => '记录数', '2' => '<b>' . $table['rows'] . '</b> ')); table::row(array('w60 bold' => '整理', '2' => '' . $table['collation'] . '')); table::row(array('w60 bold' => '创建时间', '2' => '' . $table['createtime'] . '')); table::row(array('w60 bold' => '更新时间', '2' => '' . $table['updatetime'] . '')); //table::row(array('w60 bold'=>'注释','2'=>''.$table['comment'].'')); table::footer(); block::footer(); block::header('索引信息'); $column = array(); $column['i w10'] = ''; $column['field'] = '字段'; $column['type w30'] = '类型'; $column['manage dropindex'] = '删除'; table::header('list', $column); foreach ($indexes as $index) { $column = array(); $column['i w10 center'] = '>'; $column['field'] = '<b>' . $index['field'] . '</b>'; $column['type w30'] = $index['type']; $column['manage dropindex'] = '<a href="' . url::build('database/field/dropindex', array('table' => $tablename, 'index' => $index['name'])) . '" class="confirm">删除</a>'; table::row($column, 'select'); } table::footer(); block::footer(); page::add('</div>'); page::add('</div>'); page::footer(); }
public function navbar() { $navbar = array('main' => array('title' => '首页', 'href' => url::build('system/index/main')), 'phpinfo' => array('title' => 'phpinfo', 'href' => url::build('system/index/phpinfo'))); $navbar = zotop::filter('system.main.navbar', $navbar); return $navbar; }
public function navbar() { $navbar = array(array('id' => 'main', 'title' => '首页', 'href' => url::build('zotop/main')), array('id' => 'phpinfo', 'title' => 'phpinfo', 'href' => url::build('zotop/main/phpinfo'))); $navbar = zotop::filter('zotop.main.navbar', $navbar); return $navbar; }
public function onDefault() { $db = zotop::db(); $host = $db->config('hostname'); $dbName = $db->config('database'); $dbVersion = $db->version(true); $dbSize = $db->size(); $tables = zotop::db()->tables(true); $header['title'] = '数据库管理:' . $dbName; page::header($header); page::add('<div id="page" class="clearfix">'); page::add('<div id="side">'); block::header('数据库基本信息'); table::header(); table::row(array('w60' => '数据库主机', '2' => '' . $host . '')); table::row(array('w60' => '数据库名称', '2' => '' . $dbName . '')); table::row(array('w60' => '数据库版本', '2' => '' . $dbVersion . '')); table::row(array('w60' => '数据库大小', '2' => '<b>' . $dbSize . '</b> ')); table::row(array('w60' => '数据表个数', '2' => '<b>' . count($tables) . '</b> 个')); table::footer(); block::footer(); block::header('创建数据表'); form::header(array('action' => zotop::url('database/table/create'), 'template' => 'div')); form::field(array('type' => 'text', 'name' => 'tablename', 'label' => zotop::t('表名称'), 'style' => 'width:180px', 'valid' => '{required:true}', 'description' => '不含前缀,系统会自动加上前缀')); form::buttons(array('type' => 'submit', 'value' => '创建')); form::footer(); block::footer(); page::add('</div>'); page::add('<div id="main">'); page::top(); page::navbar($this->navbar(), 'tables'); //zotop::dump($tables); form::header(array('class' => 'list', 'action' => zotop::url('database/table/action'))); $column['select'] = html::checkbox(array('name' => 'table', 'class' => 'selectAll')); $column['name'] = '数据表名称'; $column['size w60'] = '大小'; $column['Rows w60'] = '记录数'; $column['Engine w60'] = '类型'; $column['Collation w100'] = '整理'; $column['manage view w60'] = '浏览'; $column['manage delete'] = '删除'; page::add('<div style="height:400px;">'); table::header('list', $column); foreach ($tables as $table) { $column = array(); $column['select'] = html::checkbox(array('name' => 'table[]', 'value' => $table['name'], 'class' => 'select')); $column['name'] = '<a href="' . url::build('database/field/default', array('tablename' => $table['name'])) . '"><b>' . $table['name'] . '</b></a><h5>' . $table['comment'] . '</h5>'; $column['size w60'] = (string) format::byte($table['size']); $column['Rows w60'] = $table['rows']; $column['Engine w60'] = $table['engine']; $column['collation w100'] = $table['collation']; $column['manage view w60'] = '<a href="' . url::build('database/table/edit', array('tablename' => $table['name'])) . '">设置</a>'; $column['manage delete'] = '<a href="' . url::build('database/table/delete', array('tablename' => $table['name'])) . '" class="confirm">删除</a>'; table::row($column, 'select'); } table::footer(); page::add('</div>'); form::buttons(array('type' => 'select', 'name' => 'operation', 'style' => 'width:180px', 'options' => array('optimize' => '优化', 'delete' => '删除'), 'value' => 'check'), array('type' => 'submit', 'value' => '执行操作')); form::footer(); page::bottom(); page::add('</div>'); page::add('</div>'); page::footer(); }
table::header(); table::row(array('w60 bold' => '名称', '2' => '' . $table['name'] . '')); table::row(array('w60 bold' => '大小', '2' => '' . format::byte($table['size']) . '')); table::row(array('w60 bold' => '记录数', '2' => '<b>' . $table['rows'] . '</b> ')); table::row(array('w60 bold' => '整理', '2' => '' . $table['collation'] . '')); table::row(array('w60 bold' => '创建时间', '2' => '' . $table['createtime'] . '')); table::row(array('w60 bold' => '更新时间', '2' => '' . $table['updatetime'] . '')); //table::row(array('w60 bold'=>'注释','2'=>''.$table['comment'].'')); table::footer(); block::footer(); block::header('索引信息'); $column = array(); //$column['i w10'] = ''; $column['field'] = '字段'; $column['type w50'] = '类型'; $column['manage dropindex'] = '删除'; table::header('list', $column); foreach ($indexes as $index) { $column = array(); //$column['i w10 center'] = '>'; $column['field'] = '<b>' . $index['field'] . '</b>'; $column['type w50'] = $index['type']; $column['manage dropindex'] = '<a href="' . url::build('database/field/dropindex', array('table' => $tablename, 'index' => $index['name'])) . '" class="confirm">删除</a>'; table::row($column, 'select'); } table::footer(); block::footer(); ?> </div> <?php $this->footer();
public function navbar() { return array(array('id' => 'changeinfo', 'title' => '修改我的资料', 'href' => url::build('zotop/mine/changeinfo')), array('id' => 'changepassword', 'title' => '修改我的密码', 'href' => url::build('zotop/mine/changepassword'))); }
public function navbar($tablename) { return array(array('id' => 'tables', 'title' => '数据表管理', 'href' => url::build('database/table')), array('id' => 'index', 'title' => '数据表结构', 'href' => url::build('database/field/index', array('tablename' => $tablename))), array('id' => 'add', 'title' => '新建字段', 'href' => url::build('database/field/add', array('tablename' => $tablename)), 'class' => 'dialog'), array('id' => 'edit', 'title' => '字段修改', 'href' => '')); }
public function navbar() { $navbar = array(array('id' => 'default', 'title' => '文件管理', 'href' => url::build('filemanager/index'))); $navbar = zotop::filter('filemanager.index.navbar', $navbar); return $navbar; }
/** * url函数 * * @param string $uri uri的顺序为模块、控制器、动作以及参数,一般格式为:module/controller/action/arg1/arg2 * @param int $params url传递的参数 * @param int $extra url传递的额外数据,如: #fragment 等 * * @return string */ public static function url($uri = '', $params = array(), $extra = '') { return url::build($uri, $params, $extra); }
public function __construct($kirby, $root) { // check requirements $this->requirements(); // store the instance as a singleton static::$instance = $this; $this->kirby = $kirby; $this->roots = new \Kirby\Panel\Roots($this, $root); $this->urls = new \Kirby\Panel\Urls($this, $root); // add the panel default options $this->kirby->options = array_merge($this->defaults(), $this->kirby->options); // setup the blueprints roots UserBlueprint::$root = $this->kirby->roots()->blueprints() . DS . 'users'; PageBlueprint::$root = $this->kirby->roots()->blueprints(); // load the site object $this->site = $this->site(); // setup the session $this->session(); // load the current translation $this->translation()->load(); // load all Kirby extensions (methods, tags, smartypants) $this->kirby->extensions(); $this->kirby->plugins(); // setup the multilang site stuff $this->multilang(); // setup the form plugin form::$root = array('default' => $this->roots->fields, 'custom' => $this->kirby->roots()->fields()); // force ssl if set in config if ($this->kirby->option('ssl') and !r::secure()) { // rebuild the current url with https go(url::build(array('scheme' => 'https'))); } // load all available routes $this->routes = array_merge($this->routes, require $this->roots->config . DS . 'routes.php'); // start the router $this->router = new Router($this->routes); // register router filters $this->router->filter('auth', function () use($kirby) { try { $user = panel()->user(); } catch (Exception $e) { panel()->redirect('login'); } }); // check for a completed installation $this->router->filter('isInstalled', function () use($kirby) { $installer = new Installer(); if (!$installer->isCompleted()) { panel()->redirect('install'); } }); // check for valid csrf tokens. Can be used for get requests // since all post requests are blocked anyway $this->router->filter('csrf', function () { panel()->csrfCheck(); }); // csrf protection for every post request if (r::is('post')) { $this->csrfCheck(); } }
public static function url($uri, $params = array(), $fragment = '') { return url::build($uri, $params, $fragment); }
table::header(); table::row(array('w60 bold' => '名称', '2' => '' . $table['name'] . '')); table::row(array('w60 bold' => '大小', '2' => '' . format::byte($table['size']) . '')); table::row(array('w60 bold' => '记录数', '2' => '<b>' . $table['rows'] . '</b> ')); table::row(array('w60 bold' => '整理', '2' => '' . $table['collation'] . '')); table::row(array('w60 bold' => '创建时间', '2' => '' . $table['createtime'] . '')); table::row(array('w60 bold' => '更新时间', '2' => '' . $table['updatetime'] . '')); //table::row(array('w60 bold'=>'注释','2'=>''.$table['comment'].'')); table::footer(); box::footer(); box::header('索引信息'); $column = array(); //$column['i w10'] = ''; $column['field'] = '字段'; $column['type w50'] = '类型'; $column['manage dropindex'] = '删除'; table::header('list', $column); foreach ($indexes as $index) { $column = array(); //$column['i w10 center'] = '>'; $column['field'] = '<b>' . $index['field'] . '</b>'; $column['type w50'] = $index['type']; $column['manage dropindex'] = '<a href="' . url::build('database/field/dropindex/' . $tablename . '/' . $index['name']) . '" class="confirm">删除</a>'; table::row($column, 'select'); } table::footer(); box::footer(); ?> </div> <?php $this->footer();
/** * Starts the router, renders the page and returns the response * * @return mixed */ public function launch() { // this will trigger the configuration $site = $this->site(); // force secure connections if enabled if ($this->option('ssl') and !r::secure()) { // rebuild the current url with https go(url::build(array('scheme' => 'https'))); } // set the timezone for all date functions date_default_timezone_set($this->options['timezone']); // load all extensions $this->extensions(); // load all plugins $this->plugins(); // load all models $this->models(); // start the router $this->router = new Router($this->routes()); $this->route = $this->router->run($this->path()); // check for a valid route if (is_null($this->route)) { header::status('500'); header::type('json'); die(json_encode(array('status' => 'error', 'message' => 'Invalid route or request method'))); } // call the router action with all arguments from the pattern $response = call($this->route->action(), $this->route->arguments()); // load all language variables // this can only be loaded once the router action has been called // otherwise the current language is not yet available $this->localize(); // build the response $this->response = $this->component('response')->make($response); // store the current language in the session if ($this->site()->multilang() && ($language = $this->site()->language())) { s::set('language', $language->code()); } return $this->response; }
public function navbar() { return array(array('id' => 'default', 'title' => '模块列表', 'href' => url::build('zotop/module')), array('id' => 'install', 'title' => '安装模块', 'href' => url::build('zotop/module/install')), array('id' => 'add', 'title' => '新建模块', 'href' => url::build('zotop/module/add')), array('id' => 'edit', 'title' => '编辑模块')); }