- 浏览: 1776728 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
这几天看阿旭使用QEE,我也心痒不已,正好手头有个项目,正好学习下....又学习了又挣钱了...
QEE不说,还真难,官房提供的快速指南只能说 太简易.....
色色比较熟悉flea,好不容易说服自己使用qee,这次一定要全身而退!!!!!
qee的控制器实现的不错,还实现了命名空间的概念,这个确实很吸引我,加上路由功能....
只是视图这块做的我觉得不咋的,我也很讨厌smarty,我是说纯PHP引擎你也多写点辅助方法啊....
缺省生成的视图页面: default_layout.php 写道
<link rel="stylesheet" type="text/css" href="<?php echo $_BASE_DIR; ?>css/style.css">
里面 竟然有这种存在,很无语啊,起码你也要像rails,做个什么 样式表标签之类的吧.... 自己来吧,开始...
在helper目录下建立一个x.php文件,里面是色色为自己提供的常规方法....
<?php class Helper_X { private $_baseuri ; private $_basedir ; protected function __construct($_baseuri){ $this->_basedir = Q::ini('app_config/ROOT_DIR') ; if (!preg_match("/\\$/i",$this->_basedir)) $this->_basedir .= '/' ; $this->_baseuri = $_baseuri ; if (!preg_match("/\\$/i",$_baseuri)) $this->_basedir .= '/' ; } static function instance($_baseuri){ static $instance; if (is_null($instance)) { if (!empty($_baseuri)) { $instance = new Helper_X($_baseuri); }else die('INVALID CONSTRUCT X'); } return $instance; } private function resIsExist($fpath){ if(file_exists("{$this->_basedir}{$fpath}")) return true ; return false ; } private function ftimestamp($fpath){ return filemtime("{$this->_basedir}{$fpath}"); } public function stylesheet_link_tag(){ $css_fpath = "css/%s.css" ; $params = func_get_args(); foreach ($params as $param){ $fpath = sprintf($css_fpath,$param); if(!$this->resIsExist($fpath)){ echo sprintf("<style>/* {File not found : %s%s */</style>\n",$this->_baseuri,$fpath); // QLog::log("未能加载CSS文件: {$this->_basedir}{$fpath}", QLog::WARN); } else { echo sprintf("<link rel=\"stylesheet\" href=\"{$this->_baseuri}%s?%d\" type=\"text/css\" media=\"screen\" />\n", $fpath,$this->ftimestamp($fpath)); } } } public function js_include_tag(){ $js_fpath = "js/%s.js" ; $params = func_get_args(); foreach ($params as $param){ $fpath = sprintf($js_fpath,$param); if(!$this->resIsExist($fpath)){ echo sprintf("<script>/* {File not found : %s%s */</script>\n",$this->_baseuri,$fpath); // QLog::log("未能加载JS文件: {$this->_basedir}{$fpath}", QLog::WARN); } else { echo sprintf("<script type=\"text/javascript\" src=\"{$this->_baseuri}%s?%d\"></script>\n", $fpath,$this->ftimestamp($fpath)); } } } function js_include_ucren($skin='qq',$iscache=false){ $fpath = 'js/engine/boot.js' ; if(!$this->resIsExist($fpath)){ echo sprintf("<script>/* {Ucren not found : %s%s */</script>\n",$this->_baseuri,$fpath); QLog::log("未能加载Ucren组件: {$this->_basedir}{$fpath}", QLog::WARN); }else { echo sprintf("<script type=\"text/javascript\" src=\"{$this->_baseuri}%s?%d&skin=%s\"></script>\n", $fpath,$this->ftimestamp($fpath),$skin); } } public function js_text($js_code=null){ echo "<script>{$js_code}</script>\n" ; } function css_text($css_code=null){ echo "<style>{$css_code}</style>\n" ; } /** * 返回图片地址 * * @param string $_path */ public function img_url($_path,$return = false){ if ($return) return "{$this->_baseuri}img/{$_path}"; echo "{$this->_baseuri}img/{$_path}"; } //定义一个函数用于调用FCKeditor public function call_fck($path=null,$t_set=null,$iname=null,$ivalue=null,$w=null,$h=null){ if (!class_exists('Helper_FCKeditor')) Q::loadClass('Helper_FCKeditor'); $fcked = Q::singleton('Helper_FCKeditor') ; $fcked->BasePath = empty($path)? $this->_baseuri . 'js/editor/':$path; $fcked->ToolbarSet = empty($t_set)?'Basic':$t_set ; //工具栏设置 $fcked->InstanceName = empty($iname)?'test':$iname ; $fcked->Width = empty($w)?'100%':$w ; $fcked->Height = empty($h)?'200':$h ; $fcked->Value = $ivalue; $fck_area = $fcked->CreateHtml(); return $fck_area ; } } ?>
这种 简单的方法,注释我看还是不用写了吧,要看注释的,请看我之前发的色色的FLEAPHP扩展,这些方法基本摘自那里,又简化封装了下....
对应于最后一个fck调用,这里还要在helper目录下建立一个fckeditor.php文件,内容如下:
<?php /** * 富文本编辑器 辅助器 * */ class Helper_FCKeditor { var $InstanceName ; var $BasePath ; var $Width ; var $Height ; var $ToolbarSet ; var $Value ; var $Config ; // PHP 4 Contructor function Helper_FCKeditor( $instanceName = "test") { $this->InstanceName = $instanceName ; $this->BasePath = './editor/' ; $this->Width = '100%' ; $this->Height = '350' ; $this->ToolbarSet = 'Default' ; $this->Value = '' ; $this->Config = array() ; } function Create() { echo $this->CreateHtml() ; } function CreateHtml() { $HtmlValue = htmlspecialchars( $this->Value ) ; $Html = '<div>' ; if ( $this->IsCompatible() ) { $File = 'fckeditor.html' ; $Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ; if ( $this->ToolbarSet != '' ) $Link .= "&Toolbar={$this->ToolbarSet}" ; // Render the linked hidden field. $Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ; // Render the configurations hidden field. $Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ; // Render the editor IFRAME. $Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ; } else { if ( strpos( $this->Width, '%' ) === false ) $WidthCSS = $this->Width . 'px' ; else $WidthCSS = $this->Width ; if ( strpos( $this->Height, '%' ) === false ) $HeightCSS = $this->Height . 'px' ; else $HeightCSS = $this->Height ; $Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ; } $Html .= '</div>' ; return $Html ; } function IsCompatible() { global $HTTP_USER_AGENT ; if ( isset( $HTTP_USER_AGENT ) ) $sAgent = $HTTP_USER_AGENT ; else $sAgent = $_SERVER['HTTP_USER_AGENT'] ; if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false ) { $iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ; return ($iVersion >= 5.5) ; } else if ( strpos($sAgent, 'Gecko/') !== false ) { $iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; return ($iVersion >= 20030210) ; } else return false ; } function GetConfigFieldString() { $sParams = '' ; $bFirst = true ; foreach ( $this->Config as $sKey => $sValue ) { if ( $bFirst == false ) $sParams .= '&' ; else $bFirst = false ; if ( $sValue === true ) $sParams .= $this->EncodeConfig( $sKey ) . '=true' ; else if ( $sValue === false ) $sParams .= $this->EncodeConfig( $sKey ) . '=false' ; else $sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ; } return $sParams ; } function EncodeConfig( $valueToEncode ) { $chars = array( '&' => '%26', '=' => '%3D', '"' => '%22' ) ; return strtr( $valueToEncode, $chars ) ; } } ?>
然后 将 文件拷贝到'js/editor' 下即可....
然后修改控制器,在你自己的控制器中覆盖Controller_Abstract 的_before_render方法即可
/** * 渲染之前调用 * * @param QView_Render_PHP */ protected function _before_render($response) { $x = Helper_X::instance($response->getVar('_BASE_DIR')); $response->assign('x',$x); }
然后在你的视图文件中就可以使用了;
<?php // 指示该视图从 _layouts/default_layout 继承 $this->_extends('_layouts/default_layout'); ?> <?php // 定义一个名为 contents 的区块 $this->_block('contents'); ?> <?php $x->js_include_tag("xx",'jq','bbs'); $x->js_include_ucren(); $x->js_text(" Ucren.onReady(function(){ Ucren.alert('Ucren'); }); "); $x->stylesheet_link_tag("xx",'jq','style'); $x->css_text("body{color:red;}"); ?> <img src="<?php $x->img_url('qeephp.jpg'); ?>" /> <form name="form_user" id="form_user" action="<?php echo url('admin::city'); ?>" method="post"> <fieldset> <p> <label for="username">用户名</label> <input type="text" name="username" id="username" /> </p> <p> <label for="password">密码</label> <input type="password" name="password" id="password" /> </p> <p> <label for="body">描述</label> <?php $fck_body = $x->call_fck(null,'TIC_MIN','body','',"98%",'100'); echo $fck_body ; ?> </p> <p> <input type="submit" name="Submit" value="提交" /> </p> </fieldset> </form> <?php // 区块定义结束 $this->_endblock(); ?>
运行后页面源代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <title>QeePHP: 新一代的敏捷开发框架</title> <link rel="stylesheet" type="text/css" href="/xutic/css/style.css"> </head> <body> <div id="page"> <div id="sidebar"> <ul id="sidebar-items"> <li> <form id="search" action="http://www.google.com/search" method="get" target="_blank"> <input type="hidden" name="hl" value="en" /> <input type="text" id="search-text" name="q" value="site:qeephp.org " /> <input type="submit" value="搜索" /> QeePHP 网站 </form> </li> <li> <h3>加入社区</h3> <ul class="links"> <li><a href="http://qeephp.com/" target="_blank">QeePHP 官方网站</a></li> <li><a href="http://qeephp.com/bbs/" target="_blank">论坛</a></li> <li><a href="http://code.google.com/p/qeephp/issues/list" target="_blank">Bug 报告</a></li> </ul> </li> <li> <h3>浏览文档</h3> <ul class="links"> <li><a href="http://qeephp.org/docs/qeephp/api/" target="_blank">QeePHP API 文档</a></li> <li><a href="http://www.php.net/docs.php" target="_blank">PHP 文档</a></li> </ul> </li> </ul> </div> <div id="content"> <script type="text/javascript" src="/xutic/js/xx.js?1260961596"></script> <script>/* {File not found : /xutic/js/jq.js */</script> <script>/* {File not found : /xutic/js/bbs.js */</script> <script type="text/javascript" src="/xutic/js/engine/boot.js?1257408552&skin=qq"></script> <script> Ucren.onReady(function(){ Ucren.alert('Ucren'); }); </script> <style>/* {File not found : /xutic/css/xx.css */</style> <style>/* {File not found : /xutic/css/jq.css */</style> <link rel="stylesheet" href="/xutic/css/style.css?1260857742" type="text/css" media="screen" /> <style>body{color:red;}</style> <img src="/xutic/img/qeephp.jpg" /> <form name="form_user" id="form_user" action="/xutic/index.php/admin/city" method="post"> <fieldset> <p> <label for="username">用户名</label> <input type="text" name="username" id="username" /> </p> <p> <label for="password">密码</label> <input type="password" name="password" id="password" /> </p> <p> <label for="body">描述</label> <div><input type="hidden" id="body" name="body" value="" style="display:none" /><input type="hidden" id="body___Config" value="" style="display:none" /><iframe id="body___Frame" src="/xutic/js/editor/editor/fckeditor.html?InstanceName=body&Toolbar=TIC_MIN" width="98%" height="100" frameborder="0" scrolling="no"></iframe></div> </p> <p> <input type="submit" name="Submit" value="提交" /> </p> </fieldset> </form> </div> <div id="footer"> <p> Powered by <a href="http://qeephp.com/" target="_blank">QeePHP 2.1</a> | <a href="http://www.qeeyuan.com/" target="_blank">起源科技</a> </p> </div> </div> </body> </html>
这里我再给大家抓个图看看啊:
评论
2 楼
vb2005xu
2009-12-17
启用个gzip压缩,只需在index.php中 这样写:
//启用gzip压缩 //ob_start('ob_gzhandler'); Q::ini('app_config/compress', false) ? ob_start() : ob_start('ob_gzhandler'); $ret = MyApp::instance($app_config)->dispatching(); ob_end_flush();
1 楼
vb2005xu
2009-12-17
轻松实现 QEE多级控制器目录模块结构 -- 色色写的 http://qeephp.com/bbs/viewthread.php?tid=10560&extra=
发表评论
-
ws-http 最简单轻量的PHP CURL工具库
2016-07-29 20:44 2618欢迎大家拍砖 https://github.com/to ... -
Facade 包装类 -- 解决视图里面长长的命名空间调用问题
2016-04-20 10:48 1744有时候模版里面定义 ... -
PHP单例模式面试注意事项
2015-10-20 09:57 1950最近面了不少PHP从业者,有实习生也有5/6年以上的开发者 ... -
NGINX 配置 SSL 证书 搭建 HTTPS 网站
2015-10-19 19:19 2916下面是详细的配置过程: 1、在服务器上使用 Open ... -
关于php cron任务管理的实现假想
2015-10-17 21:25 1895之前每开发一个计划任务功能均需要在线上操作crontab来新 ... -
修改一些PHP工具
2014-10-24 19:27 1798原来的代码 在非框架下是木有问题的,但是用在框架下就报错, ... -
sublime text linux上中文输入问题的终极解决方案
2014-10-13 11:07 8562我一直在使用sublime text ... -
qeephp3.0 发布了
2014-10-07 17:21 1698QeePHP 是一个快速、灵活的开发框架。应用各种成熟的架构 ... -
swiftmailer 的快捷助手 qser-mailer
2014-09-09 23:52 3591近日在对charsen的修改版上进行了再次的修改与调整,对 ... -
PHP 中简单的伪造IP刷票实现
2014-05-15 17:06 2754一般而言,我们的获取用户真实ip的代码大致是这样... / ... -
PHP5.5 htmlspecialchars 返回null的坑
2014-04-25 12:23 2610昨天在写 PDO数据库封装类的 测试代码时遇到这个问题,取 ... -
PHP 5.5 empty + 魔术变量 的坑
2014-04-16 15:53 1597今天在测试代码时遇到这么一个疑问? dump((in ... -
Aert_Log: 设计一个精简易用的日志
2014-04-13 18:28 2478日志记录对于应用的 ... -
创建一个简单的短链服务类
2013-07-01 18:20 1360整理一个简单的短链算法,整理到自己的代码库中: &l ... -
收集常用的PHP简单代码
2013-06-30 17:53 2054对于日常工作中整理出来的某些功能做个简单梳理: 1 ... -
简易PHP路由,支持正反向url解析支持
2013-06-21 22:23 8227几年前实现了一个简单的正向路由,那时候不会写反向路由解析, ... -
系统学习のCACHE 学习
2012-11-21 13:58 1904http://www.phpfans.net/article/ ... -
YY 下 sql查询封装类 不知道好不好使
2012-07-18 16:44 1331<?php class Pkg_Db_Actor { ... -
生成后台管理菜单 admin_menu 类
2012-05-05 18:27 4644<?php /** * 管理菜单 * */ ... -
抽取个sql生成器工具 -- 摘自 fuelphp1.1 版本
2012-04-25 20:17 1226<?php /** * Sql 创造者类 * ...
相关推荐
标题中的“简易MVC组件[改自Qee v3 beta]”指的是这是一个基于MVC(Model-View-Controller)设计模式的轻量级组件,它来源于Qee项目的一个版本,即Qee v3的测试版,并经过了简化和优化。MVC模式是软件工程中常用的一...
qee框架目前文档不多,没有更完善的更新。希望有利于大家更好的了解该框架和学习
QEE113封装类型为侧视型(Sidelooker),意味着它的发射方向是从侧面而非正面发出,这在需要特定角度发射光线的应用中特别有用。 芯片材料采用镓砷化物(GaAs),这是一种常见的半导体材料,因其在红外光谱区的良好...
- 在控制器中,你可以使用`$this->render()`方法渲染视图,并传递数据到视图。 6. **助手函数与组件** - QeePHP提供了一些助手函数,可以帮助简化常见的编程任务,如URL生成、表单处理等。 - 组件是可复用的代码...
ee 排队基类和现成品安装$ npm install qee用import Transform from 'qee/source/Transform' ;let queue = new TransformQueue ( ... transforms ) . process ( data ) ;延长import Queue from 'qee'class ...
这不仅有助于学生在理论学习与实际应用之间建立联系,还有助于提高他们对高压设备绝缘问题的认识,增强学习兴趣和提高学习效率。 此外,软件的开发与应用得到山东自然科学基金项目(ZR2019QEE014)和中央高校基本...
在 Windows2000/XP/Vista/Seven 下用其磁盘管理控制台格式化磁盘时,采用 FAT32 格式,有一个限制,即一个分区的大小限制在 32GB 之内,这可能是由于推广或建议使用 NTFS 的一种手段,如果要格式化某一驱动器,分区...
* 音乐 SNS 网站(后台代码编写、数据库设计、Ajax 交互、使用 Qee 开发) 外语水平 * 第一外语:英语(初级) * 第二外语:英语(初级) 兴趣爱好 * 英语 * 篮球 * 编程 自我简评 * 喜欢折腾各种技术 * 能看...
[Alpha]网址匹配从URL轻松提取有趣的信息。 受Clojure的 (一个很棒的路由库)的启发。...)# => {'id': '57Ykv1D0qEE', 'ts': '1m43s'}项目成熟度该项目处于开发的早期阶段,因此任何事情都可能改变。
Intro 的网站后台页面与后端代码,基于laravel+vue.js。 技术栈 laravel5.4 + passport + vue2 + element-ui + axios + stylus ... * PASSWORD_CLIENT_SECRET=OdIzVLnICs7dXYz3QEe9xeo1ITr2ugpdrwR1xvGb **/ php arti
用“Googling ...灵感来自:http://bit.ly/1HF3QEe 该应用将“编程”一词替换为“谷歌搜索StackOverflow”以及“编程”一词的其他几种变体。 这是由The Allium启发的:http://bit.ly/1HF3QEe 支持语言:English