手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:yii

Yii的Euploadify插件使用

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

Yii CDbCriteria的常用方法

这是Yii CDbCriteria的一些笔记和常用用法:

PHP代码
  1. $criteria = new CDbCriteria;      
  2. $criteria->addCondition("id=1"); //查询条件,即where id = 1  
  3. $criteria->addInCondition('id'array(1,2,3,4,5)); //代表where id IN (1,23,,4,5,);  
  4. $criteria->addNotInCondition('id'array(1,2,3,4,5));//与上面正好相法,是NOT IN  
  5. $criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND  
  6. $criteria->addSearchCondition('name''分类');//搜索条件,其实代表了。。where name like '%分类%'  
  7. $criteria->addBetweenCondition('id', 1, 4);//between 1 and 4   
  8.   
  9. $criteria->compare('id', 1);    //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,  
  10.                                 //即如果第二个参数是数组就会调用addInCondition  
  11. /** 
  12.  * 传递变量 
  13.  */  
  14. $criteria->addCondition("id = :id");  
  15. $criteria->params[':id']=1;  
  16. /** 
  17.  * 一些public vars 
  18.  */  
  19. $criteria->select = 'id,parentid,name'//代表了要查询的字段,默认select='*';  
  20. $criteria->join = 'xxx'//连接表  
  21. $criteria->with = 'xxx'//调用relations   
  22. $criteria->limit = 10;    //取1条数据,如果小于0,则不作处理  
  23. $criteria->offset = 1;   //两条合并起来,则表示 limit 10 offset 1,或者代表了。limit 1,10  
  24. $criteria->order = 'xxx DESC,XXX ASC' ;//排序条件  
  25. $criteria->group = 'group 条件';  
  26. $criteria->having = 'having 条件 ';  
  27. $criteria->distinct = FALSE; //是否唯一查询   

有需要用到的可以查看一下。。。

Tags: yii, cdbcriteria

Yii笔记

本文纯粹是笔记,记下来怕忘了
1、终止当前操作,一般情况下是用exit,但用了Exit后无法看到trace的内容。所以要采用Yii::app()->end();
2、createUrl和createAbsoluteUrl,这两个函数,如果需要宣传自己的网址和内容,还是用createAbsoluteUrl函数吧。里面带了全部路径,而CreateUrl只会显示/home/xxx这样的路径,不利于SEO
3、widget默认的render无法使用theme中的模版,于是写一个类继承自CWidget,然后所有的widget都继承这个类,比如我这样实现了。。

PHP代码
  1. class Widget extends CWidget{  
  2.     private static $_viewPaths;  
  3.     /** 
  4.      * 重写CWidget中的getViewPath 
  5.      */  
  6.     public function getViewPath($checkTheme=false)  
  7.     {  
  8.         $className=get_class($this);  
  9.         if(isset(self::$_viewPaths[$className]))  
  10.             return self::$_viewPaths[$className];  
  11.         else  
  12.         {          
  13.             if($checkTheme && ($theme=Yii::app()->getTheme())!==null){  
  14.                 return self::$_viewPaths[$className] = $theme->getBasePath().DIRECTORY_SEPARATOR."widgets";  //这是我自己的路径
  15.             }  
  16.             $class=new ReflectionClass($className);  
  17.             return self::$_viewPaths[$className]=dirname($class->getFileName()).DIRECTORY_SEPARATOR.'views';              
  18.         }  
  19.     }  
  20. }  

覆写父类方法,使得getViewPath找到我指定的目录,我目录在themes/classic/下建了一个widgets的目录。这样的好处很多。。而且对于CSS和JS等路径都可以和标准视图一致

先写这么多。。。

Tags: yii

怒了,QueryCache

怒了。真的怒了。。。。
前两天我还一直在想,怎么让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/

  1. RESTful URL Support
  2. Query Caching
  3. Parameter Binding for Class-based Actions
  4. Seamless Client-side Validation
  5. Passing Parameters to Relational Named Scopes
  6. Using 'through' with HAS_MANY and HAS_ONE
  7. Using Transactions in DB Migration
  8. Registering and Using Custom Script Packages

好象,除了1、7我兴趣不是特别大,其它的几个都不错,原来的Actions中的Action无法绑定参数的,现在也直接可以用了,也就是说Action可以更容易的被移出。代码也更易分离了。4是客户端验证,原来还要在提交后到服务端验证,现在又方便一点了。。
其它的还是看看官方吧,不一定介绍了。

Tags: yii, querycache

闲下来的学习

最近,明显是空了很多,于是我看了一下以前的代码,再看看网上那些开源的代码,拿来与我自己曾经写的代码进行验证这样可以了解别人的优点。知道自己的缺点在哪里。

1、xweibo,这个玩意目前很流行,腾讯也出了个iweibo,反正说白了,如果你是用接口,那无非就那么点东西。根据接口拉拉数据,你也不用关系他们的数据结构和其他的代码等。当然如果你要整合到你自己的系统里就不是这么简单啦。所以,我在看xweibo是怎么个折腾法。。。。所幸,你看xweibo的index.php文件里,被注释了很多代码那就是xweibo的一些常用方法,看看就差不多了。。。

2、sablog for Yii前台基本完成,目前已经完成:文章列表、回复列表、标签云、标签云对应文章列表,首页,侧边栏也基本完成。待完成的有:友情链接页,文章内容页,高级搜索页,搜索结果页等(文章内容页里的东西最多,有考虑象以前想过的,本博客历史上的今天,关联文章,回复,等等,太多了。。当然还要考虑预留点广告位,方便自己塞广告。文章内容,也还得考虑那些程序的语法标签,附件,缩略图。。。。唉)

通过设置,现在的Url规则也尽量与原来一致,这样我如果切换的话,几乎就可以平移了。。

大小: 57.3 K
尺寸: 458 x 376
浏览: 1523 次
点击打开新窗口浏览全图

把官方这段贴上来,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