|
02 2010 档案
摘要:1.1中增加了表单构建器CForm,对于表单构建器大家总是褒贬不一,有的人认为简化了工作,有的人认为把原来简单的事情复杂化了。个人认为对于构建不需要有复杂界面修饰布局的表单,表单构建器还是不错的选择,这还增加了表单的复用性。让我们看看代码,CForm是如何工作的:// action:$config = array( 'action' => array('site/login'), 'meth...
阅读全文
摘要:Yii的使用者都知道Yii是一个基于Component开发的框架,我们平时用到的Controller,Model等其实都是Component,因此我们也可以利用Component的特性来为我们的model添加一些功能。平时我们建立的user表总是会涉及到first_name, last_name, 而在系统中我们要用到的却经常是完整人名。//action$user = User::model()-...
阅读全文
摘要:10十二/090Yii: 1.1 scenario在验证中的变化1.1中对CActiveRecord中的scenario作了一些改变1.0.x的代码$user = new User;if(isset($_POST['User'])) { $user->attributes = $_POST['User']; $user->validate('register'); }在1.1以后已经不...
阅读全文
摘要:大家都知道Yii里为我们提供了layout效果,我们可以把一个view嵌入事先设计好的layout。但随着网站设计越来越多变,越来越复杂,光光layout内一个$content 变量在载入view似乎有时候并不能满足我们的需求。如果页面中有好几个地方需要时时变动呢? 没关系, Yii还为我们提供了Clip这个方法,这个其实有点类似与Django中的block。比如现在我们需要构建一个布局,左边是主...
阅读全文
摘要:最近在社区成员的强烈要求下,qiang也开始开发了Yii的GridView widget。根据qiang的意思此widget应该会在1.1rc的时候发布。不过今天当我更新svn的时候发现这个插件已经出现在zii的插件包中了,新东西当然都试下,接下来让我们看看 CGridView是怎么工作的。首先通过下面这段代码,我们在action中生成了一个dataProvider可以提供给view中的widge...
阅读全文
摘要:今天当我翻阅Yii 代码的时候发现qiang还给我们提供了CDetailView这个类来完成类似的功能。两者到底有什么区别呢? 我们都知道 CGridView是根据数据表结构来生成我们需要的数据,而CDetailView是根据我们平时一直用到的model实例来生成数据。同样以上一个列子来写,看看有什么不同:$criteria = new CDbCriteria;$criteria->sele...
阅读全文
摘要:Yii已经为我们提供了很好的控制台功能,我们可以利用控制台创建webapp,controller, action等来加速我们的开发。同时我们还可以自己来扩展控制台应用(console application)来满足我们更多的项目需求。console app 和 web app 类似,我们需要一个入口文件,默认的情况我们可以在protected目录发现这些文件(yiic.php, yiic, yii...
阅读全文
摘要:在 yii framework 中, 作者已经方便的为我们整合了一系列非常有用的 js 类库。当我们调用相关的 function 或者 widget 时, 框架会建立一个核心 js 文件目录的副本, 放到 assets/xxxx 临时目录下,然后自动为我们加载需要的 js 文件。怎么样? 是不是这个临时目录的位置很别扭? 那我们现在就来看一下如何修改这个核心 js目录的位置。首先在我们的项目中把 ...
阅读全文
摘要:Yii framework 默认情况下并没有为数据表设置 prefix 的功能。 根据作者 qiang 的说话是这个功能并不是必须的,需要的用户可以自己建立扩展。确实是这样,在 Yii framework 完全 OO 的结构下,我们可以很方便的来实现表前缀扩展功能。接下来让我们看看如何来实现:首先在我们的配置文件中 /wwwroot/protected/config/main.php 中添加下面的...
阅读全文
摘要:验证码是现在很多网站增加安全性的一种方法, 在Yii Framework中,作者已经内设了CCaptcha扩展来实现验证码功能,而我们需要知道的只是如何去使用他。1. CCaptcha扩展需要有CCaptchaAction的支持,所以我们要在controller中集成actions这个方法,添加下列代码,让当前的controller支持CCaptchaAction。public function ...
阅读全文
摘要:在 Yii framework 的论坛有人问,如何用 yii 的方式来生成一个下拉选项。 在这里就介绍下方法。首先我们可以通过 CHtml 帮助类中的 listData() 函数来帮助我们生成一个下拉选项所需要的数组。然后再通过同样是 CHtml 帮助类中的 dropDownList() 或者 activeDropDownList() 函数来生成我们需要的下拉选项。比如我们现在有一个 User M...
阅读全文
摘要:使用主题不需要编写任何代码,我们的blog应用是支持主题的。要想使用一个主题,需要先开发一个主题,主要是为其编写一些自定义的视图文件。比如使用一个名字为classic的拥有不同页面布局主题。我们需要在blog/themes/classic/views/layouts/main.php建立布局的视图文件。我们同样也需要修改应用的配置文件,来指出我们使用主题classic。returnarray(.....
阅读全文
摘要:一个WEB应用产品,需要对各种错误记录复杂的日志。在我们的blog应用中,我们将记录在运行中产生的错误,这些错误可能是因为程序本身的错误或者是用户错误的应用,记录这些错误可以帮助我们进一步改善我们的blog应用。我们通过如下修改应用的配置文件以使错误日志生效returnarray('preload'=>array('log'),......'components'=>array('lo...
阅读全文
摘要:我们的blog应用使用yii提供的模板来显示各种错误。因为风格和措辞都和我们期望的不尽相同,所以我们需要定制这些模板。因此我们在blog/protected/views/system目录下建立一套视图文件。首先我们建立error.php文件。如果一些特殊的模板不能使用,那么它将作为默认模板来先是各种错误。因为它会在错误产生时被加载,所以它不应该包含复杂的php逻辑,以免产生进一步的错误,同时也要注...
阅读全文
摘要:我们的blog应用就要完成了,在发布之前,我们需要做一些调整更换主页我们把文章列表页作为主页。如下修改应用的配置文件returnarray(......'defaultController'=>'post',......);因为PostController已经声明list是它的默认方法,当我们访问应用的首页是,我们将会看到post controller的list方法产生的结果。启用模式缓存因...
阅读全文
摘要:本节中我们建立最新评论模块,显示最新发布的评论列表建立RecentComments类我们在文件blog/protected/components/RecentComments.php中建立RecentComments类。内容如下:<?phpclassRecentCommentsextendsPortlet{public$title='RecentComments';publicfunctio...
阅读全文
摘要:目前访问我们各个页面的url地址看上去比较丑陋,比如说文章显式页面的地址是/index.php?r=post/show&id=1在本节中,我们讲述如何使页面地址看上去更漂亮,对SEO更友好。我们目标是在应用中可以使用如下的地址:/index.php/tag/yii: 所有有使用yii标签的文章列表页面;/index.php/posts: 最新文章的列表页面/index.php/post/1...
阅读全文
摘要:我们建立的应用框架已经自带了一个登陆页面。本节中,我们把这个页面转为一个名字为UserLogin的登陆模块。当用户未登录时将会在侧边栏出现。用户登陆后消失,同时先前开发的用户菜单项显示出来。建立UserLogin类像用户菜单模块一样。我们在blog/protected/components/UserLogin.php建立的UserLogin类,里面包含了用户登陆的逻辑处理,代码如下:<?ph...
阅读全文
摘要:这将显示一个最常用的文章tag的列表,根据使用程度,对每个tag使用不同的样式进行修饰。创建TagCloud类我们在文件/blog/protected/components/TagCloud.php中创建TagCloud类,内容如下:<?phpclassTagCloudextendsPortlet{public$title='Tags';publicfunctiongetTagWeights...
阅读全文
摘要:本节中我们将开发第一个portlet——用户菜单portlet,对已经通过验证的登录用户显示一个菜单列表。包含以下四个菜单:发布评论:到未发布评论列表的超链接添加文章:到添加文章的超链接管理文章:到文章管理页面的超链接注销:注销当前用户的链接按钮创建UserMenu类我们创建UserMenu类来描绘用户菜单的逻辑部分。保存在blog/protected/components...
阅读全文
摘要:评论的管理包括修改、删除和发布。这些操作由CommentController类中的actions实现。修改和删除评论yiic生成的更新和删除代码并不用怎么修改。因为我们支持评论在更新前进行预览,我们只需要如下修改CommentController的actionUpdate()方法。publicfunctionactionUpdate(){$comment=$this->loadComment...
阅读全文
摘要:像最新评论列表和tag列表等,用Portlet实现是个不错的选择。一个Portlet就是一个可插入的用户界面组件,显示为聚合的一段HTML片段。在本节中,我们讲述了如何为我们的blog应用。建立portlet构架根据需求分析,我们需要四个不同的 portlet(为方便,以下翻译为模块)。分别是登陆,用户菜单,tag列表和最新评论。这些模块(portlet)会在每个页面的侧边栏显示。建立portle...
阅读全文
摘要:像文章模块一样,我们需要完善评论模块的rules(), relations() 和 safeAttributes() 方法,另外我们还需要修改attributeLabels()方法,来为一些属性定义显示标签修改rules()方法我们首先修改由Yiic工具生成的验证规则,评论使用如下的验证规则publicfunctionrules(){returnarray(array('author,email,...
阅读全文
摘要:本节中我们实现了评论的添加和显示显示评论我们采用文章的显示页面来添加和显示评论。在显示完正文之后我们显示评论的列表和添加评论的提交表单。为了在文章显示页面显示评论列表,我们如下修改PostController的actionShow()方法。publicfunctionactionShow(){$post=$this->loadPost();$this->render('show',ar...
阅读全文
摘要:文章管理主要涉及到把文章列表在管理页面显示,和删除操作。分别由admin操作和delete操作实现。由yiic生成的代码并不需要太大的修改。下面我们主要解释这两个操作是怎么实现的。在table中显示文章列表admin操作在表格中显示所有的文章的列表(包括发布的和没有发布的)。表格有许多列,并提供分页。下面是PostController中的actionAdmin()方法publicfunctiona...
阅读全文
摘要:我们已经修改好了post model。还需要调整一下PostController控制器的视图(view)和动作(action)。在本节中我们首先完善controller中进行CRUD操作的权限。然后完善添加和更新操作。最后实现文章的预览。操作权限第一件事情便是完善访问权限,因为用Yiic工具生成的并不是我们需要的。我们如下修改/wwwroot/blog/protected/controllers/...
阅读全文
摘要:在我们blog中,文章可能显示在列表中或者单个显示。前一个由list动作(action)处理,后一个由show动作(action)处理。在本节中我们按照需求修改完善这两个操作完善显示操作显示操作由PostController的actionShow()方法处理数据,由视图文件blog/protected/views/post/show.php展示页面。下面是PostController中的显示操作的...
阅读全文
摘要:由yiic工具生成的文章模块主要有以下三个地方需要完善:rules()方法:模块属性的验证规则。也就是表中数据的验证规则relations()方法 :各个模块的相互关系,也就是各个表的相互关系。safeAttributes()方法:允许批量赋值的属性。模块有许多和数据表中字段对应的属性。属性可以显式的通过类的变量进行声明,也可以隐式的不采用任何声明。也就是可以把属性都作为变量声明出来,也可以不进行...
阅读全文
摘要:我们完成了第一个阶段,让我们总结一下目前为止我们完成的工作。我们规划要实现的需求安装了yii framework生成了一个应用的框架设计并建立了数据库修改程序的配置文件以连接到数据库为文章和评论生成基本的CRUD操作完善了用户验证对于这个新项目,在第一个阶段中大多数的时间我们花费在了setp1和4上。尽管生成代码对于数据表有着完善的CRUD功能,在实际应用中也他们往往需要被修改。因此在接下来的两个...
阅读全文
摘要:增加、显示、修改、删除是持久化数据的四个基本的操作,在我们的应用程序中。主要任务就是对文章和评论实现这些基本的操作。在本节中,我们使用Yiic工具来完成这个工作。这个过程往往被叫做脚手架。开启命令行输入:% /wwwroot/yii/framework/yiic shell /wwwroot/blog/index.phpYii Interactive Tool v1.0Please type 'h...
阅读全文
摘要:我们的blog应用要区分系统用户和访客的不同身份。所以需要实现用户的验证部分。或许你已经看到系统提供了一个用户验证,通过检查admin和demo的用户名密码。在这节中我们修改这段代码,让用户验证根据User表里的数据进行验证。用户验证是由实现了IUserIdentity接口的的一个类来实现的。我们的应用架构中使用类UserIdentity来实现此目标.该文件存放在/wwwroot/blog/pro...
阅读全文
摘要:本节中我们将建立blog的数据库,以及配置应用程序连接到数据库。建立数据库我们选择建立SQLite数据库,Because the database support in Yii is built on top of PDO,我们可以方便的切换到不同类型的数据库管理系统(比如 Mysql PostgreSQL)而不需要修改程序的代码。我们可以在目录/wwwroot/blog/protected/da...
阅读全文
摘要:通过以上分析,我们认为需要建四个表来存储用户、文章、评论和tag用户表(User) 保存用户信息 包括用户名和密码文章表(Post) 保存文章的信息。主要包括以下内容标题(title):必须。内容(content):必须。使用Markdown 格式状态(status):必须。可以是一下个是之一 草稿、发布、存档tags(tags):可选,文章的tags以逗号分割。评论表(Comment):存储评论...
阅读全文
摘要:Yii安装最后更新 2009-07-15 23:08:20在这一节中,我们用Yii创建了一个应用的基本框架作为起点。为方便起见,我们假定WEB服务的根目录为/wwwroot。对应的访问地址为http://www.example.com/安装我们首先安装Yii framework。从yiiframework获取Yii压缩包,将其解压到目录/wwwroot/yii,再次检查,确保目录/wwwroot...
阅读全文
摘要:我们准备开发的blog是个单用户系统。系统的用户应具有以下功能:登陆、注销建立、更新、删除文章文章的发布和取消发布批准或者删除评论其他用户作为游客,可进行以下操作阅读文章添加评论根据以上需求系统应包括:系统首页应该有一个最新文章的列表如果有10篇以上的文章应该分页显示显示文章的时候应同时显示相关评论显示文章的时候应同时显示对应的tag系统应显示tag列表,并标明它们使用的频率系统应显示最新的评论列...
阅读全文
摘要:PERCONA PERFORMANCE CONFERENCE 2009上,来自雅虎的几位工程师带来了一篇”Efficient Pagination Using MySQL“的报告,有很多亮点,本文是在原文基础上的进一步延伸。首先看一下分页的基本原理:mysql> explain SELECT * FROM message ORDER BY id DESC LIMIT ...
阅读全文
摘要:查询:MySQL: SELECT * FROM userMongo: db.user.find()MySQL: SELECT * FROM user WHERE name = 'starlee'Mongo: db.user.find({'name' : 'starlee'})插入:MySQL: INSERT INOT user (`name`, `age`) values ('starlee',2...
阅读全文
摘要:发现包括IIS在内的大多数处理服务器,都是默认不支持shtml的,nginx支持shtml的方法为:在nginx.conf配置文件,添加:ssi on;ssi_silent_errors on;ssi_types text/shtml;然后保存,重启nginx即可。
阅读全文
摘要:Nginx从0.7.48版本开始,支持了类似Squid的缓存功能。这个缓存是把URL及相关组合当作Key,用md5编码哈希后保存在硬盘上,所以它 可以支持任意URL链接,同时也支持404/301/302这样的非200状态码。虽然目前官方的Nginx Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面,但是,通过一个第三方的Nginx 模块...
阅读全文
摘要:正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行flag标记有:* last 相当于Apache里的[L]标记,表示完成rewrite* br...
阅读全文
摘要:转自:http://www.ccvita.com/306.html写在前头偶然之间看到本文的中英文对照版本,感觉看起来不是很方便,于是花费了半个小时的时间,仔细整理出了独立的中文版本,并记录下来。协议memcached 的客户端使用TCP链接 与 服务器通讯。(UDP接口也同样有效,参考后文的 “UDP协议” )一个运行中的memcached服务器监视一些(可设置)端口。客...
阅读全文
摘要:头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:leftrightcenter 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subna...
阅读全文
摘要:用户本身行为属性: 1,年龄 2,性别 3,登陆属性(时间,登陆页面等) 4,硬件环境属性 5,用户登陆出错率 6,用户登陆弹出率 ——————————————————&...
阅读全文
摘要:<!–弹出页–><styletype="text/css"><!–.STYLE1{font-size:12px}.yangshia:link,.yangshia:visited{color:#333333;}.yangshia:linka:hover{color:#333333;}–></style>&...
阅读全文
摘要:<scripttype="text/javascript">varIndex={};Index.DOM={fade:function(obj){varDOMObj=document.getElementById(obj);if(DOMObj==null||DOMObj==undefined)return;varop=Number(DOMObj.getAttribute("opacity...
阅读全文
摘要:1.把好玩的flash游戏下载,2.然后把swf文件转成fla文件,3.进行修改,4.发布.软件需求:1.SWFDECOMPILER(可在sothinkhttp://www.sothink.com/product/flashdecompiler/download.htm下载试用版,或是在网上找绿色版本)2.flashmx2004或以上(建议使用FLASH8版本)详细说明:(初学者,最好找一些比较简...
阅读全文
摘要:先回顾一下as2中相关的解决办法相信大部分人用的都是LoadVars类吧1varxianshi_lv=newLoadVars();2xianshi_lv.bianliang1="变量一";3xianshi_lv.bianliang2="变量二";4xianshi_lv.bianliang3="变量三";5xianshi_lv.sendAndLoad("http://10.7.87.222/show...
阅读全文
摘要:目前flash在各方个面的应用越来越广,而flash也不单只是注重自身绚丽的效果,也需要和外界程序交换数据,以实现更强大的功能,随着as3的到来,flash和外部交互的方式也越来越简便和合理化。今天就在这里谈谈as3和后台数据的交互(这里选择as3php架构,其他配置同理)。在as3里,原来的loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoader,UR...
阅读全文
摘要:下面,我以一个简单的《记账本》插件,来教大家,如何在目前UCenterHome中,制作一个标准的、不受UCH版本升级影响的通用插件。当然,以下的部分说明我尽量简单扼要,但是对于不懂PHP的人来说,可能还是一头雾水,毕竟制作插件,需要你有一定PHP基础。在这里,顺便鼓励大家抓紧学习一下PHP。制作一个不受UCH版本影响的插件,请遵循以下规范:1)不修改UCH的模板,而使用自己的模板(左侧导航菜单除外...
阅读全文
摘要:/**alimm是用于alimama.com的一个cssframeworks,之所以会有这样一个work,是基于下面几点:*一:我们有页面标准化的需求。IEOnly的时代已经成为历史,随着终端设备越来越多样化,我们需要具备主流平台适应性的前端实现;*二:我们有快速开发的需求。在一个站点的大致风格确定后,设计师的出页面速度会相对快些,这时,前端不应该成为整个项目里瓶颈;*三:我们有重构的需求。从代码...
阅读全文
摘要:/**定义alimm的常用布局*@modulelayout*@title常用布局样式*@desc提供常用的弹性布局,流体布局,固定宽度布局等,包括预定义的header、footer等*//*基础布局组*//*@groupbasiclayout*//**基础布局,thanksyaml.**|————————...
阅读全文
摘要:/**一些标记的字体重定义*@modulefont*@desc使这些标记在不同的浏览器内显示一致*//*将所有标记的字体默认为16px*/html*{font-size:100.01%}/*字体优先考虑Mac平台,随后是跨平台的serif字体*/body{font-size:75.00%;font-family:'lucidagrande',taho,verdana,'trebuchetms',s...
阅读全文
摘要:悉uchome里一些自带的通用方法可以使我们在对uchome二次开发或制作uchome插件的时候更加顺心应手。因为这些方法都是 uchome里早就定义好了的全局函数,在调用的时候只需要在文件头部加上function_common.php这个文件的引用就可以方便的调用这些方法了。但是如果你连最基本的php知识都不了解的话,那就需要慎用这些方法了。//SQL ADDSLASHESfunction sa...
阅读全文
摘要:《完美企业网站的101项指标》用来评测企业网站是否完美,这101项指标分为7个类别,它们分别是:· 内容·易于使用· 设计·安全· 性能·W3C标准·SEO我们把内容放在第一位,而把很多企业过分侧重的设计放在第三位,事实上,在一个企业网站中,内容代表整个站点80% 的价值,如果将上面的7个方面用于人,我们不妨这样理解一个完美的人...
阅读全文
摘要:难得国外有这样好的教程,我就用我仅有的英文水平翻译一下啦。建议将本博客的中栏和右栏隐藏后观看本文。转载请注明:译者:Joe译文来源:http://xiebiji.com/2009/09/design_a_beautiful_website/原文来自:Design a Beautiful Website From Scratch引言你是否曾经想过设计一个漂亮的网页,但是却不知道怎样入手?说实话,几年...
阅读全文
摘要:因为 ActionScript 是一种编程语言,所以,如果您首先了解几个通用的计算机编程概念,则会对您学习 ActionScript 很有帮助。计算机程序的用途首先,对计算机程序的概念及其用途有一个概念性的认识是非常有用的。计算机程序主要包括两个方面:程序是计算机执行的一系列指令或步骤。每一步最终都涉及到对某一段信息或数据的处理。通常认为,计算机程序只是您提供给计算机并让它逐步执行的指令列表。每个...
阅读全文
摘要:每个人都会赞同可用性是网站的一个很重要的方面的说法。无论你是在做一个作品集网站、网上商店还是网络应用,让你的页面对用户来说可以容易和快乐的使用是一个关键。这些年,很多人在网站和界面设计的很多方面完成了很多的研究,这些结论在帮助我们提高我们的工作方面很有价值。这里是能够帮助你提高你的网站的用户体验的10条有用的可用性结论和指南。Form标签最好放到字段的上面 UX Matters的一份研究发现表单中...
阅读全文
摘要:<script>function getInfo(){var s = "";s += " 网页可见区域宽:"+ document.body.clientWidth;s += " 网页可见区域高:"+ document.body.clientHeight;s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)";s += ...
阅读全文
摘要:转:http://www.srstudio.com.cn/a/221.软件准备我这里下的都是稳定版本,初学没办法,dev版出点问题,咋解决都不知道,如果是在生产环境下,那更不用考虑了,直接下稳定版下载jdk6 http://java.sun.com/javase/downloads/index.jsp下载nginx0.7.64 http://nginx.org/en/download.html下载...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/141qeePHP学习第六讲带演示 qeePHP模型的CURD在这段视频中,将以post模型作为示例。展示了使用qeePHP操作模型是一件非常容易的事情。第一步,创建数据库表ub_post,ub_是在配置中使用的约定字符。CREATE TABLE IF NOT EXISTS `ub_post` ( `post_i...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/132任何网站总是时刻处于敌意的攻击之下,然而攻击者的胜利通常不完全依赖于其技艺或智慧,往往是网站设计者的疏忽造成的。假如你正在设计一个网站,那么有三点特别值得你注意的:用户输入软件漏洞内部任务不管你是否认同,用户输入的确非常重要。假如你在使用qeePHP框架开发这个网站,那么你有福了,我将在下面介绍qeePHP框...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/126qeePHP有两种生成网站目录方法。第一种使用命令行,运行qeePHP中scripts目录的chili,生成网站目录。须要将php.exe添加至系统变量中才能使用。第二种则是本文讲途的使用websetup生成网站目录。它能生成两种程序目录。默认程序模板中,将public定要网站根目录,有利于保护其它执行文件不...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/128qeePHP学习第五讲带演示 qeePHP基本设置?qeePHP的设置很多,配置文件集中放在config里面,采用yaml格式,yaml有着比xml更简约易于使用的数据格式。config/boot.php是网站的关键:指定三种网站运行模式devel、deploy 和 test。指定错误报告范围指定qeePHP...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/116获取qeePHP有两种方式。第一种通过网页下载,qeePHP下载地址为http://qeephp.com/projects/qeephp.第二种方式是使用svn方式,可以获得最新版本。下载qeePHP最新版,需要下载svn软件。推荐使用的是TortoiseSVN。官方网站为:http://tortoisesv...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/121qeePHP学习第三讲带演示 使用phpmyadmin操作mysql数据库接下来需要涉及到数据库。php与mysql向来都是最佳组合。MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。目前MySQL被广泛地应用在Internet上的中小型网站中...
阅读全文
摘要:转:http://www.uutan.net/index.php/archives/108php的官方网站:http://www.php.net/PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hypertext Preprocessor)的缩写。PHP是一种 HTML 内嵌式的语言,PHP一种在服务器端执行的嵌入HTML文档的脚本语言,语言的风格有类似于C语言,现在被很多的网站编程...
阅读全文
摘要:Yii PHP 框架分析(二)作者:wdyhttp://hi.baidu.com/delphiss/blog/item/54597af595085ad3f3d38552.htmlYii是基于组件(component-based)的web框架,CComponent类是所有组件的基类。CComponent类为子类提供了基于属性(property)、事件(event)、行为(behavior)编程接口。...
阅读全文
摘要:Yii PHP 框架分析(三)作者:wdyhttp://hi.baidu.com/delphiss/blog/item/357663d152c0aa85a1ec9c44.htmlYii应用的入口脚本引用出了Yii类,Yii类的定义:class Yii extends YiiBase{}由yiic创建的应用里Yii类只是YiiBase类的“马甲”,我们也可以根据需求定制自己的...
阅读全文
摘要:Yii PHP 框架分析(四)作者:wdyhttp://hi.baidu.com/delphiss/blog/item/c15b314f05f9dfc0d0c86a26.htmlYii应用的入口脚本最后一句启动了WebApplicationYii::createWebApplication($config)->run();CApplication:public function run(){...
阅读全文
摘要:Yii PHP 框架分析 (一)作者:wdyhttp://hi.baidu.com/delphiss/blog/item/f7da86d787adb72506088b4b.html基于yii1.0.8的代码分析的。用了一个下午整理的,流水账,感兴趣的凑合着先看,国庆期间推出个整理修改版,然后再完成后两个部分(MVC和Yii的整体结构分析)。1. 启动网站的唯一入口程序 index.php :$yi...
阅读全文
摘要:转:http://iamkane.com/index.php/archives/51Javascript 闭包Closure 的入门与运用闭包这个词看过很多网站都有说。大家说的方法都大致一样。 今天看了一些大陆的文章,看到我头晕眼花,没看懂它的真正意识。 找了篇 Mozilla 关于闭包运用的文章。 讲述的比较系统易懂。1.闭包的运用1.1.实用的闭包1.2.使用闭包模拟私有的方法1.3.在循环中...
阅读全文
摘要:Axure PR 是目前比较流行的 Web产品原型软件啦。今天无意看到一个涂鸦式的产品原型制作软件-Balsamiq Mockups。 这个软件是基于 adobe air 制作的。想试试的朋友,就要先装一下air了。桌面版下载安装地址:http://www.balsamiq.com/products/mockups/desktop#download其相关资源下载:http://www.mockup...
阅读全文
摘要:转自:http://iamkane.com/index.php/archives/16刚上班没多久,公司让我整理Web前端开发的规范化文档。网上找了好久都是一些零零散散的文章。最终我只能自己整理和根据自己的经验补充一些地方。需求文档就写得多了,详细的教程还真没写过。现在把写好的教程共享出来给大家看看。如有什么不足的,可以给我留言。Web前端开发规范教程一.背景知识1.1 WEB标准1.11 结构标...
阅读全文
摘要:一 设计稿的分析1. 能分清设计稿中的公共与私有的部分从最基本的开始,分清公共部分如菜单、导航、大框架和每个独立页面所用到的部分等,至少在想法上做不同的对待。2. 在1的基础上对各部分的实现方式有一个初步的方案(包括如何切图、写结构、写样式)在分清公共和私有部分后,分析最简单的实现方法,如哪些部分是可以平铺的,哪些是可以重复被使用的等等。3. 在1的基础上,准确的给出各部分的实现方案(包括如何切图...
阅读全文
摘要:转:http://ugc.renren.com/2009/12/13/a-list-of-open-source-software-in-renren/作者:人人网架构师 张洁人人网UGC团队博客首发MySQL关系型数据库存储系统,我们的DBA团队很强大,每人管理上百台MySQL服务器,其他就不多说了,网上资料太多了Tokyo Cabinet一个key-value的存储引擎,日本人开发,国内很多公...
阅读全文
摘要:适用范围: 有SSH权限的空间,比如miao.in难度: easy学习时间: 5分钟工具: 推荐SecureCRT1. 基础命令A.显示文件源代码cat ooxx.php没错, cat 是一个常用查看源代码的命令,优点是很方便很可爱,缺点是会直接刷刷刷显示所有源代码,文件太长只能看到屁股后面的那坨代码B. 查看当前目录pwdpwd不是password,而是查看当前目录,会输出完整的路径C. 更改目...
阅读全文
摘要:Google Maps Api for Flash早已推出,在haxe如何进行开发早有文章http://lionpath.com/haxeflashtutorial/release/chap03.html做了阐述.该文章的作者虽然已经提供了实例的代码和for haxe的gmap 接口文件,不过随着gmap接口的升级,我们应该跟进.本文再做一次中文的使用说明.首先要使用google maps你需要申...
阅读全文
摘要:Information Codes 100 - Continue 101 - Switching ProtocolsSuccess Codes 200 - OK 201 - Created 202 - Accepted 203 - Non-Authoritative Information (for DNS) 204 - No Content 205 - Reset Content 206 - P...
阅读全文
摘要:9460F #588E03 #9CCE2E #C3BB1F #F9630D #F7AE16 #FFEC00
阅读全文
摘要:转自:http://www.cnblogs.com/rubylouvre/archive/2009/08/26/1554204.html通常来说,window.onload就够用了,如果想加载多个事件,我们可以采取以下方式:window.onload =function(){func1();func2();func3();//更多加载事件…………&#...
阅读全文
摘要:转自:http://www.cnblogs.com/rubylouvre/archive/2009/12/30/1635645.html 基本上每个库都有这东西,因为如果要对页面上的元素进行操作,我们必须等到页面加载了这个元素才行,否则会报错,但是我们很能判定某个元素是否已加载,但我们可以判定页面是否加载,这就是我们经常把代码放到window.onload = function(){}之中的缘由。...
阅读全文
摘要:FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。另外你也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。一. 使用PDF2SWF准备好你的文档首先要将PDF转成SWF,这步可以使用开源的SwfTools自动完成1.下载...
阅读全文
摘要:SWFTools提供了一系列将各种文件转成swf的工具:font2swf.exegif2swf.exejpeg2swf.exepdf2swf.exepng2swf.exewav2swf.exe具体的功能就顾名思义了。其中把pdf转成swf的工具就是pdf2swf了。在命令行中运行pdf2swf src.pdf des.swf一般能满足需求。而命令行参数可以通过pdf2swf -f得到:-h , &...
阅读全文
摘要:本文为原创文章,转载请注明来源:Lee's 程序人生http://analyzer.cnblogs.comStarLee 是一款图形界面的快速搭建nginx 0.8.12、PHP 5.3.0网站服务器平台的绿色软件,由AutoIt脚本语言编写。项目地址:http://code.google.com/p/starlee/最近一直在使用mongoDB做数据库开发,但是每次mongoDB服务端运行都要启...
阅读全文
摘要:nginx+pam+mysql实现基于数据库的用户认证HTTP Auth Basic模块是个很好用的模块,使用它可以零编码实现一个用户认证体系,参见:http://sudone.com/nginx/nginx_ssl.htmlAuth Basic模块有个缺点,就是它是用htpasswd文件方式来实现认证的,在更新频繁的环境或跨服务器时,文件方式操作起来就非常麻烦,因此,就催生出了新的方式:PAM,...
阅读全文
摘要:nginx支持手机应用(mobile)相关1、判断手机用户一般通过User-Agent来判断,从网上抄一抄,那些列出的都不错,我的配置里加上了Java、curl和Wget,方便调试和其它内部项目的抓取。因为现在很多手机网关没有发送User-Agent,所以大部分手机发送的User-Agent到了网关就被过滤掉了,相当于是空值。经过抽样调查,User-Agent为空且为手机用户比例比较大。有部分Us...
阅读全文
摘要:nginx ssl加密代理配置指南使用nginx加密代理利用基于ssl的传输增强安全性,而且可以不用写程序实现用户认证,实用性很强。首先编译安装:我用的是debian testing,要先装好pcre,然后编译安装:./configure --prefix=/home/nginx --with-md5=/usr/lib --with-sha1=/usr/lib --with-cc-opt="-I ...
阅读全文
摘要:nginx负载均衡器处理session共享的几种方法1) 不使用session,换作cookie能把session改成cookie,就能避开session的一些弊端,在从前看的一本J2EE的书上,也指明在集群系统中不能用session,否则惹出祸端来就不好办。如果系统不复杂,就优先考虑能否将session去掉,改动起来非常麻烦的话,再用下面的办法。2) 应用服务器自行实现共享已知的,php可以用数...
阅读全文
摘要:使用nginx部署python应用首先确定有了python的头文件(/usr/include/python2.5)没有的话 sudo apt-get install python2.5-dev1.nginx安装$ ./configure --add-module=/path/to/mod_wsgi/ --prefix=/usr/local/nginx$ make && make i...
阅读全文
摘要:此漏洞已帮其修复,并知会当事人SQL 注入漏洞危害巨大,但 SQL 注入也经常的被发现,少不小心过滤不完全就有可能让整个应用陷入困境。无意间发现某站点存在 SQL 注入漏洞,于是利用这个漏洞提权并获取服务器控制权。这个案例很典型,像是教科书式的典型入侵步骤,下面就以这个案例展示从 SQL 注入到获取目标服务器控制权限的全过程。发现访问某站点的搜索页面,发现输入单引号“'”就...
阅读全文
摘要:多种方式可以想像得到,有很多方法立即执行匿名函数,简单的整理就有下面三种的典型方式(还有其他方式的,欢迎告知):方式一(function() { // …})();方式二void function() { // …}();方式三~function() { // …}();方式一 和 方式二 大家可能都看到过,这里主要说明下 方式三。在说明 方式三 之前,我们现...
阅读全文
摘要:真的是不用不知道,其实我们熟悉的 PHP 还有很多好东西没有发掘。看到这篇文章,当时就泪奔了好几回,重点推荐下,顺便我自己也做个整理。sys_getloadavg()这个函数返回当前系统的负载均值信息(当然 Windows 下不适用),详细文档可以翻阅 PHP 的相关文档。文档中有段示例代码,基本上也就能看出它的用途了。<?php$load = sys_getloadavg();if ($l...
阅读全文
摘要:<参考于http://faq.comsenz.com/viewnews-790>我们安装了Discuz!,如果要开启URL 静态化:需要到论坛论坛后台--->全局--->优化设置--->URL 静态化:开启的好处:如果一个站点都是 .html 页面,那么它被搜索引擎全文搜到的可能性就要比.PHP 的页面高几个数量级,因此而来的访问量也会高出很多。如果我们不检查设置Ap...
阅读全文
摘要:1. PHP 代码必须以完整的形式来定界,短定界符只能用在视图。例如 :<?php// Php code here?>// index.phtml<?='hello'?>2. 当一个字符串是纯文字组成的时候(即不含有变量),则必须总是以单引号(')或者撇号(`)作为定界符。例如 :$a='Example String';$b=`Excute Something`;3. 当一...
阅读全文
摘要:1. 文档块必须用 "/*" 或者 "/**" 作为开头。"#" 是不允许的,而 “//” 的使用仅限于函数内部。例如 :/*** 类描述*/classfoo{ /* 变量描述 */ public$foo; /** * 函数描述 */ publicfunction__construct() { // 用 '//' 进行注释仅允许在函数内部 $this->foo='...
阅读全文
摘要:1. Zend Framework 的代码应该不存在 E_STRICT 兼容问题。在开启错误报告 error_reporting 级别为 E_ALL | E_STRICT 时,Zend Framework 的代码不应该抛出任何警告(E_WARNING, E_USER_WARNING),任何通知(E_NOTICE, E_USER_NOTICE)以及任何兼容问题(E_STRICT)。这就是说,Zend...
阅读全文
摘要:当我们实现诸如会员注册功能时,通常会给出一个验证码和输入框,要求用户输入,以确认该用户的有效性。这个功能在 Zend Framework 里面由 Zend_Captcha 组件提供,特别是 Zend_Captcha_Image,它允许用户把验证码用图片的形式展示出来。如下图 :以下我要实现的就是,当我们点击上面图片时,图片会自动更新,就像通常我们在论坛注册时看到的那样。为此,我们需要做一些前期工作...
阅读全文
摘要:1. 类命名总是对应于其所属文件的目录结构。这源于PEAR 命名约定,能让人从类名就能联想到该类的存放位置。例如 :Zend_Acl_Role 就代表 Zend/Acl/Role.php 文件。require_once'Zend/Acl/Role/Interface.php';classZend_Acl_RoleimplementsZend_Acl_Role_Interface{ ......}这...
阅读全文
摘要:Zend_Dojo是 Zend Framework 1.6 中加入的,同时被绑定发行的还有Dojo 工具包。利用 Zend_Dojo 提供的简单接口,我们可以很方便的调用 Dojo 工具来完成很多客户端的强大功能。前几天用 Zend_Dojo 和Zend_Dojo_Data做了一个简单的dojox.grid.DataGrid例子,在这里分享一下。以下代码可以黏贴到任何视图中运行,因为我用的是 Go...
阅读全文
摘要:1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。实际上这个问题只有当你不开启压缩或缓存输出时才会出现:// php.ini - 禁止压缩输出及缓存输出zlib.output_compression = offoutput_buffering = off//foo.php - 注意这个时候有一些空格或换行符掉在了 "?&...
阅读全文
摘要:利用 AOL 和 Google Api 提供的全球 CDN 我们可以在任何地方很方便的调用 dojo 工具包,其大小仅30k左右 :<!-- 从 AOL 调用 --><script type="text/javascript" src="http://o.aolcdn.com/dojo/1.3/dojo/dojo.xd.js"></script><!-- ...
阅读全文
摘要:当人们想用不同方法去实现同一种东西的时候,通常会想起 builder 建造者模式。比如一座大厦,设计图已经做好了,但是它可以由不同的工程师来指挥不同的建筑团队来完成,而最终得到的大厦则是一样的。在这里不得不说一下 builder 建造者模式和 factory 工厂模式的区别。其实 factory 顾名思义,它提供各种产品,如电饭锅,微波炉等等,而 builder 则是提供成品,而且有多种途径,例如...
阅读全文
摘要:众所周知,大量的 css 及 js 文件是影响网站速度的最主要原因之一。而且很多时候我们又不得不把它们分开来以便管理。然而我们通过日常的实践,发现分5次发送10k的文件的速度,要远慢于一次性发送50k的文件,原因正在于 http request 请求是非常昂贵的。在 Zend Framework 中,我们可以结合 layout 及 view helper 来做一些优化工作,以尽量减少 http r...
阅读全文
摘要:在用 Zend Framework 构建应用程序时,我们通常以 index.php 作为入口文件,并在其中创建 Zend_Application 对象及完成配置,例如读入名为 Application.ini 的配置文件。然而每次请求都读入并解析 Application.ini 配置文件,显然也是不小的开销。翻查 Zend_Application::_loadConfig() 函数,我们发现参数中允...
阅读全文
摘要:Iterator 迭代子模式提供了一种访问集合的公共机制。它能够让你以同样的方式遍历,访问和操作数据集合,如数组,文件夹,RSS集合,数据库数据集等等。Php5 其中一个与 Php4 不同的地方就在于它封装了各种iterator接口,这使得在 Php5 中实现 iterator 迭代子变得非常容易。在 Zend Framework 中也大量使用了 iterator 类接口。下面我将以Zend_Fe...
阅读全文
摘要:在传统的面向过程语言中经常充斥着大量的 if/else 语句。这种情况不仅容易令逻辑变得混乱,而且修改麻烦。strategy 策略模式正是为了解决此类问题而诞生的。当我们遇到一个问题,有多种解决的策略时,我们就可以用 strategy 模式。它的主要思想就是为所有策略类 subclasses 提供一个统一的固定的接口 interface ,例如一个父类 parent 。我们可以用这个接口定义各种所...
阅读全文
摘要:工厂模式 - factory 是一个既简单又强大的设计方法,它可以帮助我们管理大量的代码,并且易于维护。Factory - 工厂,顾名思义就是利用原料来生产产品,但是在这里我们所说的工厂模式,则是通过提供参数给生产者类 - producer ,来得到我们所需要的对象。实际上一个简单的有返回的函数 (function) 就是 factory 最简洁的表现形式。下面我们将以 Zend_Cache 模块...
阅读全文
摘要:Zend Framework 不仅实现了完整的 MVC 结构,而且还提供了与之相辅相成的众多"配件",视图助手 View Helper 就是其中之一。试图助手顾名思义就是帮助视图 view 来完成变现层的工作,它的主要作用有两个,一个是封装 html 代码,另一个是调用 model 整合数据。在这里我将介绍如何创建自己的试图助手,并且以一个有用但却非常简单的助手图片助手 - Image Helpe...
阅读全文
摘要:注册者模式 (registry) 提供了一种机制,能让你在程序中有条理的存放并管理对象 (object) ,它的主要作用是防止用户滥用全局对象 (global object) 。Registry 通常提供对象的存取,注销等方法,方便用户管理。下面来看看 Zend Framework 中 registry 的例子,这里挑选最经典的 Zend_Registry 为例 :class Zend_Regis...
阅读全文
摘要:在开始之前,我有必要介绍一下Zend_Application。这是 Zend Framework 1.8 发布中的重大变更,可以说 Zend_Application 和其引入的 Bootstrap 及 Resource 概念,大大简化了应用程序的初始化组装过程,标志着 Zend Framework 真正迈向成熟。Zend_Application 提出了两个关键概念 :1. Bootstrap对于 ...
阅读全文
摘要:Zend Framework 中提供了好几种 MVC 异常处理方式,首先让我们回顾下:1. 默认的交由 Zend_Controller_Plugin_ErrorHandler 插件来处理。2. 通过Zend_Controller_Front::throwExceptions(true) 来处理:$front->throwExceptions(true);try { $front->di...
阅读全文
摘要:如何配置 .htaccess 文件一直是困扰初学者的难题之一,我在这里特意总结了一下,希望能给初学者启示:以下有关 .htaccess 的配置兼容因虚拟主机而无权修改 apache 设置的情况。# Php settings# Php 配置# ====================<IfModule php5_module> # Adjust memory limit # 内存限制 #...
阅读全文
摘要:5.模型层模型层,作为MVC模型中的底层,对于程序的作用是至关重要的。目前许多框架都带有ORM的功能。ORM就是Object Relational Mapping,就一种对象和关系数据库进行互相转换的中间层。有了这个框架,我们实现程序以不关心SQL语句的书写、索引的创建、主键和外键的关系。虽然这是非常方便的功能,但由于隐藏了底层的实现,如果出现了错误,会不知所措。所以我还是强烈自己写一个模型层框架...
阅读全文
摘要:0.前言本文会从搭建WAMP环境开始,描述如何开发自己的个人博客。虽然目前Wordpress已经非常完善、功能非常强大,但对于喜欢简洁的朋友来说似乎有点臃肿。对于刚刚看完PHP语法,苦于没有项目实践的朋友,本文也是一个非常好的台阶。目前PHP在Web开发方面已经非常流行。可是还有一部分开发人员对PHP的应用还是停留在ASP的阶段。直接将PHP代码和HTML代码混合在同一个文件中。这对于网站的后期维...
阅读全文
摘要:1程序运行参数Nginx 安装后只有一个程序文件,本身并不提供各种管理程序,它是使用参数和系统信号机制对 Nginx 进程本身进行控制的。 Nginx 的参数包括有如下几个:-c <path_to_config>:使用指定的配置文件而不是 conf 目录下的 nginx.conf 。-t:测试配置文件是否正确,在运行时需要重新加载配置的时候,此命令非常重要,用来检测所修改的配置文件是否...
阅读全文
摘要:linux内核的编码是一种极端情况。需要清晰明朗以供全世界的开发者学习、修改,对代码的质量要求较高。相信linus大神在长期接触各种各式代码后脾气会变得更暴躁,就比如前段时间在某论坛痛斥C++。。。节选,去除不适合PHP程序员阅读的部分。如果你开发PHP程序的核心代码,比如框架,尤其建议好好思考。虽然,它和一些权威的代码规范比如discuz和zend的有所冲突,但是依然能从中受益。linux ke...
阅读全文
摘要:1、SQL语句过长:用表的别名,这是哥哥告诉我的。。。此外还想到用PHP的"",中间加入换行符使得SQL代码清晰。2、将常用的功能写成类来调用。这样使得程序的可重用性得到提高。3、强制规定使用环境为PHP5.这样可以使得可以使用PHP5下的功能。4、使用__autoload函数加载类。代码简洁优雅。5、mysql下没有top,可以用limit来代替。6、smarty模板的文件报错:unlink(D...
阅读全文
摘要:无论哪种语言,字符串操作都是一个重要的基础,往往是简单而重要。正像人说话一样,一般有形体(图形界面),有语言(print 字符串?),显然字符串能解释更多的东西。PHP提供了大量的字符串操作函数,功能强大,使用也比较简单。以下将简单的讲述它的功能和特性。弱类型PHP是弱类型语言,所以其它类型的数据一般可以直接应用于字符串操作函数里,而自动转换成字符串类型,进行处理,如:PHP:echosubstr...
阅读全文
摘要:例子文件:Sample.html http://www.blueprintcss.org/tests/parts/sample.html<link rel="stylesheet" href="http://www.cnblogs.com/blueprint/screen.css" type="text/css" media="screen, projection">这个文件将所有的C...
阅读全文
摘要:今天无聊升级了新内核2.6.32.7 编译了2次都有错误,经过修改,写下无错的编译过程因为一些不确定的因数,友情提醒升级前先备份好你的系统!1.下载新内核文件程序代码cd /usr/srcwgethttp://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.7.tar.gztar zxvf linux-2.6.32.7.tar.gzcd linu...
阅读全文
摘要:# curl --headwww.nginx.orgHTTP/1.1 200 OKServer: nginx/0.8.31Date: Wed, 13 Jan 2010 06:17:30 GMTContent-Type: text/htmlContent-Length: 2341Last-Modified: Mon, 11 Jan 2010 15:45:11 GMTConnection: keep-...
阅读全文
摘要:最佳方法在nginx.conf加入http{...server_name_in_redirect off;...}国内搜索到两种方法第一种方法用rewrite补上/if (-d $request_filename){ rewrite ^/(.*)([^/])$ /$1$2/ permanent; }第二种方法optimize_server_names off;#optimize_server_na...
阅读全文
摘要:forum.nginx .orgRob Schultznginx专家提供的解决方案统一使用www.atans.cn访问网站atans.cn 会被重定向到www.atans.cnatans.cn/post/107/ 也会被重定向到www.atans.cn/post/107/编辑nginx.conf#这个将负责atans.cn永久重定向到www.atans.cn引用#只作99860.net转向www....
阅读全文
摘要:【NaN 作用是用来表示一个值不是数字】NaN在JavaScript中行为很怪异,是因为那NaN和任何值都不相等(包括它自己)。 NaN === NaN; //false因为下面的代码可能会让一些人抓狂: parseInt('hello', 10); //NaN parseInt('hello', 10) == NaN; //false parseInt('hello', 10) === NaN;...
阅读全文
摘要:新版 OOCSS 请关注http://www.oocss.cc/ 时下流行面向对象,那么有没有可能把样式表也面向对象一下呢,将现在的CSS(Cascading Style Sheets层叠样式表)进化一下,演变成面向对象的样式表,给套了个概念上去,以下叫“OOCSS”,即Object Oriented Cascading Style Sheets。◆ 为什么会这...
阅读全文
|