Yii framework documentation and api manual

When you wrote your php code with yii framewok,you must look the reference.so i try to find yii framework documentation and api manual.
Yii api manual is a chm file,so you can download it ,and you can write code for the reference.(又在乱写了。。。)
Yii documentation that gives the definitive description of every feature of Yii and is being constantly updated to reflect the latest enhancements and changes.it’s showed on Yii frontpage.This tutorial release also available by some languages.Chinese also among them.
if you want to find chinese manual ,please type the url:

http://www.yiiframework.com/doc/guide/zh_cn/index

and

http://dreamneverfall.cn/yiidoc/index.htm.

And you can also be downloaded in PDF format.
Over…

php-curl manual

curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧。详见参考手册。

以下关于此函数各项使用参数:

bool curl_setopt (int ch, string option, mixed value)

curl_setopt()函数将为一个CURL会话设置选项。option参数是你想要的设置,value是这个选项给定的值。

下列选项的值将被作为长整形使用(在option参数中指定):

* CURLOPT_INFILESIZE: 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。
* CURLOPT_VERBOSE: 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。
* CURLOPT_HEADER: 如果你想把一个头包含在输出中,设置这个选项为一个非零值。
* CURLOPT_NOPROGRESS: 如果你不会PHP为CURL传输显示一个进程条,设置这个选项为一个非零值。注意:PHP自动设置这个选项为非零值,你应该仅仅为了调试的目的来改变这个选项。
* CURLOPT_NOBODY: 如果你不想在输出中包含body部分,设置这个选项为一个非零值。
* CURLOPT_FAILONERROR: 如果你想让PHP在发生错误(HTTP代码返回大于等于300)时,不显示,设置这个选项为一人非零值。默认行为是返回一个正常页,忽略代码。
* CURLOPT_UPLOAD: 如果你想让PHP为上传做准备,设置这个选项为一个非零值。
* CURLOPT_POST: 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。
* CURLOPT_FTPLISTONLY: 设置这个选项为非零值,PHP将列出FTP的目录名列表。
* CURLOPT_FTPAPPEND: 设置这个选项为一个非零值,PHP将应用远程文件代替覆盖它。
* CURLOPT_NETRC: 设置这个选项为一个非零值,PHP将在你的 ~./netrc 文件中查找你要建立连接的远程站点的用户名及密码。
* CURLOPT_FOLLOWLOCATION: 设置这个选项为一个非零值(象 “Location: “)的头,服务器会把它当做HTTP头的一部分发送(注意这是递归的,PHP将发送形如 “Location: “的头)。
* CURLOPT_PUT: 设置这个选项为一个非零值去用HTTP上传一个文件。要上传这个文件必须设置CURLOPT_INFILE和CURLOPT_INFILESIZE选项.
* CURLOPT_MUTE: 设置这个选项为一个非零值,PHP对于CURL函数将完全沉默。
* CURLOPT_TIMEOUT: 设置一个长整形数,作为最大延续多少秒。
* CURLOPT_LOW_SPEED_LIMIT: 设置一个长整形数,控制传送多少字节。
* CURLOPT_LOW_SPEED_TIME: 设置一个长整形数,控制多少秒传送CURLOPT_LOW_SPEED_LIMIT规定的字节数。
* CURLOPT_RESUME_FROM: 传递一个包含字节偏移地址的长整形参数,(你想转移到的开始表单)。
* CURLOPT_SSLVERSION: 传递一个包含SSL版本的长参数。默认PHP将被它自己努力的确定,在更多的安全中你必须手工设置。
* CURLOPT_TIMECONDITION: 传递一个长参数,指定怎么处理CURLOPT_TIMEVALUE参数。你可以设置这个参数为TIMECOND_IFMODSINCE 或 TIMECOND_ISUNMODSINCE。这仅用于HTTP。
* CURLOPT_TIMEVALUE: 传递一个从1970-1-1开始到现在的秒数。这个时间将被CURLOPT_TIMEVALUE选项作为指定值使用,或被默认 TIMECOND_IFMODSINCE使用。

下列选项的值将被作为字符串:

* CURLOPT_URL: 这是你想用PHP取回的URL地址。你也可以在用curl_init()函数初始化时设置这个选项。
* CURLOPT_USERPWD: 传递一个形如[username]:[password]风格的字符串,作用PHP去连接。
* CURLOPT_PROXYUSERPWD: 传递一个形如[username]:[password] 格式的字符串去连接HTTP代理。
* CURLOPT_RANGE: 传递一个你想指定的范围。它应该是”X-Y”格式,X或Y是被除外的。HTTP传送同样支持几个间隔,用逗句来分隔(X-Y,N-M)。
* CURLOPT_POSTFIELDS: 传递一个作为HTTP “POST”操作的所有数据的字符串。
* CURLOPT_REFERER: 在HTTP请求中包含一个”referer”头的字符串。
* CURLOPT_USERAGENT: 在HTTP请求中包含一个”user-agent”头的字符串。
* CURLOPT_FTPPORT: 传递一个包含被ftp “POST”指令使用的IP地址。这个POST指令告诉远程服务器去连接我们指定的IP地址。这个字符串可以是一个IP地址,一个主机名,一个网络界面名 (在UNIX下),或是‘-’(使用系统默认IP地址)。
* CURLOPT_COOKIE: 传递一个包含HTTP cookie的头连接。
* CURLOPT_SSLCERT: 传递一个包含PEM格式证书的字符串。
* CURLOPT_SSLCERTPASSWD: 传递一个包含使用CURLOPT_SSLCERT证书必需的密码。
* CURLOPT_COOKIEFILE: 传递一个包含cookie数据的文件的名字的字符串。这个cookie文件可以是Netscape格式,或是堆存在文件中的HTTP风格的头。
* CURLOPT_CUSTOMREQUEST: 当进行HTTP请求时,传递一个字符被GET或HEAD使用。为进行DELETE或其它操作是有益的,更Pass a string to be used instead of GET or HEAD when doing an HTTP request. This is useful for doing or another, more obscure, HTTP request. 注意: 在确认你的服务器支持命令先不要去这样做。下列的选项要求一个文件描述(通过使用fopen()函数获得):
* CURLOPT_FILE: 这个文件将是你放置传送的输出文件,默认是STDOUT.
* CURLOPT_INFILE: 这个文件是你传送过来的输入文件。
* CURLOPT_WRITEHEADER: 这个文件写有你输出的头部分。
* CURLOPT_STDERR: 这个文件写有错误而不是stderr。用来获取需要登录的页面的例子,当前做法是每次或许都登录一次,有需要的人再做改进了.

If you want to look ennglish manual,you can find it from “http://cn.php.net/manual/en/curl.constants.php”,and example page is:http://www.neatcn.com/show-23-1.shtml.
The Chinese manual from php-curl ,copy from http://52037872.cn/blog/post/263

YUI Node and jQuery

The Node Utility provides an expressive way to collect, create, and manipulate DOM nodes. Each Node instance represents an underlying DOM node, and each NodeList represents a collection of DOM nodes. With Node, you can manage classNames (myNode.addClass(‘foo’)) and styles (myNode.setStyle(‘opacity’, 0.5)), create elements (Y.Node.create(‘< div id="foo" class="foo">< p>foo’)), and much more.[..sorry ,if i don't change the created html code,it will be showd HTML,not source]

Note: The method Y.get has been deprecated in favor of Y.one. The methods Node::query and Node::queryAll have been deprecated in favor of Node::one and Node::all. They still function as expected in this release, but support will be removed in a subsequent release.

The easiest way to include the source files for Node and its dependencies is to add the YUI seed file to your page, using the following script tag, and allow the YUI instance to download any additional files which may be required:


// Create new YUI instance, and populate it with the required modules
YUI().use('node', function(Y) {

    // Node available, and ready for use.

});
jQuery(function($){

});
(function($){

})(jQuery);

you can see the detail page on “http://developer.yahoo.com/yui/3/node/”
PS:
on the end ,i find a bug on jquery,please look these codes:


when i open this page on browser,it showed blank page.so i changed it


it’ok…

try to use Yii framework

i want to try use the framework named Yii,so i downloaded it .
It’s so easy to create a new project.
First,please edit yiic.bat on framework directory,and set PHP_COMMAND path.
Second.open yiic.bat on command line.if no paramters ,it will be show:

Yii command runner (based on Yii v1.1.1)
Usage: E:\www\htdocs\travel\yii\framework\yiic [parameters...]

The following commands are available:
– message
– shell
– webapp

To see individual command help, use the following:
E:\www\htdocs\travel\yii\framework\yiic help

Third.type yiic.bat webapp test,and type yes,yiic.bat created the project by name test.
//以后要学英文,越写越烂。
//请不要指责英文,本身就很烂,语法错误非常多,看得懂就行吧,当然能够告诉我语法错误也好,以后逐步改善吧,毕竟不写,永远也写不对。

Getting Started From YUI – YUI Global Object

YUI Global Object是YUI的基类,他是YUI的核心,也为YUI其他所有的方法、功能提供了接口 。如果你想使用YUI类库,必须要在全用YUI其他类库前就要加载它。YUI GlobalOject 就象一个种子,你所有的的模块都是基于它而制作的。所以我们必须要先加载他才成。

YUI Global Object从名字也能看出,他建了一个全局对象。它可以被实例化,而且他也为基于YUI的模块提供了约束条件。

YUI的使用也和jQuery差不多,只是部分的使用方式有点不一样。
这个是官方的简单例子,看得出使用方法确实和jQuery很相似

YUI().use('dd-drop', 'anim', function(Y) {
    // Y.DD is available
    // Y.Anim is available
});
$.each(function(){
    //xxx。 循环
});

YUI的一些模块名都比较简单,而且似乎名词还相当简单,还是一个缩写,如anim代表了Animation,dd代表了Drag-Drop,event代表了DOM Element Utilites。
YUI()也可以象jQuery一样,用简单的方式来进行调用。

var Y = YUI();
var j = jQuery.noConflict();

也可以通过add方法来添加自定义模块。

YUI().add('functionname',function(Y){
    Y.namespace('mynamespace');
    Y.mynamespace.Modes = function(){
         //expose API
    }
},{
    requires:['base']
});
jQuery.functionname = function($){
    //....在function的参数用$后,就可以在这个函数空间里采用了$
}

YUI在使用一些方法之前还可以使用一定的参数。或者说是临时改变运行的环境变量?官方的例子是这样的

YUI({
       lang: 'ko-KR,en-GB,zh-Hant-TW', // languages in order of preference
       base: '../../build/', // the base path to the YUI install.  Usually not needed because the default is the same base path as the yui.js include file
       charset: 'utf-8', // specify a charset for inserted nodes, default is utf-8
       loadOptional: true, // automatically load optional dependencies, default false
       combine: true, // use the Yahoo! CDN combo service for YUI resources, default is true unless 'base' has been changed
       filter: 'raw', // apply a filter to load the raw or debug version of YUI files
       timeout: 10000, // specify the amount of time to wait for a node to finish loading before aborting
       insertBefore: 'customstyles', // The insertion point for new nodes
       // one or more external modules that can be loaded along side of YUI.  This is the only pattern
       // that was supported in 3.0.0 for declaring external modules.  3.1.0 adds 'groups' support,
       // which is an easier way to define a group of modules.  See below.
       modules:  {
           yui2_yde_datasource: {
               fullpath: 'http://yui.yahooapis.com/combo?2.7.0/build/yahoo-dom-event/yahoo-dom-event.js&2.7.0/build/datasource/datasource-min.js'
           },
           yui_flot: {
               fullpath: 'http://bluesmoon.github.com/yui-flot/yui.flot.js',
               requires: ['yui2_yde_datasource']
           }
       },

       // one or more groups of modules which share the same base path and
       // combo service specification.
       groups: {
           // Note, while this is a valid way to load YUI2, 3.1.0 has intrinsic
           // YUI 2 loading built in.  See the examples to learn how to use
           // this feature.
           yui2: {
               combine: true,
               base: 'http://yui.yahooapis.com/2.8.0r4/build/',
               comboBase: 'http://yui.yahooapis.com/combo?',
               root: '2.8.0r4/build/',
               modules:  { // one or more external modules that can be loaded along side of YUI
                   yui2_yde: {
                       path: "yahoo-dom-event/yahoo-dom-event.js"
                   },
                   yui2_anim: {
                       path: "animation/animation.js",
                       requires: ['yui2_yde']
                   }
               }
           }
       }
}).use('dd', 'yui_flot', function(Y) {
    // All YUI modules required to get drag and drop to work are now loaded.
});

初次学习。也是初步了解,参考页面为:http://developer.yahoo.com/yui/3/yui/,以后我会更加多次使用,因为我觉得YUI有两方面集成的不错,YUICSS做页面还是很不错的。而我又不会做页面所以。。。
当然easyUI也考虑在用。

array search

其实这是并不能算是一个search的方法,但我写这个方法是为了快速定位到数组里的key,以返回相应的值。

例如:

$arr = array(
    'a' => array(
        'b' => array(
            'c' => array(
                'd'
            )
        )
    ),
    'e' => array(
        'f' => array(
            'g' => array(
                'h'
            ),
            'i' => array(
                'j'
            )
        )
    )
);

象这样的数组,如果要取$arr['a']['b']['c']这样的值,写起来有点复杂,于是我这样写了一个函数

function search( $keys , $arr ){
    if(!is_array($arr) && !is_object($arr)){
        return ;
    }
    $keys = explode("." , $keys );
    $_err = false;
    foreach($keys as $key){
        if(isset($arr[$key])){
            $arr = $arr[$key];
        }else{
            $_err = true;
            break;
        }
    }
    if($_err == true)return ;
    return $arr;
}

这样就很好办了。。直接$e = search(“a.b.c” , $arr);
就可以返回值了

jQuery中10个非常有用的遍历函数

使用jQuery,可以很容易的选择HTML元素。但有些时候,在HTML结构较为复杂时,提炼我们选择的元素就是一件麻烦的事情。在这篇教程中,我们将探讨十种方法去精炼和扩展我们将要操作的集合。

HTML

首先,让我们看看下图显示的简单的页面,通过这个教程我们将选择这些元素。

1. div.container是包裹元素;
2. div.photo、div.title、div.rating是div.container的直接子级;
3. 每个div.star是div.rating的子级;
4. 当div.satr的class为“on”时,它是一个完整的star。

为什么要遍历?
“为什么我们要进一步提炼一系列元素,难道是jQuery选择语法不够强大?”
好,让我们从示例开始。在上面提到的网页中,当一个star被点击时,我们需要给它以及左边 的每个star添加class“on”。与此同时,我们要改变所有star父元素的背景颜色,因此,我们的代码如下:

$('.star').click(function(){
    $(this).addClass('on');
//  如何选取当前对象的父元素?
//  如何获得当前star左侧所有的star?
});

在第二行,我们得到了我们点击的当前对象。但是,如何得到stars的父级?即 div.rating。但是,在一个页面中,有很多div.rating。哪一个是我们想要的?如何获得“this”左边所有的star?

可喜的是,jQuery允许我们基于这些基层关系,在现存集合的基础上获得新的元素集合。而 这些正是遍历函数发挥作用的地方。

1、children

这个函数得到一组元素的直接子级。

在很多情况下会很方便,看看下面这张图:

  1. 开始的时候容器中的star全部被选择;
  2. 给children()传递一个选择表达式将选择结果缩小至选中的star;
  3. 如果chilidren()每接受任何参数,将返回所有直接子级;
  4. 不返回孙级元素。

2、filter

这个函数通过传递的选择表达式从一个集合中过滤元素。任何不匹配这个表达式的元素将从选择的 集合中移除。

下面的这个例子直截了当。从 5个star中过滤出class为“on”的star。

3、not

与filter恰恰相反,not()从集合中移除匹配的元素。

看下面这个例子。偶数列的star从选择集合中移除,留下的是奇数行的star。

“ 注意:’Even’和’odd’选择器是从0开始的,从0开始计数,不是从1。”

4、add

如果我们想在集合中增加一些元素怎么办?add()函数正是做这件事的。

同样简单明了,photo盒子被添加到集合中。

5、slice

有时候,我们需要根据元素在集合的位置获取集合的子集。sliece()正是做这个的。

  1. 第一个参数是从零开始的第一个元素的位置,它包含在返回的片段中;
  2. 第二个参数是从零开始的第一个元素的索引。不包含在返回的片段中。如果省略,将延伸至集合的末尾;
  3. 所以,slice(0,2)将选取前两个star。


6、parent

parent()函数选取一系列元素的直接父级。

正如下图所示,第一个star的直接父级被选中。非常方便,应当指出,它仅仅返回直接父级, 为什么很奇特?因为没有祖父元素或祖先元素被选中。

7、parents

这是复数形式,parents()选择集合的所有祖先元素。我的意思是所有祖先元素包括直接 父级到“body”和“html”元素。所以最好通过传递表达式缩小选择结果。

通过给parents()传递.container参数,div.container将被选 中,它实际上第一个star的祖父。

8、siblings

这个函数选择一组元素的所有兄弟姐妹,传递一个表达式可以筛选结果。

看看这个例子:

  1. 谁是第一个star的兄弟节点?其它的四个,对不?
  2. 如图所示,“odd”的节点被选中。索引是从零开始的,看看下面star的红色数字。

9、prev & prevAll

prev()函数选择前一个兄弟节点。prevAll()选择一个元素集合前面所有的兄弟节 点。

如果你正在构建一个星级部件,这将相当方便。第三个star前面的兄弟节点被选中。

10、next & nextAll

这些函数与prev和prevAll工作方式相同,不过它选择的是下一个兄弟姐妹。

结论

最后,让我们来看看如何利用这些函数来解决现实世界中令我们头痛的问题。

$('.star').click(function(){
    $(this).addClass('on');
//  如何取得当前对象的父级?
    $(this).parent().addClass('rated');
//  如何获得当前对象左侧的star?
    $(this).prevAll().addClass('on');
    $(this).nextAll().removeClass('on');
});

这就是这篇教程中早期提到的问题,对吗?在这几行代码中我们使用了这几个遍历函数。

  1. 在第5行,看看parent()函数,啊哈,真简单。
  2. 在第8行和9行,prevAll()和nextAll().选择填充的star和空的star。

现在,遍历函数是做么的方便。当在一起使用时,它们将更加强大。也就是说,一个函数的输出是 另一个函数的输入,它们是链式的。

谢谢你的拜读,希望这篇教程在你通过jQuery选择html元素时更容易。你有什么想法? 哪个遍历函数是我们遗漏的?

原文地址:10 Really Helpful Traversing Functions in jQuery

转载地址:http://www.denisdeng.com/?p=695

很不错的文章。虽然我现在已经相当熟悉了这些选择器的功能,但用来看看还是很不错的。。

三篇关于javascript中delete的文章

这段时间,好象很多人对javascript的delete操作符非常感兴趣。我是在短短的几天内就发现了三篇文章 ,稍后会在文章结束时一一列出。

三篇文章都介绍了delete的出现的三种情况:

1、全局变量
2、局部变量
3、Eval中处理的变量

也都提到了Execution context,Variable Object和Activation object,由于在eval中代码里的变量会变成当前调用上下文的Variable object的属性.Eval代码使用它被调用的上下文作为自己执行的上下文.,所以对于这个就没有特别的介绍。

然后他们都相对于对象的属性是否可以被删除作了一些介绍。

我不想多多的介绍很多,毕竟这个东西,还是在实践中才能够记得住。而且他在不同的浏览器下效果也却都不一样,就象其中一个作者做的测试。

 window.flower=1; // delete flower 时对象会不支持此操作
// 我们可以用
with(window){flower=1};
//然后
delete flower
//记住是delete flower,不是delete window.flower ,ie不允许那么做)
// 这样 window.flower就被删除了  :)

很有意思的代码吧?所以我把三篇文章集中了一下,到时候大家可以看看。

参考引用:

1、理解delete的总结(这是参考2的总结文章,作者为同一人)

2、深入理解JavaScript中的delete操作

3、javascript delete

【更新】为防止这三篇文章哪天就不能访问了,所以我直接另存为html文件,保证以后可以查看,请点击下载

根据日期取得当前的星期

PHP的date函数是有时间范围区间的,即只能从1970~2038年,因此在这个区间范围之外的算法都是不准的。那倒底怎么算呢?其实是有一个公式的:

蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公 式中的符号含义如下,w:星期;c:世纪-1;y:年(两位数);m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的 13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算);d:日;[ ]代表取整,即只要整数部分。(C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)

算出来的W除以7,余数是几就是星期几。如果余数是0,则为星期日。【膘叔备注,如果小于0,则先+7再取余数

以2049年10月1日(100周年国庆)为例,用蔡勒(Zeller)公式进行计算,过程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54 (除以7余5)
即2049年10月1日(100周年国庆)是星期5。

你的生日(出生时、今年、明年)是星期几?不妨试一试。
但其实上面的并不是特别准,我根据上面的公式写了一段代码。。。

//蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
function getDayofWeek ( $datetime , $delimiter = '-' )
{
        //其实这个explode,可以参考split函数,它的分隔支持类似正则的批量处理,比如split("[/.-]",$datetime),可以查一下手册
	list($year,$month,$day) = explode( $delimiter, $datetime );
	if(strLen( $year ) == 2 && $year < 50){
		$century = 20;	//世纪数为当前世纪数-1
	}else{
		$century = subStr( $year, 0,2 ) ;
		$year = subStr( $year, -2 );
	}
	$week = ( $year + floor($year/4) + floor($century / 4) - 2*$century + floor( 26*($month+1)/10)+$day-1 ) % 7; //floor($year/4),代表不取小数点后的值,即,不四舍五入
	return ($week + 7 ) % 7;	//如果有负数出现,则转为正数再取模,就是正常的星期了。
}

echo( getDayofWeek( '1999-05-02') );

上面部分文字来自于http://www.neatstudio.com/show-1174-1.shtml

jQuery图片自动缩放

半年前写的代码,现在看看也不算太差就放上来了

$(document).ready(function(){
    $('div').autoResize({height:50});  //用法
});  

jQuery.fn.autoResize = function(options)
{
    var opts = {
        'width' : 400,
        'height': 300
    }
    var opt = $.extend(true, {},opts,options || {});
    width = opt.width;
    height = opt.height;
    $('img',this).each(function(){
        var image = new Image();
        image.src = $(this).attr('src');
        //开始检查图片
        if(image.width > 0 && image.height > 0 ){
            var image_rate = 1;
            if( (width / image.width) < (height / image.height)){
                image_rate = width / image.width ;
            }else{
                image_rate = height / image.height ;
            }
            if ( image_rate <= 1){
                $(this).width(image.width * image_rate);
                $(this).height(image.height * image_rate);
            }
        }
    });
}

用法也写在上面了。可以直接使用。。。