Submitted by gouki on 2011, April 27, 11:07 PM
Yii在自已内部已经实现了单文件上传和多文件上传的代码,只是很少会有人注意这些吧?
事实上更多时候,在多文件上传的时候,我们往往采用了swfupload来进行处理,但swfupload的参数太多了,用起来会非常复杂和痛苦。
所幸,有很多人知道这些事情,他们对swfupload重新进行了封装,并做了简化,比如这个uploadify。
官网上的例子也很简单,一个是立即上传,一个是自定义上传。其实 最主要的是uploadify的是它的回调函数很少也很方便,常用的就是onError,onCompleted,onAllCompleted,onSuccess之类的。
在Yii的Extension库中,也确实有一款插件叫做EUploadifyWidget。最面对一些变量进行了更多的封装,也就是让我们使用起来更方便。不过,在使用过程中,还是会发现,虽然它封装了很多操作,但其实有很多地方还是没有处理好,官网上的例子也没有处理好。
打开代码可以发现在run函里面有对options等的处理,根据实际需要进行调整就OK了(之所以要调整,其实也还有一个原因,是因为我在这次的项目中没有用到clientScript,而这个插件却用了它,所以我才会多进行了一些处理)
默认的路径还是需要做一些处理,路径中的baseURL是基于它自己的路径来处理的,还有需要更改的就是JS/CSS/swf等的路径需要注意,其他就Over了。
纯笔记
Tags: yii, uploadify, swfupload
PHP Framework | 评论:0
| 阅读:22217
Submitted by gouki on 2011, April 26, 11:32 AM
这是Yii CDbCriteria的一些笔记和常用用法:
PHP代码
- $criteria = new CDbCriteria;
- $criteria->addCondition("id=1");
- $criteria->addInCondition('id', array(1,2,3,4,5));
- $criteria->addNotInCondition('id', array(1,2,3,4,5));
- $criteria->addCondition('id=1','OR');
- $criteria->addSearchCondition('name', '分类');
- $criteria->addBetweenCondition('id', 1, 4);
-
- $criteria->compare('id', 1);
-
-
-
-
- $criteria->addCondition("id = :id");
- $criteria->params[':id']=1;
-
-
-
- $criteria->select = 'id,parentid,name';
- $criteria->join = 'xxx';
- $criteria->with = 'xxx';
- $criteria->limit = 10;
- $criteria->offset = 1;
- $criteria->order = 'xxx DESC,XXX ASC' ;
- $criteria->group = 'group 条件';
- $criteria->having = 'having 条件 ';
- $criteria->distinct = FALSE;
有需要用到的可以查看一下。。。
Tags: yii, cdbcriteria
PHP Framework | 评论:5
| 阅读:57108
Submitted by gouki on 2011, April 11, 11:59 AM
本文纯粹是笔记,记下来怕忘了
1、终止当前操作,一般情况下是用exit,但用了Exit后无法看到trace的内容。所以要采用Yii::app()->end();
2、createUrl和createAbsoluteUrl,这两个函数,如果需要宣传自己的网址和内容,还是用createAbsoluteUrl函数吧。里面带了全部路径,而CreateUrl只会显示/home/xxx这样的路径,不利于SEO
3、widget默认的render无法使用theme中的模版,于是写一个类继承自CWidget,然后所有的widget都继承这个类,比如我这样实现了。。
PHP代码
- class Widget extends CWidget{
- private static $_viewPaths;
-
-
-
- public function getViewPath($checkTheme=false)
- {
- $className=get_class($this);
- if(isset(self::$_viewPaths[$className]))
- return self::$_viewPaths[$className];
- else
- {
- if($checkTheme && ($theme=Yii::app()->getTheme())!==null){
- return self::$_viewPaths[$className] = $theme->getBasePath().DIRECTORY_SEPARATOR."widgets"; //这是我自己的路径
- }
- $class=new ReflectionClass($className);
- return self::$_viewPaths[$className]=dirname($class->getFileName()).DIRECTORY_SEPARATOR.'views';
- }
- }
- }
覆写父类方法,使得getViewPath找到我指定的目录,我目录在themes/classic/下建了一个widgets的目录。这样的好处很多。。而且对于CSS和JS等路径都可以和标准视图一致
先写这么多。。。
Tags: yii
PHP Framework | 评论:2
| 阅读:20526
Submitted by gouki on 2011, April 5, 10:16 PM
怒了。真的怒了。。。。
前两天我还一直在想,怎么让yii实现查询的时候进行缓存,当时考虑在beforeFind和afterFind后做处理,但看了代码才发现beforeFind,如果不显式传入criteria,就没有办法把查询参数传递进去,那我就没有办法判断当前查询的param 是否被缓存了。AfterFind,倒是可以做处理,因为$event->sender或者$this中都已经有了结果集了。。。但没有办法判断是否缓存,查询完的缓存意义也就不大了。不是吗?
刚才无意中看了一下Yii 1.1.17的changelog,居然看到了这个:query-caching,当时我就震精了。http://www.yiiframework.com/doc/guide/1.1/en/caching.data#query-caching
好象这次1.1.17更新的几个功能都不错。。。查看这里:http://www.yiiframework.com/news/45/yii-php-framework-1-1-7-is-released/
- RESTful URL Support
- Query Caching
- Parameter Binding for Class-based Actions
- Seamless Client-side Validation
- Passing Parameters to Relational Named Scopes
- Using 'through' with HAS_MANY and HAS_ONE
- Using Transactions in DB Migration
- Registering and Using Custom Script Packages
好象,除了1、7我兴趣不是特别大,其它的几个都不错,原来的Actions中的Action无法绑定参数的,现在也直接可以用了,也就是说Action可以更容易的被移出。代码也更易分离了。4是客户端验证,原来还要在提交后到服务端验证,现在又方便一点了。。
其它的还是看看官方吧,不一定介绍了。
Tags: yii, querycache
PHP Framework | 评论:2
| 阅读:19360
Submitted by gouki on 2011, March 18, 10:49 PM
最近,明显是空了很多,于是我看了一下以前的代码,再看看网上那些开源的代码,拿来与我自己曾经写的代码进行验证这样可以了解别人的优点。知道自己的缺点在哪里。
1、xweibo,这个玩意目前很流行,腾讯也出了个iweibo,反正说白了,如果你是用接口,那无非就那么点东西。根据接口拉拉数据,你也不用关系他们的数据结构和其他的代码等。当然如果你要整合到你自己的系统里就不是这么简单啦。所以,我在看xweibo是怎么个折腾法。。。。所幸,你看xweibo的index.php文件里,被注释了很多代码那就是xweibo的一些常用方法,看看就差不多了。。。
2、sablog for Yii前台基本完成,目前已经完成:文章列表、回复列表、标签云、标签云对应文章列表,首页,侧边栏也基本完成。待完成的有:友情链接页,文章内容页,高级搜索页,搜索结果页等(文章内容页里的东西最多,有考虑象以前想过的,本博客历史上的今天,关联文章,回复,等等,太多了。。当然还要考虑预留点广告位,方便自己塞广告。文章内容,也还得考虑那些程序的语法标签,附件,缩略图。。。。唉)
通过设置,现在的Url规则也尽量与原来一致,这样我如果切换的话,几乎就可以平移了。。
把官方这段贴上来,http://www.yiiframework.com/doc/guide/1.1/zh_cn/topics.url。。。不是照抄就能用的,得看清楚一些符号。。黑黑
我们使用一些例子来解释网址工作规则。我们假设我们的规则包括如下三个:
array(
'posts'=>'post/list',
'post/<id:\d+>'=>'post/read',
'post/<year:\d{4}>/<title>'=>'post/read',
)
-
调用$this->createUrl('post/list')
生成/index.php/posts
。第一个规则适用。
-
调用$this->createUrl('post/read',array('id'=>100))
生成/index.php/post/100
。第二个规则适用。
-
调用$this->createUrl('post/read',array('year'=>2008,'title'=>'a sample post'))
生成/index.php/post/2008/a%20sample%20post
。第三个规则适用。
-
调用$this->createUrl('post/read')
产生/index.php/post/read
。请注意,没有规则适用。
总之,当使用createUrl生成网址,路线和传递给该方法的GET参数被用来决定哪些网址规则适用。如果关联规则中的每个参数可以在GET参数找到的,将被传递给createUrl ,如果路线的规则也匹配路线参数,规则将用来生成网址。
Tags: xweibo, iweibo, yii, sablog
PHP | 评论:1
| 阅读:19947