Submitted by gouki on 2011, August 17, 12:44 AM
YII是一个PHP框架。
ZendFramework也是一个PHP框架
在Yii里配置ZF框架,刷刷的就一个RSS阅读器就出来了。
代码很简单,把Zend整合COPY到protected/extensions目录下
在控制器的init方法里加入:
Yii::import("ext.*");
require_once("Zend_Feed_Reader.php");
然后在需要的方法里加入
$feed = Zend_Feed_Reader::import("http://neatstudio.com/rss.php");
这样就创建了一个读的对象了。然后。。。。。
你懂的:
PHP代码
- $data = array(
- 'title' => $feed->getTitle(),
- 'link' => $feed->getLink(),
- 'dateModified' => $feed->getDateModified(),
- 'description' => $feed->getDescription(),
- 'language' => $feed->getLanguage(),
- 'entries' => array(),
- );
-
- foreach ($feed as $entry) {
- $edata = array(
- 'title' => $entry->getTitle(),
- 'description' => $entry->getDescription(),
- 'dateModified' => $entry->getDateModified(),
- 'authors' => $entry->getAuthors(),
- 'link' => $entry->getLink(),
- 'content' => $entry->getContent()
- );
- $data['entries'][] = $edata;
- }
- print_r($data);
就这样,一个刚刚的RSS阅读器就出来了。
当然,它没有缓存,没有这没有那的,不过,都解析完了,剩下的功能还会远吗?
Tags: yii, zend
PHP | 评论:0
| 阅读:18832
Submitted by gouki on 2011, August 13, 12:32 AM
做网页的时候,总是会用到一些尺寸,那么这些尺寸的规格又各是什么呢?这里有个表格可以做个简单的对比,可以让你在看到这些尺寸的时候能够知道如何进行换算成自己所熟悉的尺寸单位:
Points
|
Pixels
|
Ems
|
Percent
|
6pt
|
8px
|
0.5em
|
50%
|
7pt
|
9px
|
0.55em
|
55%
|
7.5pt
|
10px
|
0.625em
|
62.5%
|
8pt
|
11px
|
0.7em
|
70%
|
9pt
|
12px
|
0.75em
|
75%
|
10pt
|
13px
|
0.8em
|
80%
|
10.5pt
|
14px
|
0.875em
|
87.5%
|
11pt
|
15px
|
0.95em
|
95%
|
12pt
|
16px
|
1em
|
100%
|
13pt
|
17px
|
1.05em
|
105%
|
13.5pt
|
18px
|
1.125em
|
112.5%
|
14pt
|
19px
|
1.2em
|
120%
|
14.5pt
|
20px
|
1.25em
|
125%
|
15pt
|
21px
|
1.3em
|
130%
|
16pt
|
22px
|
1.4em
|
140%
|
17pt
|
23px
|
1.45em
|
145%
|
18pt
|
24px
|
1.5em
|
150%
|
20pt
|
26px
|
1.6em
|
160%
|
22pt
|
29px
|
1.8em
|
180%
|
24pt
|
32px
|
2em
|
200%
|
26pt
|
35px
|
2.2em
|
220%
|
27pt
|
36px
|
2.25em
|
225%
|
28pt
|
37px
|
2.3em
|
230%
|
29pt
|
38px
|
2.35em
|
235%
|
30pt
|
40px
|
2.45em
|
245%
|
32pt
|
42px
|
2.55em
|
255%
|
34pt
|
45px
|
2.75em
|
275%
|
36pt
|
48px
|
3em
|
300%
|
其实本来已经发表了,但不知怎么的,文章消失了。郁闷,只好重发一遍,其实也是给自己做个参考了。
PHP | 评论:0
| 阅读:13257
Submitted by gouki on 2011, August 8, 10:20 PM
在项目中遇到文件上传的问题,这时候需要用到CFileValidator,但是官方的验证中少了一点点的处理,比如,对于图片,我只想上传尺寸正好是300x500的图片。怎么办?
所以我做了一点小小的扩展,于是我在rules里面加了这么两条:
PHP代码
- array('picname', 'application.validators.Myfile', 'on'=>'insert','types'=>'jpg,png','wrongType'=>'只允许上传jpg或者PNG','maxSize' => 1024*300,'tooLarge' => '图片最大只支持300K','imageSize'=>'768x1024','wrongImageSize'=>'对不起,图片尺寸只支持768*1024'),
- array('picname', 'application.validators.Myfile', 'on'=>'update','types'=>'jpg,png','wrongType'=>'只允许上传jpg或者PNG','maxSize' => 1024*300,'tooLarge' => '图片最大只支持300K','imageSize'=>'768x1024','wrongImageSize'=>'对不起,图片尺寸只支持768*1024','allowEmpty'=>true,),
数组的第二个字段就是一个全路径,告诉rules,对于picname用的是application.validators.Myfile类。这个类其实很简单,只是简单的扩展了官方的CFileValidator类,大致如下:
PHP代码
- class Myfile extends CFileValidator{
- public $imageSize;
- public $wrongImageSize;
-
-
-
-
-
-
-
- protected function validateFile($object, $attribute, $file){
- parent::validateFile($object,$attribute,$file);
- if($this->imageSize!=''&&strpos($this->imageSize,"x")!==false){
- list($width,$height) = @getimagesize($file->getTempName());
- $imageSize = sprintf("%sx%s",$width,$height);
- if($imageSize != $this->imageSize){
- $message=$this->wrongImageSize!==null?$this->wrongImageSize : Yii::t('yii','The file "{file}" cannot be uploaded. Only files with these size are allowed: {imagesize}.');
- $this->addError($object,$attribute,$message,array('{file}'=>$file->getName(), '{extensions}'=>$this->imageSize));
- }
- }
- }
- }
我这种只是简单的判断是否与指定尺寸相符,如果需要检测小于指定范围的图片,那就需要多一点的判断了,也不会太难啦。主要是一个思路(感谢烂桔提供思路)
Tags: yii
PHP | 评论:0
| 阅读:17015
Submitted by gouki on 2011, August 7, 10:43 PM
这是一个简单的方法,其实是两种方法的其中一种:xml2array 和 array2xml 中的一种啦。
但因为array2xml的时候,没有办法做到更好的把attributes做到更好,因此,就折腾了一些简单的处理方法:
array2xml是hightman的方法的简版。我自己改了一些:
PHP代码
- function array2xml($var, $type = 'root', $tag = '') {
- $ret = '';
- if (!is_int($type)) {
- if ($tag)
- return array2xml(array($tag => $var), 0, $type); else {
- $tag .= $type;
- $type = 0;
- }
- }
- $level = $type;
- $indent = str_repeat("\t", $level);
- if (!is_array($var)) {
- $ret .= $indent . '<' . $tag;
- $var = strval($var);
- if ($var == '') {
- $ret .= ' />';
- } else if (!preg_match('/[^0-9a-zA-Z@\._:\/-]/', $var)) {
- $ret .= '>' . $var . '</' . $tag . '>';
- } else {
- $ret .= "><![CDATA[{$var}]]></{$tag}>";
- }
-
-
-
- $ret .= "\n";
- } else if (!(is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) && !emptyempty($var)) {
- foreach ($var as $tmp)
- $ret .= array2xml($tmp, $level, $tag);
- } else {
- $ret .= $indent . '<' . $tag;
- if ($level == 0)
- $ret .= '';
- if (isset($var['@attributes'])) {
- foreach ($var['@attributes'] as $k => $v) {
- if (!is_array($v)) {
- $ret .= sprintf(' %s="%s"', $k, $v);
- }
- }
- unset($var['@attributes']);
- }
- $ret .= ">\n";
- foreach ($var as $key => $val) {
- $ret .= array2xml($val, $level + 1, $key);
- }
- $ret .= "{$indent}</{$tag}>\n";
- }
- return $ret;
在其中强加了attributes。比较恶心的方法啦。。
然后xml2array,其实以前写过,但写的不太好,所以我这次抄的是ibm的网站上的xml2json中的代码:
PHP代码
- define ("DEBUG", false);
-
- define ("MAX_RECURSION_DEPTH_ALLOWED", 25);
-
- define ("EMPTY_STR", "");
-
- define ("SIMPLE_XML_ELEMENT_OBJECT_PROPERTY_FOR_ATTRIBUTES", "@attributes");
-
- define ("SIMPLE_XML_ELEMENT_PHP_CLASS", "SimpleXMLElement");
-
-
-
-
-
-
- public static function xml2array($simpleXmlElementObject, $getAttributes = false , &$recursionDepth = 0 ) {
-
- if ($recursionDepth > MAX_RECURSION_DEPTH_ALLOWED) {
-
- return (null);
- }
- if ($recursionDepth == 0) {
- if (get_class($simpleXmlElementObject) != SIMPLE_XML_ELEMENT_PHP_CLASS) {
-
-
- return (null);
- } else {
-
-
- $callerProvidedSimpleXmlElementObject = $simpleXmlElementObject;
- }
- }
- if (get_class($simpleXmlElementObject) == SIMPLE_XML_ELEMENT_PHP_CLASS) {
-
- $copyOfsimpleXmlElementObject = $simpleXmlElementObject;
-
- $simpleXmlElementObject = get_object_vars($simpleXmlElementObject);
- }
-
- if (is_array($simpleXmlElementObject)) {
-
- $resultArray = array();
-
- if (count($simpleXmlElementObject) <= 0) {
-
-
- return (trim(strval($copyOfsimpleXmlElementObject)));
- }
-
- foreach ($simpleXmlElementObject as $key => $value) {
-
-
-
-
-
-
-
-
-
-
-
- $recursionDepth++;
- if($key == '@attributes' && $getAttributes == true){
- foreach(self::xml2array($value,$getAttributes, $recursionDepth) as $k=>$v){
- $resultArray[$k]=$v;
- }
- }else{
- $resultArray[$key] = self::xml2array($value,$getAttributes, $recursionDepth);
- }
-
- $recursionDepth--;
- }
- if ($recursionDepth == 0) {
-
-
-
-
- $tempArray = $resultArray;
- $resultArray = array();
- $resultArray[$callerProvidedSimpleXmlElementObject->getName()] = $tempArray;
- }
- return ($resultArray);
- } else {
-
-
- return (trim(strval($simpleXmlElementObject)));
- }
- }
改过其中的几行代码,否则会报错,改了哪几行我忘了。。官网地址是:http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/
这里还有一个:http://www.zenme.org/?action=show&id=270,可以参考一下
Tags: xml2array
PHP | 评论:0
| 阅读:17800
Submitted by gouki on 2011, June 29, 11:40 AM
看到这张OUTLOOK里的图,你就会懂了。为什么很多人都在问,每年的第一周到底是哪一周。。。
平时你又是怎么处理的呢?
Tags: 日历
PHP | 评论:0
| 阅读:14942