- 浏览: 179605 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Caelebs:
RMI及其调试(JDK1.6) -
walker2009:
...
svn如何使用import目录作为工作拷贝+我的svn学习笔记(转) -
ygsilence:
请问,怎么linux版本的xampp怎么整合现有tomcat, ...
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续] -
witcheryne:
zrong 写道skanion 写道VIMweejulius ...
svn + vim + ant + linux 竟然完全替代了eclipse -
zrong:
skanion 写道VIMweejulius 写道怎么重构用V ...
svn + vim + ant + linux 竟然完全替代了eclipse
[原创]SS FrameWork For PHP 4.0 (专注于extjs和flex的PHP MVC核心框架)
这是我以前写的PHP MVC 框架核心, 麻雀虽小五脏俱全,完整代码详见附件 SS FrameWork For PHP 4.0.rar
该框架主要用于php与extjs(json),flex(xml)的交互操作, 简单而实用,不像zend 那么臃肿(zend的功能你能用到20%已经很好了)
由于采用了ant, build前请下载JRE, 并设置好JAVA_HOME,CLASSPATH和PATH(或者放到jre目录), 然后点击install.bat,最后将build目录就是你要找的目录
======================================
几个核心代码:
index.php
define.php
db.sys.php:
autoload.fun.php
cache.sys.php
注释是有的,不过放在另外一个案例里,我还没有空整合在一起,过几天一起放上去吧
加案例的要过几天,因为我的那个案例有些部分不能完全公开.偶还得核实下
该框架主要用于php与extjs(json),flex(xml)的交互操作, 简单而实用,不像zend 那么臃肿(zend的功能你能用到20%已经很好了)
由于采用了ant, build前请下载JRE, 并设置好JAVA_HOME,CLASSPATH和PATH(或者放到jre目录), 然后点击install.bat,最后将build目录就是你要找的目录
======================================
几个核心代码:
index.php
<?php require( 'define.php' ); /** * SS FrameWork 3.0 For PHP * @author 影枫.爪哇 <mail@shadowsnow.com> * @copyright 2009-2011 skanion.iteye.com * @version 3.0 * @since 2011.09.14 */ $ctrl=isset($_REQUEST['c']) ? trim($_REQUEST['c']) : 'index'; $action=isset($_REQUEST['a']) ? ($_REQUEST['a']) : 'index'; ss_conf('db'); ss_conf('web'); ss_sys('db'); //db::getInstance()->query('SET NAMES UTF8'); ss_sys('id'); ss_sys('ip'); ss_sys('chklogin'); ss_sys('cache'); chklogin::init(); ip::setIp(); ss_model($ctrl); ss_call_ctrl($ctrl,$action);
define.php
<?php define('SS', 'ShadowSnow'); define('ACCESS', 'Access Declined.'); define('DS', DIRECTORY_SEPARATOR); define('WEBROOT', dirname(__FILE__) .DS); define('CLASSES',WEBROOT . 'classes' .DS); define('FUN', CLASSES . 'function' .DS); define('INC', CLASSES . 'inc' .DS); define('MODEL', CLASSES . 'model' .DS); define('SYS', CLASSES . 'system' .DS); define('CONF', WEBROOT . 'config' .DS); define('CTRL', WEBROOT . 'controller' .DS); define('VIEW', WEBROOT . 'view' .DS); define('CACHE', WEBROOT . 'cache' .DS); define('PUB', WEBROOT . 'public' .DS); define('IMGAE', PUB . 'image' .DS); define('JS', PUB . 'js' .DS); define('CSS', PUB . 'css' .DS); define('PAGE', PUB . 'page' .DS); define('SWF', PUB . 'swf' .DS); define('URL', 'http://'. $_SERVER['SERVER_NAME']. '/'); define('JsonURL', 'http://'. $_SERVER['SERVER_NAME']. '/index.php'); //date_default_timezone_set("Etc/GMT-8"); date_default_timezone_set('Asia/Shanghai'); //echo date_default_timezone_get(); error_reporting(E_ALL); ini_set('display_errors','On'); require( FUN. 'autoload.fun.php'); ss_conf('chk_lang'); ss_conf('lang_' . chk_lang::$lang); ss_fun('main'); ss_fun('filter'); ss_sys('ss'); session_start();
db.sys.php:
<?php defined('SS') or exit('Access Declined.'); class db_base { var $host = ""; var $database = ""; var $user = ""; var $password = ""; var $port = ""; var $socket = ""; var $record = array(); var $insert_id; var $errno = 0; var $error = ""; var $type = "mysql"; var $sql = ""; var $link = false; var $result = false; var $locked = false; var $helper_db; var $select = array(); var $from = ''; var $join = array() ; var $on = array(); var $where = array(); var $orwhere = array(); var $order = array(); var $limit = ''; var $pconnect = false; var $prepared_statement = false; private static $Singleton; public function __construct() { $this->set_config(); } public static function GetInstance() { if(!(self::$Singleton instanceof db)){ self::$Singleton=new db(); } return self::$Singleton; } public function set_config() { if (class_exists('db_config')){ $this->type = db_config::$db_type; $this->host = db_config::$db_host; $this->database = db_config::$db_name; $this->user = db_config::$db_user; $this->password = db_config::$db_pass; $this->port = db_config::$db_port; $this->socket = db_config::$db_socket; } } public function set_parameters($type, $host, $database, $user, $pass, $port=3306, $socket='') { $this->type = $type; $this->host = $host; $this->database = $database; $this->user = $user; $this->password = $pass; $this->port = $port; $this->socket = $socket; } public function connect(){} function free() {} function clear() { $this->select = array(); $this->from = ''; $this->join = array(); $this->on = array(); $this->where = array(); $this->orwhere = array(); $this->order = array(); $this->limit = ''; } public function selects($select=array()) { if(!is_array($select)) $select=array($select); if (count($select) > 0) $this->select = $select; } public function froms($from= '') { if ($from) $this->from = $from; } public function joins($join=array()) { if(!is_array($join)) $join=array($join); if (count($join) > 0) $this->join = $join; } public function ons($on=array()) { if(!is_array($on)) $on=array($on); if (count($on) > 0) $this->on = $on; } public function wheres($where=array()) { if(!is_array($where)) $where=array($where); if (count($where) > 0) $this->where = $where; } public function orwheres($orwhere=array()) { if(!is_array($orwhere)) $orwhere=array($orwhere); if (count($orwhere) > 0) $this->orwhere = $orwhere; } public function orders($order=array()) { if(!is_array($order)) $order=array($order); if (count($order) > 0) $this->order = $order; } public function limits($limit='') { if($limit) $this->limit= $limit . ''; } public function getQuerySql() { $sql = ''; if(count($this->select) > 0){ $sql .= "SELECT " . implode(',', $this->select); } else{ $sql .= "SELECT * "; } if($this->from){ $sql .= " FROM ". $this->from ." "; } else{ return false; } if( count($this->on)> 0){ $ons = ""; $i = 0; foreach ($this->on as $key => $value){ $sql .= " LEFT JOIN ".$this->join[$i]." ON " .$key. " = " .$value. " "; $i++; } } $isWhere = false; if(count($this->where) > 0){ $isWhere = true; $sql .= " WHERE "; $ands = ''; foreach ($this->where as $key => $value){ if (!is_numeric($key)){ $ands .= " AND " .$key. " = '" .$value. "' "; } else{ $ands .= " AND " .$value. " "; } } if (substr($ands,0,4) == ' AND') $ands = substr($ands,4); $sql .= $ands; } if(count($this->orwhere) > 0){ if(!$isWhere) $sql .= " WHERE "; $ors = ''; foreach ($this->orwhere as $key => $value){ if (!is_numeric($key)){ $ors .= " OR " .$key. " = '" .$value. "' "; } else{ $ors .= " OR " .$value. " "; } } if (substr($ors,0,3) == ' OR' && !$isWhere) $ors = substr($ors,3); $sql .= $ors; } if(count($this->order) > 0){ $sql .= " ORDER BY " . implode(',', $this->order); } if($this->limit){ $sql .= ' LIMIT '.$this->limit .' '; } return $sql; } public function querySql($sql){} public function query($sql = '') { $this->connect(); $this->free(); if ($sql){ $this->result = $this->querySql($sql); if(!$this->result) $this->result = false; $this->sql = $sql; return $this->result; } else{ $sql = $this->getQuerySql(); $this->result = $this->querySql($sql); if(!$this->result) $this->result = false; $this->clear(); $this->sql = $sql; return $this->result; } } public function querys($sql = '') { return $this->query($sql); } public function next_record($type = MYSQL_ASSOC) {} public function lock($table, $mode = "write") { $query = "lock tables "; if(is_array($table)) { while(list($key,$value) = each($table)) { if(is_int($key)) $key = $mode; if(strpos($value, ",")) { $query .= str_replace(",", " $key, ", $value) . " $key, "; } else { $query .= "$value $key, "; } } $query = substr($query, 0, -2); } elseif(strpos($table, ",")) { $query .= str_replace(",", " $mode, ", $table) . " $mode"; } else { $query .= "$table $mode"; } if(!$this->query($query)) { $this->halt("lock() failed."); return false; } $this->locked = true; return true; } public function unlock() { $this->locked = false; if(!$this->query("unlock tables")) { $this->halt("unlock() failed."); return false; } return true; } public function f($name) { if (isset($this->record[$name])) { return $this->record[$name]; } else{ return false; } } public function p($name) { if (isset($this->record[$name])) { print $this->record[$name]; } } public function nextid($table) { $sql = "select " .$table. "_id from " .$table. " order by " .$table. "_id desc"; if(!$this->query($sql)) { $this->halt('query failed in nextid: '.$sql); return 0; } if(!$this->next_record()) { return 1; } else { return $this->f($table. "_id") + 1; } } public function insert_id() {} public function num_rows() {} public function affected_rows() {} public function num_fields() {} public function update_row($table, $index, $fields) { $this->connect(); if(!is_array($fields)) { $this->halt('Invalid update row called'); return false; } if(!is_array($index)) { $index = array($index); } $field_types=''; $index_types=''; $count=0; $indexes=array(); foreach($fields as $key => $value) { if(!in_array($key, $index)) { if (!is_numeric($key)){ $updates[] = "`$key`='".$this->escape($value)."'"; } else{ $updates[] = $value; } } } if(isset($updates)) { $sql = "UPDATE `$table` SET ".implode(',',$updates)." WHERE "; $indexes=array(); foreach($index as $subindex) { $indexes[]="`$subindex`='".$this->escape($fields[$subindex])."'"; } $sql .= implode(' AND ', $indexes); $this->query($sql); return $this->affected_rows(); } return false; } public function insert_row($table, $fields,$replace='') { $this->connect(); if(!is_array($fields)) { $this->halt('Invalid insert row called'); return false; } foreach($fields as $key => $value) { $field_names[] = $key; if(is_numeric($value)){ $field_values[] = $value; } else{ $field_values[] = "'".$value."'"; } //$field_values[] = $this->escape($value); } if(isset($field_names)) { $sql = $replace ? 'REPLACE' : 'INSERT'; $sql .= " INTO `$table` (`".implode('`,`', $field_names)."`) VALUES "; $sql .= "(".implode(",", $field_values).")"; //$sql .= "('".implode("','", $field_values)."')"; //tip($sql); $this->query($sql); return $this->affected_rows(); }else { $this->halt('Error insering row'); } return false; } public function delete_row($table, $where = array()) { $this->connect(); if(!is_array($where)) $where=array($where); if(count($where) > 0){ $where_ = ''; foreach ($where as $key => $value){ if (!is_numeric($key)){ $where_ .= " AND " .$key. " = '" .$value. "' "; } else{ $where_ .= " AND " .$value. " "; } } if (substr($where_,0,4) == ' AND') $where_ = substr($where_,4); $where_ = ' WHERE '. $where_; } $sql = "DELETE FROM " .$table; $sql .= $where_; $this->query($sql); return $this->affected_rows(); } public function replace_row($table, $fields) { return $this->insert_row($table, $fields, 'REPLACE'); } public function escape($value, $trim=true){} protected function set_log($level, $message) { $messages = str_split($message, 500); for ($i = 0; $i < count($messages); $i ++) { syslog($level, $messages[$i]); } } protected function halt($msg) { if ($this->locked) { $this->unlock(); } $this->set_log(LOG_DEBUG, sprintf("Database Error: [ %s ]\n\nMySQL Error: [ %s (%s) ]", $msg, $this->errno, $this->error)); tip(sprintf("Database Error: [ %s ]\n\nMySQL Error: [ %s (%s) ]", $msg, $this->errno, $this->error)); } public function close(){} public function found_rows() { if(!isset($this->helper_db)){ $this->helper_db = new db(); } $this->helper_db->query("SELECT FOUND_ROWS() as found;"); $this->helper_db->next_record(); return $this->helper_db->f('found'); } public function table_exists($table_name) { if(!isset($this->tables)){ $this->tables=array(); $this->query('SHOW TABLES'); while($r=$this->next_record(MYSQL_NUM)){ $this->tables[]=$r[0]; } } return in_array($table_name, $this->tables); } } if (class_exists('db_config')){ if(db_config::$db_type == 'mysqli' && function_exists('mysqli_close')){ ss_sys('mysqli'); } else{ ss_sys('mysql'); } }
autoload.fun.php
<?php defined('SS') or exit('Access Declined.'); function ss_ctrl($controller) { if(!empty($controller)){ $file = CTRL . $controller . '.ctrl.php'; if (is_file($file)) { require_once($file); } } } function ss_sys($class) { $file = SYS . $class . '.sys.php'; if (is_file($file)) { require_once($file); } } function ss_model($class) { $file = MODEL . $class . '.class.php'; if (is_file($file)) { require_once($file); } } function ss_fun($function) { $file = FUN . $function . '.fun.php'; if (is_file($file)) { require_once($file); } } function ss_inc($inc) { $file = INC . $inc . '.inc.php'; if (is_file($file)) { require_once($file); } } function ss_view($view) { $file = VIEW . $view . '.view.php'; if (is_file($file)) { require_once($file); } } function ss_conf($config) { $file = CONF . $config . '.conf.php'; if (is_file($file)) { require_once($file); } } function ss_cache($cache) { $file = CACHE . $cache . '.cache.php'; if (is_file($file)) { require_once($file); } } function ss_swf($swf) { $file = SWF . $swf . '.php'; if (is_file($file)) { require_once($file); } } function ss_call_ctrl($ctrl= 'index',$action = 'index') { ss_sys('ctrlbase'); $action .= 'Action'; ss_ctrl($ctrl); $ctrlClass = $ctrl.'Ctrl'; if (class_exists($ctrlClass)){ $reflectionClass=new ReflectionClass($ctrlClass); call_user_func($ctrlClass.'::init'); if ($reflectionClass->hasMethod($action)){ $reflectionMethod=$reflectionClass->getMethod($action); if($reflectionMethod->isStatic()){ call_user_func($ctrlClass.'::'.$action); } else{ call_user_func(array($ctrlClass,$action)); } } } } spl_autoload_register('ss_model');
cache.sys.php
<?php defined('SS') or exit('Access Declined.'); define('CACHE_TIME',db_config::$db_cache); define('CACHE_CLEAR_TIME',db_config::$db_cache_clear); define('CACHE_CLEAR_SWITCH',db_config::$db_cache_switch); class cache { private static $Singleton; public static function GetInstance() { if(!(self::$Singleton instanceof self)){ self::$Singleton=new self(); } return self::$Singleton; } public static function get_cache_name($name,$minute = false) { if (!$minute) { $minute = CACHE_TIME; } $hour = date('Ymd-H'); $minute = ceil(intval(date('i')) / $minute) * $minute; return CACHE. $name . '[' . $hour .$minute .'].cache.php'; } public static function auto($name, $data,$minute = false) { $content = self::get($name,$minute); if($content){ return $content; } else{ return self::set($name,$data,$minute); } } public static function get($name,$minute = false) { if (CACHE_CLEAR_SWITCH == 'on'){ self::clear(); $cache = self::get_cache_name($name,$minute); if (is_file($cache)){ return unserialize(file_get_contents($cache)); } } return false; } public static function set($name, $data,$minute = false) { if (CACHE_CLEAR_SWITCH == 'on'){ $cache = self::get_cache_name($name,$minute); $file = @fopen($cache, 'w'); @fwrite($file,serialize($data)); @fclose($file); } return $data; } public static function clear() { $cache = CACHE. 'log.cache.php'; $time = time(); if(is_file($cache)){ if ( ($time - intval(file_get_contents($cache))) < CACHE_CLEAR_TIME* 60 ){ return true; } } self::deldir(CACHE); $file = @fopen($cache, 'w'); @fwrite($file, $time); @fclose($file); return false; } public static function del($name,$minute = false) { @unlink(self::get_cache_name($name,$minute)); } public static function deldir($dir) { self::delfile($dir); } public static function delfile($dir) { if (is_dir($dir)) { if ($dh = @opendir($dir)) { while (($file = @readdir($dh)) !== false) { if ($file!="." && $file!=".." && $file!="log.cache.php") { $fullpath=$dir."/".$file; if(!is_dir($fullpath)) { @unlink($fullpath); } else { self::delfile($fullpath); @rmdir($fullpath); } } } @closedir($dh); } } } private function __clone(){} public function __construct(){} }
- SS_FrameWork_PHP_4.0.rar (24.9 KB)
- 下载次数: 76
评论
12 楼
Hillray
2012-01-17
今天才发现这个好东西!向楼主求一份完整的源码和一些相关案例,我的邮箱是hui.deng@foxmail.com, 谢谢。
11 楼
sigleboy
2011-11-18
谢谢,请给我发送一份。sigleboy@126.com.
10 楼
skanion
2011-10-03
SS FrameWork 4.0 已经完成编写, 支持伪静态, 支持模板替换, 支持postgresql,支持properties...
相关文档逐步更新中
相关文档逐步更新中
9 楼
skanion
2011-09-23
框架国庆后将有更新,除了access 和 mysql, 还将支持postgresql数据库, 可读取properties资源文件[数据库参数], 而且注释也完备,附上使用范例
8 楼
skanion
2011-09-16
happysoul 写道
没有注释?偶这等 php 0.1bate 型的人看了等于什么都没写一样。。。
注释是有的,不过放在另外一个案例里,我还没有空整合在一起,过几天一起放上去吧
7 楼
happysoul
2011-09-16
没有注释?偶这等 php 0.1bate 型的人看了等于什么都没写一样。。。
6 楼
skanion
2011-09-16
keshion 写道
求一份完整的加案例,谢谢!yufeng_0924@163.com
加案例的要过几天,因为我的那个案例有些部分不能完全公开.偶还得核实下
5 楼
keshion
2011-09-16
求一份完整的加案例,谢谢!yufeng_0924@163.com
4 楼
skanion
2011-09-16
等我有空帮你发, 有些目录大了点
3 楼
xinxian
2011-09-16
贴出来共同学习下,要不发份完整的到我qq邮箱可以吧:402615964@qq.com
2 楼
skanion
2011-09-15
若需要该框架的案例,也可以找我, 事实上也是挺实用的
1 楼
skanion
2011-09-15
还有其他一些辅助类,没有放进去, 主要是有关 phpexcel和fpdf 的调用类, 各位如有需要问我拿就是了
发表评论
-
(转)postgreSQL 实现按月按年,按日统计 分组统计
2011-12-26 18:11 3913--按年分组查看 select to_char ... -
(转)aop:pointcut expression解析
2011-12-26 14:20 1229execution(* com.aptech.jb.epet. ... -
(转)SQL语句中,为什么where子句不能使用列别名,而order by却可以
2011-12-05 10:34 2166sqlserver查询的执行顺序是: (1)FROM < ... -
php正则 贪婪模式与懒惰模式
2011-09-28 12:24 1325当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个 ... -
postgresql 导入和导出数据
2011-09-22 10:59 6283自oracle自收购sun以来,牵起了对java的种种纠纷, ... -
JSP页面跳转方法荟萃
2011-09-19 14:23 14901. response.sendRedirct("跳 ... -
如何同时启动多个Tomcat服务器(转)
2011-09-16 10:05 860前些时日,出于某种需要,需要同时启动多个Tomcat服务器,在 ... -
清除dns 缓存
2011-09-16 09:08 1164另外在ipconfig/flushdns之前,你先 1清除AR ... -
自定义cmd命令(转)
2011-09-15 15:54 966去网上搜索了这个命令,貌似都是宏设置之类的,特此献上自己的一些 ... -
在浏览器查看svn中代码的解决方案(转)
2011-09-15 15:38 5251重新安装svn+apache以后,发现一个问题,比如java源 ... -
如何让svnserve.exe在WINDOWS中自动运行
2011-09-15 14:50 1191将svn设置成为系统服务自动运行就行了。 方法: 在Windo ... -
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续]
2011-09-15 13:18 5672在笔者拙作 xampp(apache+mod_jk)整合现有 ... -
cmd 5种if语句的基本语法
2011-09-14 16:07 3823回答人的补充 2010-06-13 20:40 使用批处理 ... -
Bat脚本中带ANT命令,会忽略ANT后面的命令?
2011-09-14 15:47 1961如题, bat中带有ant -debug 则后面的命令没有执行 ... -
xampp(apache+mod_jk)整合现有的tomcat
2011-09-14 12:15 52611. Xampp官网 http://www.apach ... -
svn + vim + ant + linux 竟然完全替代了eclipse
2011-09-14 09:18 3145很难想象, 一个公司只用 svn + vim + ant + ... -
Ant <Delete> 如何只删掉文件夹下所有文件和文件夹(转)
2011-09-13 18:20 3526用fileset 来过滤要删掉的目录和文件 <dele ... -
ANT的安装/配置笔记(转)
2011-09-13 14:38 754内容摘要: ant是一个基 ... -
windows 安装tomcat服务
2011-09-13 14:16 1025D:\usr\tomcat\bin>service.ba ... -
struts 1 中 <html:form>
2011-09-13 12:03 11741来看看 使用 ActionForm 这个主题,当时使用了一个静 ...
相关推荐
extjs4.0开发人员以及学习可以下载参考
【ExtJS4.0项目教程(MVC)】是一个针对ExtJS 4.0框架的教程,主要关注其MVC架构的应用。MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的数据模型、用户界面和控制逻辑,使得开发更易于维护和扩展...
ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。它引入了全新的MVC(Model-View-Controller)设计模式,这使得应用的结构更加清晰,代码更易于管理和维护。在这个主题中,我们将深入探讨如何...
总结来说,这个“自己写的ExtJS4.0用MVC的示例”展示了如何利用MVC模式在客户端构建复杂的应用程序,提供了良好的代码组织和可维护性。通过研究这个示例,你可以学习到如何有效地使用模型、视图和控制器,以及它们...
Extjs 4.0中文版API
ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。它引入了Model-View-Controller(MVC)架构模式,帮助开发者更好地组织和管理代码,提高项目的可维护性和可扩展性。在本工程中,我们将深入...
ExtJS 4.0是Sencha公司开发的一款强大的JavaScript前端框架,主要用于构建富客户端Web应用程序。这个官方版本的发布标志着ExtJS在功能、性能和可维护性方面的一个重要里程碑。以下将详细介绍ExtJS 4.0中的核心概念、...
本篇将详细探讨这两个框架在Jquery-Extjs4.0中的结合使用及其核心概念。 **jQuery框架** jQuery是一个轻量级、高性能的JavaScript库,它的主要目标是简化DOM操作、事件处理、动画制作以及Ajax交互。jQuery的核心...
`ext-all-debug-w-comments.js`, `ext-all-debug.js` 和 `ext-all.js` 是ExtJS的核心库文件,分别代表带有注释的调试版本、调试版本和生产版本。调试版本包含额外的错误检查和日志记录,便于开发过程中定位问题;...
**Extjs4.0** 是一款强大的企业级前端框架,它可以帮助开发者快速构建复杂的用户界面,并且提供了丰富的组件和功能。对于初学者来说,理解其核心概念和基础操作是非常重要的。 ##### 获取Extjs4.0 - **官方网站**:...
在《ExtJs4.0 手册中文版》中,你可以找到关于ExtJS 4.0的全面介绍和详细指南。这个手册涵盖了框架的基础知识,如MVC架构、组件系统、数据绑定以及事件处理机制。此外,它还深入讲解了如何使用各种组件,如GridPanel...
可二次开发Extjs4.0通用后台管理系统源码完整大型项目。数据库在项目里面的一个sql文件里面 1、采用Spring MVC的静态加载缓存功能,在首页将Javascript文件、CSS文件和图片等静态资源文件加载进来放进内存,极大提高...
ExtJS4 + ASP.NET MVC Demo是一个结合了前端ExtJS4框架和后端ASP.NET MVC架构的应用示例,展示了如何在Web开发中实现数据操作的增删改查功能,并且利用了ExtJS4的MVC模式来提高代码的组织性和可维护性。这个Demo还...
EXTJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。MVC(Model-View-Controller)模式是EXTJS中实现复杂应用架构的关键设计模式,它将应用程序的不同部分分离出来,使得代码更易于维护和扩展。...
EXTJS 4.0 提供了丰富的、非常漂亮的外观体验,成为众多界面层开发人员的追捧,更重要的是它核心的组件基本覆盖了我们构建富客户端的常用的组件以及各种功能,在统计方面做的也非常出色。 在 4.0 版本中,EXTJS ...
ExtJS4.0是Sencha公司推出的一款强大的JavaScript前端框架,专用于构建富客户端Web应用程序。MVC(Model-View-Controller)模式是其核心设计模式,帮助开发者组织和管理复杂的代码结构,提高代码可维护性和可扩展性...
ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。在这个MVC(Model-View-Controller)分页实例中,我们将探讨如何利用ExtJS 4.0的MVC架构来实现数据的分页展示。MVC模式是软件工程中的一个设计...
只要将解压的文件直接放置到myeclipse的webroot下面,启动tomcat访问。简单的EXTJS mvc框架,设计 store,model,controller,view,window等等,同时展示了一些基本的点击显示、修改等等操作,需要的同学自行下载
ExtJS 4.0 是一个强大的JavaScript框架,用于构建富客户端Web应用程序。它引入了Model-View-Controller(MVC)设计模式,帮助开发者更好地组织和管理代码,提高可维护性和可扩展性。在本实例中,我们将深入探讨ExtJS...
本资源包含ExtJS 4.0和3.0的教程及API文档,对于学习和掌握这个框架至关重要。 首先,我们来看ExtJS 4.0的教程。ExtJS 4.0引入了重大的更新,包括全新的架构、改进的布局系统和更丰富的组件库。其中,新架构引入了...