forecho 的独立博客

把生命浪费在美好的事物上

Yii CListView使用方法

2013年05月22日

widget(‘zii.widgets.CListView’, array(          ’dataProvider’=>$model->search(20),          ’itemView’=>’_view’,            ’emptyText’=>’暂时没有数据’,         //’template’=>’{items}{pager}’,         ’pager’=>array(‘class’=>’CLinksPager’),         ’htmlOptions’=>array(‘class’=>’list-view pro_list bd’),         ’itemsTagName’=>’ul’,         ’itemsOptions’=>array(‘class’=>’list c_f’),         ’summaryText’=>’第 {start}-{end} 条, 共{count} 条   第{page}页/共{pages}页’,         ’pagerTemplate’=>’onlyPager’,         ’buttonCssClass’=>’bg_x btn_page’,         ’batchItemOptions’=>array(‘class’=>”f_l batchItem”),         ’batchItem’=>array(              //移动到分类              ’排序:’,              //添加到分类              CHtml::link(‘默认排序’,array(‘list’,’id’ => $model->catgory_id,’att’ =>$g_att,’sort’=>”),array(‘class’=>empty($model->list_order)?”default price”:”default”)),             CHtml::link(($model->list_order==4)?’价格’:’价格‘,array(‘list’,’id’ => $model->catgory_id,’att’ =>$g_att,’sort’=>($model->list_order==4)?6:4),array(‘class’=>($model->list_order==4||$model->list_order==6)?”bg_x price”:”bg_x”)),              CHtml::link(($model->list_order==5)?’销量’:’销量‘,array(‘list’,’id’ => $model->catgory_id,’att’ =>$g_att,’sort’=>($model->list_order==2)?5:2),array(‘class’=>($model->list_order==2||$model->list_order==5)?”bg_x price”:”bg_x”)),             CHtml::link(($model->list_order==7)?’上架时间’:’上架时间‘,array(‘list’,’id’ => $model->catgory_id,’att’ =>$g_att,’sort’=>($model->list_order==1)?7:1),array(‘class’=>($model->list_order==1||$model->list_order==7)?”bg_x price”:”bg_x”)),          ),          ));  ?>

简单说明: template是整个CListView的模板;

PHP中的单引号和双引号

2013年05月18日

被双引号的内容能被PHP检测其中的变量,并且自动转换变量,示例:

1
2
3
4
5
6
<?php
	$name = 'forecho';
	echo 'Hello world $name';
	echo '</br>';
	echo "Hello world $name";
?>

输出的结果就是:

1
2
Hello world $name
Hello world forecho

这样就可以得出结论,其实单引号更快,因为单引号不用去考虑变量问题,而是直接输出。

更多资料,请参考鸟哥的这篇文章。但是写HTML的时候,写页面一些属性的时候,W3C标准,还是要用双引号。

浅谈CSS的一些写法

2013年05月15日

开发网站的时候,DIV最好是先用上class,因为id的权限比class要高。 写class样式的的时候最好也要带上父级的class名称。比如:

.header .topbar{ padding-top:10px;}
.nav_bar .main_nav li{ float:left;}

写div的时候尽量少用float的,因为很多莫名其妙的兼容性问题都可能是浮动害的。 clear: both;是个好东西。 最重要的是写语义化的CSS,让人一看就能看出来是什么意思。比如:

.fl { float: left; }
.mt10 { margin-top: 10px; }
.w980 { width: 980px; }

这个语义化CSS很实用,就举这三个例子。 以后知道怎么用CSS了吧?

老罗和他的锤子

2013年05月05日

下面这段视频是『锤子智能手机操作系统发布会官方版』

知道罗永浩(下面简称「老罗」)这个人是在我大学大的时候,那时候刚配上电脑,那会儿网上他在各大学巡回演讲的视频,找了一个时间看了其中一个最火的,但是视频很长,记得那会儿只看了一半然后下午就跑去上课了,然后就没有然后了。只是记得他很牛,以前在新东方教英语,然后写了一本书叫「我的奋斗」(跟希特勒的书同名),只记得他说自己是个「理想主义者」。这事件过了之后就没怎么关注他了,貌似被我遗忘了。

后来新浪微博火了,开始玩微博了,后来罗永浩开始砸冰箱了,火了一阵子。我只是关注了一下。

记得那会儿我辞职很久了,在宿舍待着很久了,然后不知道什么原因,他们都去上班的时候,那天我就开始看老罗的视频了,没想到这家伙每年都会有一次的创业分享演讲,并且现在改为每半年一次了,那天我一口气看完了他的所以视频,顺序是倒着来的,看完我才发现:「他真的是说相声的,他有才了,很长的视频其实你听起来并不会感觉很无聊。」

老罗这一生注定是牛X的,他貌似连大学都没上过。然后开始在社会上混生活了,直到快30岁的时候都没什么钱,后来为了赚钱去做了当时他最讨厌的两件事-学英语和当老师。然后去当了新东方英语教师,直接给俞敏洪写的信,面试了三次才成功的。开始了忙碌的生活(周一到周五忙着又是打牌、旅游的,然后周末下午去教两个小时的英语)。后来辞职了之后,老罗做了一个牛博网,效益还不错,但是偶尔会被封掉,原因你懂得,每一次封掉之后再次开启的时候流量都会翻倍,但是这个牛博网确实没赚到钱,这个再次证明IT是苦逼的。后来老罗自己开了一家英语培训机构就叫「老罗英语培训学校」,

每张海报设计的都很赞。然后直到现在他开始做手机了,用他的话说就是「感觉自己被历史选中了」。

这个发布会可算是出来了,之前有「跳票」。老罗之前在微博上有说过大概这样一句话「使用我们出品的ROM之后,你还想用iPhone的话,你的终身手机费用我就给包了」。这样一来,大家的期望就变得很高了,当然也有很多人不看好。发布会的票卖的老贵了,然后还有「黄牛」倒票。发布会之后的结果其实是嘘声一片的。

其实我倒是觉得还不错的。

首先老罗把Mac上的拟物图标发挥出来了,然后结合Andriod的特色,把整个Andriod的图标都换了个新,有人笑称「老罗的锥子ROM就是一款主题」,其实这只是锤子ROM的其中一个特色。我觉得锤子ROM最大的特色就是人性化设计和语音助手以及老罗本身的个人情怀。

都有哪些人性化设计我就不说了,反正现在所有的设计都在追求人性化,老罗大体上研究了iPhone,把一些iPhone不人性化的设计都改进了,值得称赞。

iPhone的Siri可以说是改变了语音的使用,刚出来的时候可以说是很火。确实是非常了不起的功能,但是也确实如老罗所说,iPhone上的Siri实用性非常差,刚开始你可能无聊的时候,调戏过他,但是之后几乎你很少使用她,没人会在公共场合对着手机喊「给XXX打电话」,这确实是一件很傻逼的事情。但是老罗的设计真的很牛(具体怎么牛,你可以看上面的发布会视频),说不定未来可以让语音助手这个功能变得更加实用。

至于个人情怀,其实我是很喜欢的,比方说Mac百度输入法的产品经理就是一个有情怀的人。用Mac百度输入法可以很方便的使用「」作为引号,自从知乎上讨论过关于引号的使用问题的之后,我也是越来越喜欢用「」作为引号了。锤子ROM的这次也有个人情怀设计,至于什么我就不说了,自己看视频吧。

最后我不得不感叹一下移动应用以及智能手机的发展速度了,不敢相信Android的发展速度。Android绝对是个潜力股,也是Android改变了手机世界的格局,发展到现在国产手机也被人认同的格局,国产手机不再只是山寨机了。最后再次感叹一下Google觉对是一家伟大的公司,而中国正缺少这样的伟大公司,真希望若干年之后阿里巴巴也能算上?

最最后一起来期待 Smartisan OS (锤子系统)吧!

Django(二) - 视图和URL配置

2013年05月04日

Django的URl都是需要单独设计的,每个URL指定一个视图中的函数。 Django和URL配置背后的哲学:松耦合原则(决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方。 这使得开发人员可以修改一块而不会影响另一块。) 永远的Hello world 首先找到urls.py文件,代码修改为:

from django.conf.urls.defaults import *  #导入django.conf.urls.defaults下的所有模块
from views import hello  #从mysite/views.py模块中引入了hello视图。

#第二行调用 patterns() 函数并将返回结果保存到 urlpatterns 变量
urlpatterns = patterns('',
    (r'^hello/$', hello), #第一个元素是模式匹配字符串(正则表达式);第二个元素是那个模式将使用的视图函数。
)

注:正则表达式字符串的开头字母“r”。 它告诉Python这是个原始字符串,不需要处理里面的反斜杠(转义字符)。例如:“\n”是两个字符串:“\”和“n”。 然后新建一个views.py文件(跟urls.py同级目录),写入如下代码:

from django.http import HttpResponse  #从 django.http 模块导入(import) HttpResponse 类

#hello 的视图函数 每个视图函数至少要有一个参数,通常被叫作request。
def hello(request):
    return HttpResponse("Hello world")

运行命令行 python manage.py runserver 打开你的浏览器访问 http://127.0.0.1:8000/hello/ 如果你看到了 Hello world 页面,那就表示你成功了。 附件:正则表达式 正则表达式

Django初使用

2013年04月26日

Python的项目可以放在你电脑的任何一个文件夹中。 转到你创建的目录,运行命令django-admin.py startproject mysite。这样会在你的当前目录下创建一个目录。(名为mysite的项目) 文件如下: init.py :让 Python 把该目录当成一个开发包 (即一组模块)所需的文件。 这是一个空文件,一般你不需要修改它。 manage.py :一种命令行工具,允许你以多种方式与该 Django 项目进行交互。 键入python manage.py help,看一下它能做什么。 你应当不需要编辑这个文件;在这个目录下生成它纯是为了方便。 settings.py :该 Django 项目的设置或配置。 查看并理解这个文件中可用的设置类型及其默认值。 urls.py:Django项目的URL设置。 可视其为你的django网站的目录。 目前,它是空的。   启动服务器 切换到项目目录里 (cd mysite ),运行下面的命令: python manage.py runserver 于是就会返回一个项目的浏览地址(默认一般是:http://127.0.0.1:8000)。 退出这个状态可以使用:CTRL+C。 默认情况下, runserver 命令在 8000 端口启动开发服务器,且仅监听本地连接。 要想要更改服务器端口的话,可将端口作为命令行参数传入: python manage.py runserver 8080 通过指定一个 IP 地址,你可以告诉服务器–允许非本地连接访问。 如果你想和其他开发人员共享同一开发站点的话,该功能特别有用。 0.0.0.0 这个 IP 地址,告诉服务器去侦听任意的网络接口。(这个IP必须是本机的IP地址) python manage.py runserver 0.0.0.0:8000 注:三引号,是python换行字符串的格式。

Comments

baocaixiong: 这个主题。。我想要。。。

Mac OS 上安装MySQLdb一系列问题

2013年04月24日

话说装这个插件非常麻烦。 首先你得先装MySQL。先去下载64 位的MySQL,然后安装。步骤你可以参照这篇文章~ 其实他写的已经很详细了,但是我安装的过程中遇到的很多问题。 声明一下:我是下载MySQLdb然后手动安装的,没有用 easy_install去安装。 1、报错:

sh: mysql_config: command not found
......
......
EnvironmentError: mysql_config not found

解决办法是:在MySQLdb源码里面找到site.cfg 修改为:

mysql_config = /usr/local/mysql/bin/mysql_config

然后python setup.py install 2、报错:

......
import _mysql
......
Reason: image not found

解决方法是:需要解决动态引入的问题了(重新做一遍,并且设置环境变量):

$ python setup.py clean
$ python setup.py build
$ python setup.py install
$ export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

或者运行下面两行命令:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

参考资料:http://stackoverflow.com/questions/4730787/python-import-mysqldb-error-mac-10-6  3、报错: error: command ‘clang’ failed with exit status 1报错的时候 解决方法是:去Xcode的Preference的Download下的Components下载command line tool 4、在$ python manage.py syncdb 的时候报错:

ImportError: cannot import name smart_unicode

解决办法是:在「/Library/Python/2.7/site-packages/tinymce/widgets.py」文件里找到下面代码:

from django.forms.util import smart_unicode

替换为:

from django.utils.encoding import smart_unicode

读孟非的《随遇而安》

2013年04月18日

前一阵子发现亚马逊中国上面开始卖正版的电子书了,刚开始没有关注的。在中国看电子书向来都是免费的,人们是不会花钱去买的。 但是过几天发现上面有¥1.00的电子书,于是心里有痒痒了。这个对我诱惑很大啊,特别是在网上找了很久所找到的电子书都是不全的之后,那个心情很是沮丧。犹豫了几天之后,果断的一次性在亚马逊中国上买了三本电子书。是正版的,大多数都有目录,有图片,排版好,心情大好。我目前只能接受¥5.00以下的电子书。并且买书之前我会去看豆瓣等网上查一下资料然后才考虑是否值得去买。亚马逊中国有一个活动是『Kindel今日特价书』,每天换一本书,价格都很便宜,还有一个活动是『Kindle每周精选好书』,都是很吸引流量的活动。这两个活动使我都快养成一个每天都登录亚马逊中国的习惯了。这点国内的其他电商真应该向他们学习。 对比『多看书城』、『豆瓣阅读』、『kindle商店』,还是亚马逊的Kindle上卖的书比较便宜、实在。其他京东电子书、当当电子书我就不多说了。唯一遗憾的是目前Kindle没有进入中国市场,这导致你在亚马逊中国上买的书不能发送到Kindle设备上去读,这点有点坑爹了,所以当听到Kindle四月底要进入中国,还是很期待的。在iPhone上用Kindle APP看书还算勉强吧,至少做笔记还算方便。 以上都是些废话,下面我们开始进入本篇文章的主题,我们来谈谈这本书。 我相信大多数人听过孟非这个名字就因为前几年大红大紫的『非诚勿扰』相亲节目了。那时候的这个节目真是火,很少看综艺节目的我都看了几集,记得后来『非诚勿扰』的一次停播大调整之后我就很少关注了,后来就慢慢淡了。 在Kindle商店淘书的时候,无意中看到这本书,然后简单的看了一下简介以及评价之后就果断的买了下来。 这本书基本上就是孟非写的自传吧,从他的小时候在重庆如何调皮到后来去了南京再到后来父母离异,从他没上大学然后出来第一份工作是在印刷厂当工人到如何步入到电视台这行中。我本人对重庆那段比较感兴趣,对他后来去新疆去拍纪录片那段也非常的感兴趣。那时候的新疆有很多是未经过开发的自然美,跟着他我也算是了解了很多关于新疆的事。后面他也淡到了关于狗还有一些关于他在国外做采访的一些见闻,有介绍一些国家以及那些国民的一些特点,其实还挺长见识的。 给我记忆犹新的有重庆的小面,以后有机会定会去尝尝。还有新疆的美食,他们喝酒的习俗,还有那段过大桥爬斜坡去拍公主堡的惊险经历。还有就是德国人的办事性格以及希腊的民主。以色列工会的强大,以及他们很有规矩的罢工,并且知道了以色列还有一个很强大的『人民公社』- 『基布兹』。 总之这还算是一本的不错的书,这书不能说太细了,自己看吧。 对了,最后孟非也是一个严重偏文科的学生。

Comments

baocaixiong: 这本数我也看了。其实孟非不错的。

PHP最高效的去判断数组最后一个或第一个元素

2013年04月09日

首页这个方法我是无意中在知乎上看到的,确实很实用,原文地址~

思路:先把数组中的第一个元素或最后一个元素用PHP自带的函数删掉,然后单独使用的时候可以单独调用。

删掉数组最后一个元素用array_pop()这个函数。 示例:

1
2
3
4
5
6
<?php
    $a=array("Dog","Cat","Horse");
    print_r(array_pop($a));
    echo '</br>';
    print_r($a);
?>

输出结果:

1
2
Horse
Array ( [0] => Dog [1] => Cat )

删掉数组第一个元素用array_shift()这个函数。方法跟上面类似,我就不写示例来。 这个方法效率很高,很实用。非常感谢原作者。  

值得注意的地方:

下面我们来说说使用这个array_shift()函数,值得注意的地方,在下面这个网址输入以下代码:

1
2
3
4
5
$a=array('3' => "Dog", 'a' => "Cat", '0' => "Pig", '4' => "Horse");
// print_r(array_pop($a));
print_r(array_shift($a));
echo '</br>';
print_r($a);

那么输出的结果会是这个:

1
2
Dog
Array ( [a] => Cat [0] => Pig [1] => Horse )

是不是与想象中不一样,数组中的最后一个值的键位由4变成了1,所以使用的时候要注意。但是array_pop()这个函数没有出现这种情况。

Yii调试错误以及一些技巧(持续更新)

2013年04月02日

Yii添加不了数据:

$admin = new Admin;        
$admin->username = $username; 
$admin->password = $password; 
if($admin->save()>0){ 
   echo "添加成功";  
}else{  
   echo "添加失败";  
}

上面是一条最简单的Yii添加数据方法,按着这个来写,能读出数据,但是还是无法写入数据库,利用下面的这段代码我们可以找出错误的原因。

$admin->save();
var_dump($admin->errors);
exit;

最后一般能找出原因。 Yii的findAll打印输出问题:

$project=Project::model()->findAll();
foreach($project as $v){
    echo $v->attributes['title'];
}

findAll条件查询简写:

$criteria = new CDbCriteria(array(
    'condition' => '(id=35 OR id=36) AND commend=2 AND status=2',//多个条件查询
    'limit' => '1',
    'order'=>'id DESC',
    //'order'=>'RAND()',  //随机筛选
 ));
 $video = News::model()->findAll($criteria);

或者可以这样写:

$video = News::model()->findAll(array(
    'condition'=>'(id=35 OR id=36) AND commend=2 AND status=2', 
    'order'=>'id DESC', 
    'limit'=>1,
));

Yii页面包含其它页面方法:

<?php $this->renderPartial('/comment/_form',array(
 'model'=>$comment,
 )); ?>

清空缓存

Setting::model()->destructCache();

更新数据

//第一个是根据条件更新多行数据
//第二个是根据主键更新单条数据
Posts::model()->updateAll(array('title'=>'Hello World'), array('condition'=>'user='.Yii::app()->user->getId()));
$count = User::model()->updateByPk($_POST['userid'], array('name'=>'forecho'));
if($count>0)
{
echo "更新成功";
}

关于分页联表查找时,字段重复的问题

$dataProvider=new CActiveDataProvider('Post', array(
    'criteria'=>array(
        'condition'=>'status=1',
        'order'=>'create_time DESC',
        'with'=>array('author'),//调用relations
    ),
    'pagination'=>array(
        'pageSize'=>20,
    ),
));

主表用的是主表名,关联表是关系名. 读取数据的时候,比如说两个表ID字段重复了。要读取第二个ID的话,可以这样读取:

$data->author->id//根据文章userid关联user表读取id

添加JS和CSS

Yii::app()->clientScript->registerCoreScript(Yii::app()->homeUrl.'/js/jquery.js');
Yii::app()->clientScript->registerCssFile(Yii::app()->homeUrl.'/css/style.css');

验证规则添加情景(页面) Yii的验证规则要写在Model的rules里面,例如下面的这行代码:

array('psword, email, old_psword, re_psword, captchal', 'required', 'on'=>'forgot'),

解释一下,有时候不止一个页面会使用同一个Model里面的验证规则,这个时候为了不冲突,我们需要设置情景,上面的'on'=>'forgot'就是自定义的情景。如果要使用的话,还需要要在相应的控制器的action里面添加情景,代码如下:

$model->scenario = 'forgot'; //设置当前情况下的验证场景

Yii里设置SESSION过期时间 在app config里,设置:

'components'=>array(
    'session'=>array(
        'timeout'=>3600,
    ),
)

查询个数

$count = Notification::model()->countByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));

Yii 数据save后得到插入id

$model->save();
//得到上次插入的Insert id
$id = $model->attributes['id'];

添加手机号码验证 在Model里面的rules添加代码:

array('phone', 'match', 'pattern'=>'^13[0-9]{9}|15[012356789][0-9]{8}|18[0256789][0-9]{8}|147[0-9]{8}$','message'=>'请输入正确的手机号码'),