ExtPHP主要用于通过PHP代码生成ExtJS的JavaScript代码
ExtPHP是一个基于ThinkPHP开发框架的ExtJS开发类库,使用此类库可以很方便的生成ExtJS的JavaScript代码。br /
ExtPHP是一个基于ThinkPHP开发框架的ExtJS开发类库,使用此类库可以很方便的生成ExtJS的JavaScript代码。
<?php /** * PHPExtJs 基础对象 * @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * @Author: wb <wb1491@gmail.com> */ class ExtBase { /** * ExtJS的基本目录,此参数是个路径 * @var String */ public $exthome = ''; /** * ExtJS的语言环境配置,默认为zh_cn (中文) * @var String */ public $extlang = 'zh_cn'; /** * ExtJS的调试模式,默认为false * @var Boolean */ public $debugmode = false; /** * ExtJS的内核模式,默认为false * @var Boolean */ public $coremode = false; /** * ExtJS的环境目录的基准目录 * @var String */ public $extbasedir = ""; /** * ExtJS的基本代码 * @var String */ public $extbasecode = ""; /** * 页面所需要的Css文件 * @var Array */ public $pageCss = array(); /** * 页面所需要的Js文件 * @var Array */ public $pageJs = array(); /** * ExtJs的css文件 * @var String */ private $extcss = ""; /** * ExtJS目录下的所有文件索引 格式为:array(文件名称=>文件路径) * @var Array */ public $ExtALLFiels = array(); /** * 定义ExtJS的基本运行文件 格式为:array(名称=>文件名称),这里只是定义了基本的几个 * 如:base,all,css,core,debug * @var Array */ public $ExtBaseFile = array( 'base' => 'ext-base.js', 'all' => 'ext-all.js', 'css' => 'ext-all.css', 'core' => 'ext-core.js', 'debug' => 'ext-all-debug.js', ); /** * 根据基本参数设置Extjs的基本环境 * * @param string $exthome ExtJS所在目录,相对于$basedir所指定的目录 * @param boolen $extdebue 是否开启调试模式 * @param boolen $extcore 是否是core模式 * @param string $extlang 设置ExtJS语言 * @param string $basedir $exthome目录所在的目录 */ public function __construct($exthome = '', $basedir='', $extdebue=false, $extcore=false, $extlang='zh_cn') { //设置基本运行环境 $this->setExtBase($exthome, $basedir, $extdebue, $extcore, $extlang); } /** * 设置Extjs的基本目录 * * @param String $exthome ExtJs文件所在的目录 * @param String $basedir 所在目录是基于那个目录 默认为 ‘/’ * @return Boolean */ public function setExtHome($exthome="", $basedir="/") { //TODO - 设置Extjs的基本目录 if (!empty($basedir)) { $this->extbasedir = str_replace("/./", "/", $basedir); } if (!empty($exthome)) { $this->ReadALLFile($exthome, $this->ExtALLFiels); if (!empty($this->ReadALLFile[$this->ExtBaseFile['base']])) { throw new Exception("不正确的exthome目录($exthome)!"); } $this->exthome = $exthome; } return TRUE; } /** * 设置Extjs的基本环境 * * @param string $exthome ExtJS所在目录,相对于$basedir所指定的目录 * @param boolen $extdebue 是否开启调试模式 * @param boolen $extcore 是否是core模式 * @param string $extlang 设置ExtJS语言 * @param string $basedir $exthome目录所在的目录 * @return Boolean */ public function setExtBase($exthome = '', $basedir='', $extdebue=false, $extcore=false, $extlang='zh-CN') { //设置Extjs的基本环境 $this->setExtHome($exthome, $basedir); $this->setExtLang($extlang); $this->debugmode = $extdebue; return TRUE; } /** * 设置extjs的语言 * * @param String $lang 这里的语言只能是ExtJs中语言文件的文件名称中的语言部分,如: * ext-lang-zh_cn.js语言文件,只要zh_cn就行 */ public function setExtLang($lang='') { //TODO - 设置extjs的语言 if (!empty($lang)) $this->extlang = $lang; } /** * 获取对象的Styel设置串 */ public function getExtBaseStyel() { $tmpstr = ''; if (is_array($this->ExtALLFiels[$this->ExtBaseFile['css']])) { $cssfile = ''; foreach ($this->ExtALLFiels[$this->ExtBaseFile['css']] as $v) { if (preg_match('/\/docs/i', $v) == FALSE) { $cssfile = $v; break; } } $tmpstr .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$this->extbasedir}{$cssfile}\">\n"; } else { $tmpstr .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$this->extbasedir}{$this->ExtALLFiels[$this->ExtBaseFile['css']]}\">\n"; } //设置其它css if (!empty($this->pageCss)) { foreach ($this->pageCss as $f) { if (is_array($f)) { $tmpstr .= "<style type=\"text/css\">\n" . $f['sytle'] . "\n</style>\n"; } else { $tmpstr .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$f}\">\n"; } } } return $tmpstr; } /** * 获取对象的Script基本配置串 * @return String */ public function getExtBaseScript() { $tmp = ''; $tmpstr = ''; if (is_array($this->ExtALLFiels[$this->ExtBaseFile['base']])) { foreach ($this->ExtALLFiels[$this->ExtBaseFile['base']] as $v) { if (preg_match('/source/i', $v) == FALSE) { $tmp = $v; break; } } if (empty($tmp)) $tmp = $this->ExtALLFiels[$this->ExtBaseFile['base']][0]; }else { $tmp = $this->ExtALLFiels[$this->ExtBaseFile['base']]; } $tmpstr .= "<script type=\"text/javascript\" src=\"{$this->extbasedir}{$tmp}\"></script>\n"; if ($this->debugmode) { $tmpstr .= "<script type=\"text/javascript\" src=\"{$this->extbasedir}{$this->ExtALLFiels[$this->ExtBaseFile['debug']]}\"></script>\n"; } else { $tmpstr .= "<script type=\"text/javascript\" src=\"{$this->extbasedir}{$this->ExtALLFiels[$this->ExtBaseFile['all']]}\"></script>\n"; } if ($this->coremode) { $tmpstr .= "<script type=\"text/javascript\" src=\"{$this->extbasedir}{$this->ExtALLFiels[$this->ExtBaseFile['core']]}\"></script>\n"; } //设置语言 $ExtLangJS = 'ext-lang-{lang}.js'; if (!empty($this->extlang)) { $tmpfile = strtolower(str_replace("{lang}", $this->extlang, $ExtLangJS)); if (isset($this->ExtALLFiels[$tmpfile])) { $tmpstr .= "<script type=\"text/javascript\" src=\"{$this->extbasedir}{$this->ExtALLFiels[$tmpfile]}\"></script>\n"; } } //并入其它Js文件 $tmpstr .= $this->getExtPageJs(); return $tmpstr; } /** * 获取ExtJs的其它设置 * @return String */ public function getExtPageJs(){ $tmpstr = ""; //设置其它js if (!empty($this->pageJs)) { foreach ($this->pageJs as $f) { if (is_array($f)) { $tmpstr .= "<script type=\"text/javascript\">\n{$f['js']}\n</script>\n"; } else { $tmpstr .= "<script type=\"text/javascript\" src=\"{$f}\"></script>\n"; } } } return $tmpstr; } /** * 获取ExtJs的基本页面配置串 * @return string */ public function getExtBaseJs() { //s.gif $tmpstr = ''; $tmpstr .= "<script type=\"text/javascript\">Ext.BLANK_IMAGE_URL = '{$this->extbasedir}{$this->exthome}/resources/images/default/s.gif';</script>\n"; if (!empty($this->extcss) && isset($this->ExtALLFiels[$this->extcss])) { $tmpstr .= "<script type=\"text/javascript\">"; $tmpstr .= "Ext.util.CSS.swapStyleSheet(\"theme\", \""; $tmpstr .= $this->extbasedir . $this->ExtALLFiels[$this->extcss] . "\");"; $tmpstr .="</script>\n"; } return $tmpstr; } /** * 获取ExtJs的所有配置串 * @return String */ public function getExtBaseCode() { $this->extbasecode .= $this->getExtBaseStyel(); $this->extbasecode .= $this->getExtBaseScript(); $this->extbasecode .= $this->getExtBaseJs(); return $this->extbasecode; } /** * 设置页面的其它css文件 * @param String Css文件名称及路径 */ public function setPageCssFile($fileName) { if (!empty($fileName)) { $this->pageCss[] = $fileName; } } /** * 设置页面的style样式 * @param $cssString 样式串 */ public function setPageCss($cssString) { if (!empty($cssString)) { $this->pageCss[] = array("sytle" => $cssString); } } /** * 设置页面的其它js文件 * @param String JS文件名称及路径 */ public function setPageJsFile($fileName) { if (!empty($fileName)) { $this->pageJs[] = $fileName; } } /** * 设置页面的JS代码 * @param $Js 可以是ExtFunction对象也可以是js串 */ public function setPageJs($Js) { if (!empty($Js)) { $this->pageJs[] = array("js" => $Js); } } /** * 设置extjs的样式 * * @param String $cssName css样式名称 默认为default */ public function setExtCss($cssName="default") { if ($cssName != "default") { $this->extcss = "xtheme-" . $cssName . ".css"; } } /** * 把$data格式化成ExtJs的对象Json串 * * @param Array $data * @return String */ public function ExtJsonFormat($data) { $i = 0; $retstr .= "{"; foreach ($data as $k => $v) { if ($i > 0) $retstr .= ","; if (is_string($v) && !is_numeric($v) && strtolower($v) != "true" && strtolower($v) != "false") { $retstr .= "$k:'$v'"; } else $retstr .= "$k:$v"; $i++; } $retstr .= "}"; return $retstr; } /** * 读取指点文件夹$floder里面的所有内容(包括文件、文件夹和子文件夹中的所有内容) * * @param String $floder 文件夹名称(目录名)可以是相对目录 * @param Array POT $retarr 内容存放的数组指针 */ public function ReadALLFile($floder, &$retarr = array()) { //TODO - 读取所指定的文件夹$floder里面的所有内容(包括文件和文件夹,子文件夹中的内容),返回给$retarr指针 $tpath = ''; $app_path = str_replace('\\', '/', getcwd()) . "/"; //echo "APP_PATH:".$app_path." BASE:".$this->extbasedir."<BR>\n"; if (strpos($this->extbasedir, $app_path) == FALSE) { $tpath = $app_path . "/" . $floder; } else { $tpath = $this->extbasedir . "/" . $floder; } $tpath = preg_replace(array('/\{2,}/', '/\/{2,}/'), '/', $tpath); $tmparr = $this->ReadFloder($tpath); if ($tmparr != FALSE && is_array($tmparr)) { foreach ($tmparr[0] as $v) { $this->ReadALLFile($floder . '/' . $v, $retarr); } if (!empty($tmparr[1])) { foreach ($tmparr[1] as $v) { $k = strtolower($v); if (isset($retarr[$k])) { $tmpstr = preg_replace('/\/{2,}/', "/", $floder . '/' . $v); if (is_array($retarr[$k])) { $retarr[$k][] = $tmpstr; } else { $retarr[$k] = array($retarr[$k], $tmpstr); } } else { $retarr[$k] = preg_replace('/\/{2,}/', "/", $floder . '/' . $v); } } } } array_change_key_case($retarr); } /** * 读取所指定的文件夹$floder里面的内容(包括文件和文件夹) * * @param String $floder * @return Array */ public function ReadFloder($floder) { //TODO - 读取所指定的文件夹$floder里面的内容(包括文件和文件夹) if (!is_dir($floder)) { throw new ThinkException("不能设置ExtJs的运行环境,请检查设置的目录:$floder"); } $flod = array(); $files = array(); $dh = opendir($floder); if (!$dh) { throw new ThinkException("打开目录:" . dirname("../") . " 错误!"); } while (false !== ($filename = readdir($dh))) { if ($filename != "." && $filename != "..") { if (strpos($filename, ".") <= 0) $flod[] = $filename; else $files[] = $filename; } } return array($flod, $files); } /** * 设置对象的属性 * @param String $key * @param Mixed $val */ public function __set($key, $val) { if (property_exists($this, $key)) { if ($key == "extlang") { $this->setExtLang($val); } else { $this->$key = $val; } } } /** * 获取对象属性值 * @param String $key * @return Mixed */ public function __get($key) { if (empty($key)) return false; if (property_exists($this, $key)) { if ($key == "extbasecode") return $this->getExtBaseCode(); else return $this->$key; } return true; } /** * 将对象以String的方式返回 * @return String */ public function __toString() { return $this->getExtBaseCode(); } } ?>
2. [文件] ExtPHP主要用于通过PHP代码生成ExtJS的JavaScript代码 ~ 4KB 下载(53) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php /** * PHPExtJs的对象生成类 * @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * @Author: wb <wb1491@gmail.com> */ class ExtFunction { /** * 对象的参数集 * @var Array 参数集 */ protected $param = array(); /** * 对象代码 * @var String 对象代码串 */ protected $code = ''; /** * JS对象表示法的名称 * @var String 对象名称 */ protected $clsname = ''; /** * 根据参数$param、代码$code和$clsnames设置Ext function对象 * * @param Mixed $param function的参数列表 如:"val,val1" 或者array("val","val1") * @param Mixed $code functiond的代码,可以跟对象 * @param String $clsname Ext自定义对象名称 * */ public function __construct($param = null, $code = null, $clsname = null) { $this->SetParam($param); $this->SetCode($code); $this->clsname = $clsname; } /** * 设置对象的参数 * @param String $param 参数 可以是数组 */ public function SetParam($param) { if (is_array($param)) { $this->param = array_merge($this->param, $param); } elseif (is_string($param) && preg_match("/,/", $param)) { $this->param = array_merge($this->param, split(',', $param)); } else { $this->param [$param] = $param; } } /** * 设置对象的代码 * @param Mixed $code 可以是代码串或者是PHPExtJS的其它对象 */ public function SetCode($code) { if (!empty($this->code) && is_object($this->code) && method_exists($this->code, 'render')) { $this->code = $this->code->render(); } if (is_object($code) && method_exists($code, 'render')) { $this->code .= $code->render(); } else if (is_string($code)) { $this->code .= $code; } if (is_array($code)) { foreach ($code as $key => $val) { if ($key === "return") { //echo "KEY:$key<BR>\n"; $this->code .= "return "; } $this->SetCode($val); $this->code .= ";"; } } } /** * @param String $name DOM名称 * @param String $clsname 对象名称 */ public function render($name = '', $clsname = "") { $str = ''; if (!empty($name)) { $str .= "var $name = function "; } else { $str .= "function "; } if (!empty($clsname)) $this->clsname = $clsname; if (!empty($this->clsname)) { $str .= " " . $this->clsname . " "; $this->param = array(); } $str .= "(" . implode(',', $this->param) . ")"; if (!empty($this->code)) { $str .= "{"; if (is_object($this->code) && method_exists($this->code, "render")) { $str .= $this->code->render(); } elseif (is_string($this->code)) { $str .= $this->code; } $str .= "}"; } if (!empty($name)) $str .= ";"; //去除注释行 $search = array( '/(\/\/.*)|(\/\*.*\*\/)/i', //去掉注释 '/[\f\n\r\t]*/i', //去掉回车符 '/\{(\s)*/i', '/\}(\s)*\}/i', '/\}(\s)*/i', //'/\}(\s)*if/i', '/(\s)*}/', '/;(\s)*/', '/\,(\s)*/i' ); $replace = array( '', '', '{', '}}', '}', //'}if', '}', ';', ',' ); $str = preg_replace($search, $replace, $str); return $str; } public function __toString() { return $this->render(); } } ?>
3. [文件] ExtPHP主要用于通过PHP代码生成ExtJS的JavaScript代码 ~ 8KB 下载(53) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php require_once 'ExtData.class.php'; class ExtObject { protected static $indent = ''; public $state = Array(); public $showkeys = true; public $extClass = ''; public $rendername = ''; public $extend = ''; /** * 根据$properties属性创建Ext对象 * * @param String $ExtClass 对象名称 如:Ext.TabPanel、Ext.grid.GridPanel 等 * @param Array $properties 对象属性数组 如: * Array('labelWidth' => 150, * 'url' => 'part.submit.php', * 'frame' => true, * 'bodyStyle' => 'padding: 5px 5px 0', * 'width' => 500, * 'defaults' => new ExtObject(null, Array('width' => 290)), * 'defaultType' => 'textfield' * ) * @param String $name var名称 例如:$name='test',则产生 为 var test = new $ExtClass () {} 的代码 * @param Boolen $showkeys 是否显示配置数组$properties的标签 */ public function __construct($ExtClass = null, $properties = null, $name = null, $showkeys = true) { $this->extClass = $ExtClass; if (is_array($properties)) { $this->state = $properties; } $this->showkeys = $showkeys; $this->rendername = $name; } /** * 设置对象的属性 即 $key = $val; * * @param String $key 属性名称 必须满足ExtJS个对象的规定 * @param Anly_type $val */ public function __set($key, $val) { if ($key == 'indent') { $this->indent = $val; } else { $this->state [$key] = $val; } } public function __get($key) { if (isset($this->state[$key])) return $this->state [$key]; } public function __isset($key) { return isset($this->state [$key]); } public function del($key) { $this->__unset($key); } public function __unset($key) { unset($this->state [$key]); } public function __toString() { return $this->render(); } /** * 设置属性$name的属性值为 $property * * @param String $name 属性名称 * @param Mixed $property 属性值 */ public function setProperty($name, $property) { if (!empty($name)) { $this->state [$name] = $property; } } /** * 根据配置数组$properties设置ExtClass属性 * * @param ConfigArray $properties 配置数组 */ public function setProperties($properties) { $this->state = array_merge($this->state, $properties); } public function setExtendsClass($ExtClass) { $this->extend = $ExtClass; } public function JSRender($items, $showkeys = true, $isparam = false) { //self::$indent .= ' '; $str = ''; $total = count($items); $cnt = 1; if ($isparam && $total == 2 && is_object($items [0]) && is_array($items [1])) { $str .= "{{$this->JSRender($items[0])}},"; $str .= "[{$this->JSRender($items[1])}]"; } else { foreach ($items as $element => $value) { if ($showkeys) { if (is_numeric($showkeys)) { $str .= self::$indent . "'$element':"; } else { if (!is_numeric($element)) $str .= self::$indent . "$element: "; } } if (is_string($value)) { $str .= "'$value'"; } else if (is_bool($value)) { $str .= ( $value) ? "true" : "false"; } else if (is_object($value)) { if (method_exists($value, 'render')) { $str .= $value->render(); } } else if (is_array($value)) { if (count($value) == 1 && is_string($value [0])) { $str .= $value [0]; } else { $str .= "["; $str .= $this->JSRender($value, false); $str .= self::$indent . "]"; } } else if (is_numeric($value)) { $str .= $value; } else if ($value == '') { $str .= "''"; } else { $str .= $value; } if ($cnt != $total) { $str .= ","; } $cnt++; } } self::$indent = substr(self::$indent, 0, - 2); return $str; } /** * 返回构建好的ExtJs对象的Js代码 * * @param String $name * @return String */ public function render($name = null) { $str = ''; if (!empty($name)) $this->rendername = $name; if ( preg_match('/.alert/', $this->extClass) || preg_match('/.prompt/', $this->extClass) || preg_match('/.show/', $this->extClass) || preg_match('/.confirm/', $this->extClass) || preg_match('/.progress/', $this->extClass) || preg_match('/.wait/', $this->extClass) || preg_match('/.updateProgress/', $this->extClass) || preg_match('/.updateText/', $this->extClass) ) { if (!empty($this->rendername)) $str = self::$indent . "var $this->rendername = $this->extClass("; else $str = self::$indent . "$this->extClass ("; $str .= $this->JSRender($this->state, FALSE); $str .= ");"; } elseif ( preg_match('/.ColumnModel/', $this->extClass) || preg_match('/.Record.create/', $this->extClass) ) { if (!empty($this->rendername)) $str = self::$indent . "var $this->rendername = new $this->extClass(["; else $str = self::$indent . "new $this->extClass (["; $str .= $this->JSRender($this->state, TRUE); $str .= "])"; if ($this->rendername) { $str .= ";"; } } elseif ( preg_match('/.JsonReader/', $this->extClass) || preg_match('/.ArrayReader/', $this->extClass) ) { if (!empty($this->rendername)) $str = self::$indent . "var $this->rendername = new $this->extClass("; else $str = self::$indent . "new $this->extClass ("; if (!empty($this->state['fields'])) { $str .= "{totalProperty:'" . $this->state['totalProperty'] . "', "; $str .= "root:'" . $this->state['root'] . "'},"; $str .= "[" . $this->JSRender($this->state['fields'], TRUE) . "]"; } else { $str .= $this->JSRender($this->state, TRUE); } $str .= ")"; if ($this->rendername) { $str .= ";"; } } elseif ($this->extend) { //如果是扩展对象 $str = self::$indent . $this->extClass . " = Ext.extend( $this->extend ,{"; $str .= $this->JSRender($this->state, TRUE); $str .= "});"; } else { if ($this->rendername) { if ($this->extClass) { $str = self::$indent . "var $this->rendername = new $this->extClass({"; } else { $str = self::$indent . "var $this->rendername = {"; } } elseif ($this->extClass) { echo self::$indent; $str = self::$indent . "new $this->extClass({"; } else { $str = self::$indent . "{"; } $str .= $this->JSRender($this->state, $this->showkeys); $str .= self::$indent . "}"; if ($this->extClass) { $str .= ")"; } if ($this->rendername) { $str .= ";"; } } return $str; } } ?>
4. [文件] ExtPHP主要用于通过PHP代码生成ExtJS的JavaScript代码 ~ 3KB 下载(50) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php /** * PHPExtJs ExtJs页面对象 * @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * @Author: wb <wb1491@gmail.com> */ class ExtPage { public $extjs = ''; public $extbase = ''; public $body = ''; public $bodyPapm = ''; public $title = ''; public $charset = ''; public $template = ""; /** * 根据页面模板输出extjshtml代码 * 模板中可以包括{charset},{title},{extbase},{extjs},{body} * * @param String $title 页面标题 * @param String $extjs extjs代码 * @param String $body 页面body * @param String $charset 页面编码设置,默认为UTF-8 * @param String $template 页面模板 */ public function __construct($title='', $extjs='', $extbase='', $body='', $charset='utf-8', $template='') { $this->title = $title; $this->extjs = $extjs; $this->extbase = $extbase; $this->body = $body; $this->charset = $charset; if(!empty($template)) $this->template = $template; else $this->template = "<html> <head> <meta http-equiv='Content-Type' content='text/html; charset={charset}'> <title>{title}</title> {extbase} <script type='text/javascript'> {extjs} </script> </head> <body {bodyPapm}> {body} </body> </html>"; } public function render() { if(!empty($this->template)){ $search = array("{charset}","{title}","{extbase}","{extjs}","{body}","{bodyPapm}"); $replace = array($this->charset,$this->title,$this->extbase,$this->extjs,$this->body,$this->bodyPapm); $this->template = str_replace($search,$replace,$this->template); echo $this->template; }else{ throw new Exception("页面模板为空,请先设置页面模板!"); } } public function __set($key, $val) { switch($key) { case 'extjs': $this->extjs = $val; break; case 'body': $this->body = $val; break; case 'bodyPapm': $this->bodyPapm = $val; break; case 'charset': $this->body = $val; break; case 'template': $this->template = $val; break; case 'extbase': $this->extbase = $val; break; default: throw new Exception("非法的ExtPage属性 ExtPage::$key"); } } public function __get($key) { switch($key) { case 'extjs': return $this->extjs; case 'body': return $this->body; case 'bodyPapm': return $this->bodyPapm; case 'charset': return $this->charset; case 'template': return $this->template; default: throw new Exception("非法的ExtPage属性 ExtPage::$key"); } } }
5. [文件] ExtPHP主要用于通过PHP代码生成ExtJS的JavaScript代码 ~ 3KB 下载(52) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php /** * +---------------------------------------------------------------------- * | PHPExtJs * +---------------------------------------------------------------------- * | @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * +---------------------------------------------------------------------- * | @Author: wb <wb1491@gmail.com> * +---------------------------------------------------------------------- */ class ExtData extends ExtBase { public $Data = array (); public $DataName = ''; public $isGridData = false; /** * 新建ExtJs的数据集,如果是表格数据在自动格式化为表格的Json的数据格式 * * @param Array $DataArray 数据集 * @param String $DataName 数据集名称 * @param Blooen $isGridData 是否是表格数据 */ public function __construct($DataArray, $DataName = '', $isGridData = false) { $this->setDataArray ( $DataArray ); if (! empty ( $DataName )) { $this->DataName = $DataName; } if (is_bool ( $isGridData )) { $this->isGridData = $isGridData; } } /** * 设置ExtData对象的数据集 * * @param Array $DataArray */ public function setDataArray($DataArray) { if (! empty ( $DataArray ) && is_array ( $DataArray )) { $this->Data = $DataArray; } } /** *获取对象的Js串 * @return string */ public function getJavascript() { $str = ''; if (! empty ( $this->DataName )) { $str .= "var $this->DataName = "; } if ($this->isGridData) { $j = 0; $count = count ( $this->Data ); $str .= "{totalProperty:$count,root:["; foreach ( $this->Data as $value ) { if($j>0) $str .= ","; $str .= "[".$this->JSRender ( $value )."]"; $j ++; } $str .= "]}"; } else { $str .= "[".$this->JSRender ( $this->Data )."]"; //$str .= $this->JSRender ( $this->Data ); } if (! empty ( $this->DataName )) { $str .= ";"; } return $str; } /** * 以JS的方式输出$Data的数据 * * @param Array $Data 要输出的数据 */ public function JSRender($Data = Array()) { $str = ""; foreach ( $Data as $element => $value ) { if(!empty($str)) $str .= ","; /*if (!is_numeric($element)) { $str .= "'$element':"; }*/ if (is_string ( $value )) { $str .= "'$value'"; } else if (is_bool ( $value )) { $str .= ($value) ? "true" : "false"; } else if (is_array ( $value )) { if (count ( $value ) == 1 && is_string ( $value [0] )) { $str .= $value [0]; } else { $str .= "["; $str .= $this->JSRender ( $value, false ); $str .= "]"; } } else { if(empty($value)){ $str .= "''"; }else{ $str .= $value; } } } return $str; } public function render() { return $this->getJavascript (); } public function show() { echo $this->getJavascript (); } public function __toString() { return $this->getJavascript (); } } ?>
8. [文件] ViewPort.class.php ~ 3KB 下载(50) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php /** * +---------------------------------------------------------------------- * | PHPExtJs * +---------------------------------------------------------------------- * | @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * +---------------------------------------------------------------------- * | @Author: wb <wb1491@gmail.com> * +---------------------------------------------------------------------- */ include_once "ExtBase.class.php"; include_once "ExtObject.class.php"; include_once "ExtFunction.class.php"; include_once "ExtPage.class.php"; class viewport extends ExtBase{ private $vpbody = null; public $property = array(); public $items = array(); /** * 根据$config配置viewport */ public function __construct($config=array()) { if(!empty($config) && is_array($config)){ foreach ($config as $k => $v){ if($k == 'items') continue; $this->setProperty($k,$v); } if( !empty($config['items'])){ if( is_array($config['items']) ){ foreach ($config['items'] as $v){ $this->addItems($v); } }else{ $this->addItems($v); } } } } /** * 根据属性值$value设置$property属性 * * @param String $property 属性名称 * @param Mixed $value 属性值 */ public function setProperty($property,$value){ if(!empty($property) && !empty($value)) $this->property[$property] = $value; } /** * 添加Viewport的显示对象 * * @param ExtObject $object */ public function addItems($object){ if(!empty($object)){ $this->items[] = $object; } } /** * 初始化viewport */ private function init(){ $obj = new ExtObject("Ext.Viewport",array()); $obj->setProperties($this->property); $obj->setProperty("items",$this->items); $this->vpbody = $obj; } /** * 获取viewport的JS * * @return String */ public function getJavascript(){ $this->init(); return $this->vpbody->render("vport"); } /** * */ public function render(){ $js = $this->getJavascript (); $default = isset ( $_COOKIE ['exttheme'] ) ? $_COOKIE ['exttheme'] : $_SESSION ['SYS_THEM']; if (! empty ( $default )) $this->setExtCss ( $default ); //设置EXTJS的显示样式 //建立extjs的页面并设置页面的基本ext执行环境 $page = new ExtPage ( ); $page->extbase = $this->getExtBaseCode (); //设置extBase $page->extjs .= "Ext.onReady(function(){"; $page->extjs .= $js; $page->extjs .= "});"; //$page->body = "<div id='body'></div>"; $page->render (); } public function show(){ $this->render(); } public function __toString(){ return $this->getJavascript(); } } ?>
9. [文件] Window.class.php ~ 4KB 下载(53) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php /** * +---------------------------------------------------------------------- * | PHPExtJs * +---------------------------------------------------------------------- * | @License: ( http://www.apache.org/licenses/LICENSE-2.0 ) * +---------------------------------------------------------------------- * | @Author: wb <wb1491@gmail.com> * +---------------------------------------------------------------------- */ include_once "ExtBase.class.php"; include_once "ExtObject.class.php"; include_once "ExtFunction.class.php"; include_once "ExtPage.class.php"; class Window extends ExtBase { private $winname = ''; private $winbody = null; private $winitems = null; private $winbutton = null; private $winbbar = null; private $property = array (); /** * 生成Extjs的窗口 * @param String $name 窗口名称 * @param Array $config 配置数组 */ public function __construct($name,$config) { //parent::__construct (); if(!empty($name)){ $this->winname = $name; } if (! empty ( $config ) && is_array ( $config )) { foreach ( $config as $k => $v ) { if ($k == 'items' || $k == 'bbar' || $k == 'buttons') continue; $this->setProperty ( $k, $v ); } if (! empty ( $config ['items'] )) { if (is_array ( $config ['items'] )) { foreach ( $config ['items'] as $v ) { $this->addItems ( $v ); } } else { $this->addItems ( $v ); } } if (! empty ( $config ['bbar'] )) { if (is_array ( $config ['bbar'] )) { foreach ( $config ['bbar'] as $v ) { $this->addBbar ( $v ); } } else { $this->addBbar ( $v ); } } if (! empty ( $config ['buttons'] )) { if (is_array ( $config ['buttons'] )) { foreach ( $config ['buttons'] as $v ) { $this->addBbar ( $v ); } } else { $this->addBbar ( $v ); } } } } /** * 根据属性值$value设置$property属性 * * @param String $property 属性名称 * @param Mixed $value 属性值 */ public function setProperty($property, $value) { if (! empty ( $property ) && ! empty ( $value )) $this->property [$property] = $value; } /** * 添加Windows的显示对象 * * @param ExtObject $object */ public function addItems($object) { if (! empty ( $object )) { $this->winitems [] = $object; } } /** * 添加Windows的工具 * * @param Mixed $object */ public function addBbar($object) { if (! empty ( $object )) { $this->winbbar [] = $object; } } /** * 添加Windows的按钮 * * @param Mixed $object */ public function addButton($object) { if (! empty ( $object )) { $this->winbutton [] = $object; } } private function init() { $obj = new ExtObject ( "Ext.Window", array () ); $obj->setProperties ( $this->property ); if (! empty ( $this->winbbar )) $obj->setProperty ( "bbar", $this->winbbar ); if (! empty ( $this->winitems )) $obj->setProperty ( "items", $this->winitems ); if (! empty ( $this->winbutton )) $obj->setProperty ( "buttons", $this->winbutton ); $this->winbody = $obj; } /** * 获得windows对象的JS * * @param String $winName */ public function getJavascript() { $this->init (); if (! empty ( $this->winname )) return $this->winbody->render ( $this->winname ) . "{$this->winname}.show();"; else return $this->winbody->render (); } public function render($winName = '') { $js = $this->getJavascript ( $winName ); //建立extjs的页面并设置页面的基本ext执行环境 $page = new ExtPage (); $page->extbase = $this->getExtBaseCode (); //设置extBase $page->extjs .= "Ext.onReady(function(){"; $page->extjs .= $js; $page->extjs .= "});"; $page->render (); } public function show($winName = 'win1') { $this->render ( $winName ); } public function __toString() { return $this->getJavascript (); } } ?>
11. [文件] FormWin.class.php ~ 12KB 下载(51) 跳至 [1] [2] [3] [4] [5] [8] [9] [11] [全屏预览]
<?php vendor("com.qldx.ext.*"); class FormWin extends Form { /** * 窗体加载初始数据的对象 * @var ExtObject */ public $formLoad = null; /** * 窗体读取数据的对象 * @var ExtObject */ public $formreader = null; /** * 加载数据时传递的参数 * @var Mixed */ public $formLoadParam = null; /** * 窗口对象 * @var ExtObject */ public $windolg = null; /** * 窗体字段集 * @var Array */ public $fieldset = array(); /** * 初始化窗体对象的代码 * @var String */ public $initcorde = ''; /** * 窗体不含按钮 默认为false意为含有按钮 * @var Bloon */ public $noButton = false; /** * 构造窗体 * @param String $formName 窗体名称 * @param String $ModelName 窗体关联数据表模型名 * @param Mixed $dataId 窗体关联数据的ID * @param Array $Properties 窗体属性数组 */ public function __construct($formName = '', $ModelName = "", $dataId = "", $Properties = array()) { parent::__construct($formName, $ModelName, $dataId, $Properties); $this->formbody->setProperty("labelWidth", 80); $this->formbody->setProperty("defaults", array("{xtype:'textfield',anchor:'100%'}")); $this->windolg = new ExtObject("FormWin", array( 'id' => $this->formName, 'name' => $this->formName, 'dataID' => $this->dataId, 'title' => $this->formbody->title, 'collapsible' => true, 'maximizable' => true, 'layout' => 'fit', 'plain' => true, 'bodyStyle' => 'padding:5px;', 'buttonAlign' => 'center', "msk" => array("new Ext.LoadMask(Ext.getBody(), {msg : '正加载数据,请稍等...'})"), "createFormPanel" => null, "initComponent" => null ) ); $this->initcorde = new ExtFunction(NULL, " this.keys={ key: Ext.EventObject.ENTER, fn: this.save, scope: this }; FormWin.superclass.initComponent.call(this); this.fp=this.createFormPanel(); this.add(this.fp); if(!this.dataID && this.loadParam.id){ this.dataID = this.loadParam.id } "); } /** * 设置窗体默认的初始化代码 * @param Mixed $code 代码串或者ExtObject对象 */ public function setFormInitCode($code) { $this->initcorde->SetCode($code); } /** * 设置窗体加载事件 注意:当$obj为空时添加默认的Loader 如果要传第其它参数,必须 * 先通过setFormLoaderParam方法设置加载时的其他对象 * @param ExtObject $obj form的Loader对象 */ public function setFormLoader($obj = null) { $tobj = null; $param = null; if ($this->dataId) { $param = new ExtObject(null, array('id' => $this->dataId)); } else { $param = new ExtObject(null, array('id' => array('this.dataID'))); } if (!empty($obj) && is_object($obj)) { if (!isset($obj->param) || empty($obj->param)) { $this->setProperty("loadParam", $obj->param); $this->del('param'); } else { //如果加载的对象不含param则并入预先设置的loadParam $this->setProperty("loadParam", $param); } $obj->param = array("this.loadParam"); $tobj = $obj; } else { $this->setProperty("loadParam", $param); $tobj = new ExtObject(null, array( "url" => __URL__ . "/getFormWinData", "params" => array('this.loadParam'), "success" => new ExtFunction(Null, " this.msk.hide(); "), "scope" => array('this') )); } $this->formLoad = $tobj; } /** * 设置窗体的数据加载Loader对象的属性 * @param String $attrib * @param Mixed $value */ public function setFormLoaderProperty($attrib, $value) { $this->formLoad->setProperty($attrib, $value); } /** * 设置额外的窗体加载对象的参数 * @param String $param 参数名称 * @param Mixed $value 参数值 */ public function setFormLoaderParam($param, $value) { $this->formLoadParam->setProperty($param, $value); } /** * 设置窗口容器的属性 * @param String $attrib * @param Mixed $value */ public function setWindowsProperty($attrib, $value) { $this->windolg->setProperty($attrib, $value); } /** * 设置窗体读数据标识form reader */ private function setFormReader() { $this->formreader = new ExtObject( 'Ext.data.JsonReader', array( new ExtObject( null, array("root" => "data") ), $this->fieldset ) ); } private function setFormInt() { $twidth = 0; $tmpwidth = 16; $tmpheight = 40; //form窗体的读取数据的标志 字段名称列表 foreach ($this->formFields as $n => $f) { $this->fieldset[] = new ExtObject(null, array('name' => $n, 'mapping' => $n)); } //并且计算窗体的高度 if (empty($this->windolg->height)) { foreach ($this->formFields as $n => $f) { if (isset($f->height) && $f->height > 0) { $tmpheight += $f->height; } else { $tmpheight += 32; } if (isset($f->width) && $f->width > $tmpwidth) { $twidth = $f->width; } } } else { $tmpheight = $this->windolg->height; $twidth = $this->windolg->width; } if (empty($tmpheight)) { $tmpheight = 200; } elseif ($tmpheight > 750) { $tmpheight = 750; } if (empty($twidth)) { $tmpwidth += $twidth; } if (empty($tmpwidth) || $tmpwidth == 16) { $tmpwidth = 340; } $this->windolg->setProperty("width", $tmpwidth); $this->windolg->setProperty("height", $tmpheight); $this->windolg->setProperty("minWidth", $tmpwidth); $this->windolg->setProperty("minHeight", $tmpheight); } /** * 添加窗体的默认添加按钮 * @param String $name 默认为:save * @param String $title 默认为:保存 * @param ExtFunction $hander 默认的事件响应对象 */ public function addSaveButton($name = 'save', $title='保存', $hander=null) { if (empty($hander)) { $hander = new ExtFunction(null, " if(this.fp.form.isValid()){ var turl = '" . __URL__ . "/saveFormWinData'; if(this.dataID){ turl += '/id/'+ this.dataID; } var fw = this; this.fp.form.submit({ waitTitle:'请稍候', waitMsg : '正在处理请求...', url : turl, params: this.loadParam, success : function(form, action){ fw.close(); if(form.rGrid){ if(form.rGrid.root){ form.rGrid.getLoader().load(form.rGrid.root); }else{ form.rGrid.getLoader().load(); } } }, failure : function() { fw.close; Ext.Msg.alert('系统错误','服务器出现错误请稍后再试!'); } }); } "); } $this->addButton($name, $title); $this->setButtonAttrib($name, 'handler', $hander); } /** * 添加默认取消按钮 * @param String $name * @param String $title * @param ExtFunction $hander */ public function addCancelButton($name = 'cancle', $title='取消', $hander=null) { if (empty($hander)) { $hander = new ExtFunction(null, " this.close(); "); } $this->addButton($name, $title); $this->setButtonAttrib($name, 'handler', $hander); } /** * 根据model对象名称设置FormWin的数据model * * @param String $modelName model对象名称 * @param Mixed $id 要编辑到记录号 */ public function setDataModel($modelObject, $id) { $this->setDataSource($modelObject, $id); } /** * 根据model对象名称设置FormWin的数据model * @param String $modelName model对象名称 */ public function setDataModelByName($modelName) { if (!empty($modelName)) { $model = D($modelName); $this->setDataModel($model); } } /** * 本方法返回此对象的JS串 * @return String 本对象的JS串 */ public function getJavascript() { $this->initForm(); $this->setFormInt(); $this->setFormReader(); $this->setFormLoader(); //并入窗体的数据加载对象 $this->setFormInitCode(" this.fp.load(" . $this->formLoad->render() . "); "); //设置窗体基本属性 if (empty($this->formbody->baseCls)) { $this->formbody->setproperty('baseCls', 'x-plain'); } if (empty($this->formbody->reader)) { $this->formbody->setProperty("reader", $this->formreader); } $this->formbody->setProperty("items", $this->getElementArray()); //创建窗口 $this->windolg->setProperty( "createFormPanel", new ExtFunction(null, array("return" => $this->formbody->render()) ) ); //添加按钮 if (!$this->noButton) { if (!empty($this->formButtons) && is_array($this->formButtons)) { foreach ($this->formButtons as $k => $v) { $this->initcorde->SetCode("this.addButton('" . $v->text . "',this." . $k . ",this);"); $this->windolg->setProperty($k, $v->handler); } } else { $this->initcorde->SetCode(" this.addButton('保存',this.save,this); this.addButton('取消', function(){this.close();},this); "); } } $this->windolg->setProperty("initComponent", $this->initcorde); $this->windolg->setExtendsClass("Ext.Window"); return $this->formExtendJs . $this->windolg->render(); } } ?>
精彩图集
精彩文章