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 配列
- */
- public $pageCss = array();
- /**
- * ページに必要な JS ファイル
- * @var 配列
- */
- public $pageJs = array();
- /**
- * ExtJs CSS ファイル
- * @var 文字列
- */
- private $extcss = "";
- /**
- * ExtJS ディレクトリ内のすべてのファイルのインデックスは、配列 (ファイル名 => ファイル パス) の形式になります
- * @var Array
- */
- public $ExtALLFiels = array();
- /**
- * ExtJS の基本的な実行ファイルを定義します。形式は次のとおりです: array (name => ファイル名) ここでは基本的なもののみを定義します
- * 例: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 $basedir で指定されたディレクトリからの相対的な、ExtJS が配置されているディレクトリ
- * @param boolen $extdebue デバッグモードを有効にするかどうか
- * @param boolen $extcore コアモードかどうか
- * @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 $basedirで指定したディレクトリからの相対的な、ExtJSが配置されているディレクトリ
- * @param boolen $extdebue デバッグモードを有効にするかどうか
- * @param boolen $ extcore コアモードかどうか
- * @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 .= " n";
- } else {
- $tmpstr .= "n";
- }
- //その它css
- if (!empty($this->pageCss)) {
- foreach ($this->pageCss as $f) {
- if (is_array($f)) {
- $tmpstr . = "n";
- } else {
- $tmpstr .= "n";
- }
- }
- }
- return $tmpstr;
- }
- /**
- * オブジェクトの基本的なスクリプト構成文字列を取得します
- * @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";
- }
- if ($this->coremode) {
- $tmpstr .= "n";
- }
- //设置语言
- $ ExtLangJS = 'ext-lang-{lang}.js';
- if (!empty($this->extlang)) {
- $tmpfile = strto lower(str_replace("{lang}", $this->gt;extlang, $ExtLangJS));
- if (isset($this->ExtALLFiels[$tmpfile])) {
- $tmpstr .= "n";
- }
- }
-
- //并入其它Js文件
- $tmpstr .= $this->gt;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 .= "< ;script type="text/javascript">Ext.BLANK_IMAGE_URL = '{$this->extbasedir}{$this->exthome}/resources/images/default/s.gif';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;
- }
- }
- /**
- * ページのスタイルを設定します
- * @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) && strto lower($v) != " true" && strto lower($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 (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 = strto lower($v);
- if (isset($retarr[$k])) {
- $tmpstr = preg_replace('/ /{2,} /', "/", $floder . $v);
- if (is_array($retarr[$k])) {
- $retarr[$k][] = $tmpstr; $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;
- }
- /**
- * オブジェクトを文字列として返します
- * @return String
- */
- public function __toString() {
- return $this->getExtBaseCode();
- }
-
- }
- ?> ;
-
-
-
- コードをコピー
- /**
- * PHPExtJs オブジェクト生成クラス
- * @License: ( http://www.apache.org/licenses/LICENSE-2.0 )
- * @Author: wb
- */
- class ExtFunction {
- /**
- * オブジェクトパラメータセット
- * @var 配列パラメータセット
- */
- protected $param = array();
- /**
- * オブジェクトコード
- * @var String オブジェクトコード文字列
- */
-
- protected $code = '';
- /**
- * JS オブジェクト表記の名前
- * @var String オブジェクト名
- */
- protected $clsname = '';
-
- /**
- * パラメーター $param、コード $code および $clsnames に従って Ext 関数オブジェクトを設定します
- *
- * @param $param 関数の混合パラメーター リスト ("val, val1" または array("val", "val1") )
- * @param 混合 $code 関数コード、オブジェクトをたどることができます
- * @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', //去掉注释
- '/[fnrt]*/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' => '
- * )
- * @ param String $name var name 例: $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 混合 $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 .= ( $値)? "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)
- || ('/.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->gt;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 .= "[" . ->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 code
- * @param String $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->gt;body = $body;
- $this->charset = $charset;
- if(!empty($template)) $this- >template = $template;
- else $this->template = "
- {title}
- {extbase}
- {extjs}
-
- {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->gt; 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;
- デフォルト:
- 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 property 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 配列
- */
- public $fieldset = array();
- /**
- * フォームオブジェクトを初期化するコード
- * @var String
- */
- public $initcorde = '';
- /**
- * フォームにはボタンが含まれていません。これは、ボタンが含まれていることを意味します。*/
- 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->フォーム名,
- 'データID' => $this->データID,
- 'タイトル' => $this->formbody->title,
- 'collapsible' => true,
- '最大化可能' => true,
- 'レイアウト' => 'フィット',
- 'プレーン' => 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={
- キー: Ext.EventObject.ENTER,
- fn: this.save,
- スコープ: 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 混合 $code コード文字列または ExtObject オブジェクト
- */
- public function setFormInitCode($code) {
- $this->initcorde->SetCode($code);
- }
-
- /**
- * フォーム読み込みイベントを設定します。 注: $obj が空の場合は、デフォルトの Loader を追加する必要があります。
- * 最初に setFormLoaderParam メソッドを通じて他のオブジェクトを設定します
- * @param ExtObject $obj フォームローダーオブジェクト
- */
- 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);
- }
-
- / **
- * フォームリーダーのデータ識別子を設定します フォームリーダー
- */
- プライベート関数 setFormReader() {
- $this->formreader = new ExtObject(
- 'Ext.data.JsonReader',
- array(
- new ExtObject(
- null,
- array("root" => "データ")
- ),
- $this->fieldset
- )
- );
- }
-
- プライベート関数 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 デフォルトは: save
- * @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();
- }
- }
- },
- 失敗 : function() {
- fw.close;
- Ext.Msg.alert('システム エラー', 'Anサーバーでエラーが発生しました。後でもう一度お試しください。');
- }
- });
- }
- ");
- }
- $this->addButton($name, $title);
- $this->setButtonAttrib ( $name, 'handler', $hander);
- }
-
- /**
- * デフォルトのキャンセルボタンを追加します
- * @param String $name
- * @param String $title
- * @param ExtFunction $hander
- */
- public function addCancelButton($name = 'cancle', $title='Cancel', $hander=null) {
- if (empty($hander)) {
- $hander = new ExtFunction(null, "
- this.close();
- ");
- }
- $this->addButton($name, $title);
- $this - >setButtonAttrib($name, 'handler', $hander);
- }
-
- /**
- * モデルオブジェクト名に従って FormWin データモデルを設定します
- *
- * @param String $modelName モデルオブジェクト名
- * @param レコード番号に編集する $id を混合します
- */
- public function setDataModel($modelObject, $id) {
- $this->setDataSource($modelObject) , $id);
- }
-
- /**
- * モデルオブジェクト名に従って FormWin データモデルを設定します
- * @param String $modelName モデルオブジェクト名
- */
- 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())
- )
- );
- //追加button
- 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(' Save' ,this.save,this);
- this.addButton('Cancel', function(){this.close();},this);
- ");
- }
- }
- $this->windolg- > setProperty("initComponent", $this->initcorde);
- $this->windolg->setExtendsClass("Ext.Window");
- $this->formExtendJs を返します。 -> ;render();
- }
-
- }
-
- ?>
コードをコピー
|