ExtPHP是一个基于Thinkphp开发框架的ExtJS开发类库,使用此类库可以很方便的生成ExtJS的JavaScript代码。
- /**
- * PHPExtJs 基础对象
- * @License: ( http://www.apache.org/licenses/LICENSE-2.0 )
- * @Author: wb
- */
- 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 .= "extbasedir}{$cssfile}\">\n";
- } else {
- $tmpstr .= "extbasedir}{$this->ExtALLFiels[$this->ExtBaseFile['css']]}\">\n";
- }
- //设置其它css
- if (!empty($this->pageCss)) {
- foreach ($this->pageCss as $f) {
- if (is_array($f)) {
- $tmpstr .= "\n";
- } else {
- $tmpstr .= "\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 .= "\n";
- if ($this->debugmode) {
- $tmpstr .= "\n";
- } else {
- $tmpstr .= "\n";
- }
- if ($this->coremode) {
- $tmpstr .= "\n";
- }
- //设置语言
- $ExtLangJS = 'ext-lang-{lang}.js';
- if (!empty($this->extlang)) {
- $tmpfile = strtolower(str_replace("{lang}", $this->extlang, $ExtLangJS));
- if (isset($this->ExtALLFiels[$tmpfile])) {
- $tmpstr .= "\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 .= "\n";
- } else {
- $tmpstr .= "\n";
- }
- }
- }
- return $tmpstr;
- }
-
- /**
- * 获取ExtJs的基本页面配置串
- * @return string
- */
- public function getExtBaseJs() {
- //s.gif
- $tmpstr = '';
- $tmpstr .= "\n";
- if (!empty($this->extcss) && isset($this->ExtALLFiels[$this->extcss])) {
- $tmpstr .= "\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."
\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, ".") $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();
- }
-
- }
- ?>
复制代码
- /**
- * PHPExtJs的对象生成类
- * @License: ( http://www.apache.org/licenses/LICENSE-2.0 )
- * @Author: wb
- */
- 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
\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();
- }
-
- }
-
- ?>
复制代码
- 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;
- }
-
- }
-
- ?>
复制代码
-
/**
- * PHPExtJs ExtJs页面对象
- * @License: ( http://www.apache.org/licenses/LICENSE-2.0 )
- * @Author: wb
- */
-
- 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 = "
-
- {title}
- {extbase}
-
-
- {body}
-
- ";
- }
-
- 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");
- }
- }
- }
复制代码
- 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();
- }
-
- }
-
- ?>
复制代码
|