NeatCN(NeatStudio工作室) NeatStudio工作室

Getting Started From YUI – YUI Global Object

04.13.2010 · Posted in Javascript开发

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($){ ...

array search

04.08.2010 · Posted in PHP开发

其实这是并不能算是一个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 ...

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

04.06.2010 · Posted in Javascript开发

使用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 这个函数得到一组元素的直接子级。 在很多情况下会很方便,看看下面这张图: 开始的时候容器中的star全部被选择; 给children()传递一个选择表达式将选择结果缩小至选中的star; 如果chilidren()每接受任何参数,将返回所有直接子级; 不返回孙级元素。 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()正是做这个的。 第一个参数是从零开始的第一个元素的位置,它包含在返回的片段中; 第二个参数是从零开始的第一个元素的索引。不包含在返回的片段中。如果省略,将延伸至集合的末尾; 所以,slice(0,2)将选取前两个star。 6、parent parent()函数选取一系列元素的直接父级。 正如下图所示,第一个star的直接父级被选中。非常方便,应当指出,它仅仅返回直接父级, 为什么很奇特?因为没有祖父元素或祖先元素被选中。 ...

三篇关于javascript中delete的文章

04.02.2010 · Posted in Javascript开发

这段时间,好象很多人对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文件,保证以后可以查看,请点击下载 ...

根据日期取得当前的星期

03.30.2010 · Posted in PHP开发

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, ...

jQuery图片自动缩放

03.28.2010 · Posted in Javascript开发

半年前写的代码,现在看看也不算太差就放上来了 $(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( ...

为Zend的table加上prefix

03.24.2010 · Posted in PHP开发

我不知道别人是怎么做的。我做的很累啊。。。明明在继承Zend_Db_Table_Abstract的类中打印getAdapter方法时,有_config变量,但是,它是protected的,没有找到合适的方法调用。 于是没办法。到bootstrap.php文件里加了一个方法。 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected $_bootConfig; public function __construct( $application ) { parent::__construct($application); $this->_bootConfig = new Zend_Config_Ini( APPLICATION_PATH . '/configs/application.ini' ); Zend_Registry::set('config', $this->_bootConfig); } } 这样。我在bootstrap中也能直接使用 $this->_bootConfig 的变量。因为我使用了smarty,而且用的不是继承的方法。所以直接在__construct方法中把config变量赋值出来也有一定的方便之处。 就象这样: public function _initView() { require_once ('Smarty/Smarty.class.php'); $tpl = new Smarty(); $tplSettings = $this->_bootConfig->staging->smarty->toArray(); foreach( $tplSettings as $key=>$value){ $tpl->$key = $value; } Zend_Registry::set( 'tpl', ...

简单学习一下Zend_ACL

03.24.2010 · Posted in PHP开发

如果不想用rbac那么,简单权限管理ACL,应该是最方便的了。简要说一下原理吧。。 这个文件是放在/application/models/目录下的Acl.php,调用的时候就直接 $identity = Zend_Auth::getInstance()->getIdentity(); $acl = new Application_Model_Acl(); //然后判断 if( $acl->isAllowed( $identity['Role'] , 'xxxxx' ,'yyyy' )); //xxxx是controller名,yyyy是controller里的action名称。不用额外加action。。。 class Application_Model_Acl extends Zend_Acl { public function __construct() { /* * 第一次添加权限 "guest" ,支持查看所有的内容 */ $this->addRole(new Zend_Acl_Role('guest')); /* * 添加 'user' 组权限,权限大于 guest * 用户组能够发表回复 */ $this->addRole(new Zend_Acl_Role('user'), 'guest'); /* * 添加一个auth组 * auth用户权限基于user,并且可以发表文章 */ $this->addRole(new Zend_Acl_Role('auth'), ...

QeePHP中的优秀函数(三)

03.22.2010 · Posted in PHP开发

这几个函数还是来自于QeePHP的核心类Q中。不过,我是自认为,我的configure类有部分写的比他好,不过我没有考虑删除之类的。呵呵。 /** * 获取指定的设置内容 * * $option 参数指定要获取的设置名。 * 如果设置中找不到指定的选项,则返回由 $default 参数指定的值。 * * @code php * $option_value = Q::ini('my_option'); * @endcode * * 对于层次化的设置信息,可以通过在 $option 中使用“/”符号来指定。 * * 例如有一个名为 option_group 的设置项,其中包含三个子项目。 * 现在要查询其中的 my_option 设置项的内容。 * * @code php * // +--- option_group * // +-- my_option = this is my_option * // +-- ...

QeePHP中的优秀函数(二)

03.21.2010 · Posted in PHP开发

这两个函数来自于Helper_Array,我觉得是非常常用的方法,功能也比较强大。适合大家使用。 /** * 将一个平面的二维数组按照指定的字段转换为树状结构 * * 用法: * @code php * $rows = array( * array('id' => 1, 'value' => '1-1', 'parent' => 0), * array('id' => 2, 'value' => '2-1', 'parent' => 0), * array('id' => 3, 'value' => '3-1', 'parent' => 0), * * array('id' => 7, 'value' => '2-1-1', 'parent' => 2), ...