function render()
    {
        //得到属性的值
        $name = $this->_extract('name');
        $catch_id = 'Dy_menu' . $name;
        //读取缓存
        $rowSet = Q::cache($catch_id);
        //读取失败
        if (!$rowSet) {
            $rowSet = Sysmenu::find()->order('parent_id ASC, order_pos ASC')->asArray()->getAll();
            //写缓存
            Q::writeCache($catch_id, $rowSet);
        }
        /**
         * 验证不能访问的菜单
         */
        $app = MyApp::instance();
        foreach ($rowSet as $offset => $row) {
            if ($row['controller'] == '') {
                continue;
            }
            $udi = "{$row['controller']}/{$row['action']}";
            //权限判断
            if (!$app->authorizedUDI($app->currentUserRoles(), $udi)) {
                //删除没有权限访问的菜单
                unset($rowSet[$offset]);
            } else {
                $args = array();
                parse_str($row['args'], $args);
                $rowSet[$offset]['url'] = url($udi, $args);
            }
        }
        //数组转换成树
        $menu = Helper_Array::toTree($rowSet, 'menu_id', 'parent_id', 'submenu');
        //	 $mainMenu = & new Helper_Menu($menu) ;
        $mainMenu = new Helper_Menu($menu);
        $output = "var {$name} = ";
        $output .= $mainMenu->returnJsArray(true);
        $output .= ";\n";
        echo <<<EOT

<div id="mainMenuBar"></div>

<link href="js/ThemeOffice/theme.css" rel="stylesheet" type="text/css" />
<script language="javascript" type="text/javascript" src="js/JSCookMenu.js"></script>
<script language="javascript" type="text/javascript" src="js/ThemeOffice/theme.js"></script>

<script language="javascript" type="text/javascript">
{{$output}}

cmDraw ('mainMenuBar', myMenu, 'hbr', cmThemeOffice);
</script>

EOT;
    }
Exemple #2
0
 /**
  * 测试缓存的读写
  *
  * 使用 QCache_Memory
  */
 function testCache()
 {
     $backend = 'QCache_Memory';
     $id = 'test_cache_id1';
     $data = Q::cache($id, null, $backend);
     $this->assertEmpty($data);
     $data = array('value');
     Q::writeCache($id, $data, null, $backend);
     $data2 = Q::cache($id, null, $backend);
     $this->assertEquals($data, $data2);
     Q::cleanCache($id, null, $backend);
     $data2 = Q::cache($id, null, $backend);
     $this->assertEmpty($data2);
 }
Exemple #3
0
 /**
  * 导入路由规则
  *
  * 如果指定了 $cache_id 参数,则首先尝试从缓存载入解析好的路由规则。
  *
  * @param array $rules
  * @param string $cache_id
  *
  * @return QRouter
  */
 function import(array $rules, $cache_id = null)
 {
     if ($cache_id) {
         $backend = Q::ini('runtime_cache_backend');
         $routes = Q::cache($cache_id, null, $backend);
     }
     if (!$cache_id || !$routes) {
         $routes = array();
         foreach ($rules as $route_name => $rule) {
             $routes[$route_name] = $this->prepareRoute($route_name, $rule);
         }
         if ($cache_id) {
             Q::writeCache($cache_id, $routes, array('life_time' => Q::ini('routes_cache_lifetime')), $backend);
         }
     }
     $this->_routes = array_merge($this->_routes, $routes);
     return $this;
 }
Exemple #4
0
 /**
  * 设置当前数据表的元数据
  */
 protected function _setupMeta()
 {
     $table_name = $this->getFullTableName();
     $this->_cache_id = $this->_conn->getID() . '-' . $table_name;
     if (isset(self::$_meta[$this->_cache_id])) {
         return;
     }
     $cached = Q::ini('db_meta_cached');
     if ($cached) {
         // 尝试从缓存读取
         $policy = array('encoding_filename' => true, 'serialize' => true, 'life_time' => Q::ini('db_meta_lifetime'), 'cache_dir' => Q::ini('runtime_cache_dir'));
         $backend = Q::ini('db_meta_cache_backend');
         $data = Q::cache($this->_cache_id, $policy, $backend);
         if (is_array($data) && !empty($data)) {
             self::$_meta[$this->_cache_id] = $data[0];
             self::$_fields[$this->_cache_id] = $data[1];
             return;
         }
     }
     // 从数据库获得 meta
     $meta = $this->_conn->metaColumns($table_name);
     $fields = array();
     foreach ($meta as $field) {
         $fields[$field['name']] = true;
     }
     self::$_meta[$this->_cache_id] = $meta;
     self::$_fields[$this->_cache_id] = $fields;
     $data = array($meta, $fields);
     if ($cached) {
         // 缓存数据
         Q::writeCache($this->_cache_id, $data, $policy, $backend);
     }
 }