2011/09/10 at 10:26
由于工作性质的关系,整天上班8个小时要做在电脑前,下班回家还是对着电脑,现在脖子经常疼痛并且僵硬,看来颈椎出问题了,看到一篇文章讲述保护颈椎的,就转过来了。
颈椎的24小时保养
亡羊补牢永远比不上未雨绸缪,与其等到颈椎受伤,再去接受长期繁琐的治疗,还不如先发制人,主动出击,让颈椎受到我们的精心照顾,不发生事故。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈一7:00
早晨主动调温
古人喜欢穿长衣服,一方面是为了礼仪,其实另一方面也是养生之需。无论冬夏,都要给自己的颈椎以舒适的温度。 即使是为了美丽,也要在办公室准备一件披肩,以保护好颈背部。偶然有受寒现象,给自己煎一碗驱寒汤:材料是红糖2汤匙、生姜7片,水煎10分钟,饮用 1~2次就可以驱走寒气。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈二10:00
5分钟的颈椎操
即使身处人多的办公室,你也可以很好地保养颈椎,比如利用工间休息练习一下颈椎操:端坐,全身不动,单头部运动,分别做低头、抬头、左转、右转、前伸、后缩;顺、逆时针环绕动作。每次坚持5分钟,动作要轻缓、柔和。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈三14:00
两种按摩的方法
经过一个上午的工作,到了下午两点钟,可能脖子早已疲惫不堪,精力有些不支,这里有两个最简单的急救方法:
(1)脖子后面,从头颅底端到躯干上部这一段分布着百劳穴的3个点。在不遗余力工作时,不妨抽出短短几分钟来按摩这3个反应点,即刻缓解颈椎疲劳,放松全身。
(2)两手手指互相交叉,放在颈部后方,来回摩擦颈部,力度要轻柔,连续摩擦50次,颈部发热后,会有很放松和舒适的感觉。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈四18:00
做做户外运动
软骨组织的营养可不是通过血液供给的,而是通过压力的变化来进行营养交换。如果缺乏活动的话,软骨就会遭遇营养不良,进而导致退化,增加户外活动是养护颈椎的方法之一,要向你推荐的运动项目是游泳、打球、练瑜伽等。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈五20:00
晚餐补肾加分
作为一位忙碌的白领,你可能没有足够时间准备健康营养的早餐和午餐,那晚餐的时候可以吃一些营养骨髓的食物。中医认为胡桃、山萸肉、生地、黑芝麻、牛骨等具有补肾髓功能,可以把这些材料加入到你的晚餐中,以起到强壮筋骨,推迟肾与脊柱蜕变的效果。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈六21:00
学学大鹏展翅
看电视的时候,你可以学一学大鹏展翅:轻轻弯腰至90度,两个手臂模仿大鹏飞行一样伸展开,但可不要将头抬起来,越高越好,坚持5分钟。这个动作可以帮助你增加颈椎部肌肉的韧性。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈七22:00
享受中药热敷
将小茴香些许、盐半斤一起炒热,装入布袋,放在颈背部热敷30分钟。每日1次。可改善颈背部血循环,缓解肌肉痉挛。注意,别让温度太高或时间过久。

人体颈椎的24小时养生保健法(图片来源:资料图)
保养秘笈八23:00
选择健康枕头
枕头和床也是颈椎的亲密伴侣,枕头过高或者过低,床垫过于柔软都会连累颈椎。枕头宽度应达肩部,中间低,两端高的元宝形的保健枕头对颈椎有很好的支撑作用,可以让颈椎得到很好的休息;对于颈椎不好的人来说,木板床、棕绷床是上选,而那种过分柔软的床肯定不利于颈椎。
2011/09/08 at 16:45
题目有点绕口,大概的意思是
php已经赋给模版一个数组,数组的信息如下:
$config= array(
1=>'中山',
2=>'石岐'
);
数据库存储地区的字段记录的是该数组的键名,如1,现在要在模版上显示:中山。
如果这样写会报错:
{{$config.$row.region}}
模版上的正确的写法是:{{$config[$row.region]}}
今天遇到的问题还更复杂一点,数据库字段存储的是一些配置的序列化,所以在调取地区信息时还需要进行反序列化处理,中间必须有一个赋值的过程:
{{assign var=param value=$l.params|unserialize}}
然后$param.region就可以取得1这个值了
标签:
php,
smarty
2011/09/06 at 18:06
定义从属关联
1、外键放置在主表中;
2、保存时不会自动更新关联表的记录;
3、删除时也不会更新关联表的记录。
示例:
多个文章都属于某一个栏目。
格式一:
* class Articles
* {
* var $belongsTo = array(
* array(
* ’tableClass’ => ‘Columns’,
* ’foreignKey’ => ‘column_id’,
* ’mappingName’ => ‘column’
* ),
* );
* }
在上面的格式中,foreignKey 表示在当前表中用什么字段存储对关联表的主键引用。
mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
如果不提供 mappingName 参数,则假定使用 tableClass。
格式二:
* class Articles
* {
* var $belongsTo = ‘Columns’;
* }
格式二是一种简化写法。foreignKey 字段名将和关联表的主键字段名相同。
============================
$hasMany
定义一对多关联
1、外键保存在关联表中;
2、保存时自动更新关联表的记录;
3、删除主表记录时自动删除关联记录。
示例:
每个用户(user)有多张订单 order。
格式一:
* class Users
* {
* var $hasMany = array(
* array(
* ’tableClass’ => ‘Orders’,
* ’foreignKey’ => ‘user_id’,
* ’mappingName’ => ‘orders’,
* ),
* );
* }
在一对多关系中,当前表并不包含对关联表的主键引用。
而是在关联表中保存对当前表的主键引用。
在上面的格式中,foreignKey 指示在关联表中用什么字段存储对当前表的主键引用。
mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
如果不提供 mappingName 参数,则假定使用 tableClass。
格式二:
* class Users
* {
* var $hasMany = ‘Orders’;
* }
简化写法中,foreignKey 字段名将和当前表的主键字段名相同。
============================
$hasOne
定义一对一关联
1、外键放置在关联表中;
2、保存时如果有关联对象,则自动创建或更新关联表的记录;
3、删除主表记录时自动删除关联记录。
示例:
当前表为 users,用于存储用户账户。而每个用户账户有且只有一个对应的个人信息(profile)记录。
格式一:
* class Users
* {
* var $hasOne = array(
* array(
* ’tableClass’ => ‘Profiles’,
* ’foreignKey’ => ‘profile_id’,
* ’mappingName’ => ‘profile’,
* ),
* );
* }
在上面的格式中,foreignKey 表示在关联表中用什么字段存储对主表的主键引用。 mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。 如果不提供 mappingName 参数,则假定使用 tableClass。
格式二:
* class Users
* {
* var $hasOne = ‘Profiles’;
* }
格式二是一种简化写法。foreignKey 字段名将和主表的主键字段名名相同。
============================
$manyToMany
定义多对多关联
1、外键保存在中间表里面;
2、保存时自动更新中间表;
3、删除主表记录时自动删除中间表的相关记录。
示例:
每个成员(member)可以拥有多个角色(role),而每个角色也可以指定给多个成员。
格式一:
* class Members
* {
* var $manyToMany = array(
* array(
* ’tableClass’ => ‘Roles’,
* ’joinTable’ => ‘member_roles’,
* ’foreignKey’ => ‘member_id’,
* ’assocforeignKey’ => ‘role_id’,
* ’mappingName’ => ‘roles’,
* ),
* );
* }
在多对多关系中,当前表并不包含对关联表的主键引用。
而是在一个中间表里面保存对当前表和关联表的主键引用。
在上面的格式中,joinTable 表示中间表的名字。foreignKey 和
assocforeignKey 分别表示在中间表里面用什么字段存储对主表和
关联表主键字段的引用。
mappingName 表示在主表的返回结果中,以什么名字保存关联表的数据。
如果不提供 mappingName 参数,则假定使用 tableClass。
格式二:
* class Members
* {
* var $manyToMany = ‘Roles’;
* }
简化写法中,foreignKey 字段名将和当前表的主键字段名相同。
assocforeignKey字段名称则和关联数据表的主键字段名相同。
而中间表名称将用FLEA_Db_TableDataGateway::getMidtableName() 方法计算。
hasOne 是一对多关联,表示一条主表记录有一条对应的关联记录。
而 belongsTo 是从属关联,表示一条主表记录属于另一条关联记录。
hasOne 和 belongsTo 正好是相反的关系。
例如 “一个用户”有一个“个人空间”。那么一个“个人空间”就属于“一个用户”。
由于 hasOne 实际上是 hasMany (一对多)关联的一种特例,所以 belongsTo 和 hasMany 也是相反的关系。
标签:
fleaphp,
php
2011/09/06 at 16:13
目前,FleaPHP支持四种类型的数据表关联,分别是:
HAS_ONE: 当前表的每一条记录都拥有最多一条(0–1)关联记录
HAS_MANY: 当前表的每一条记录都拥有多条(0-n)关联记录
MANY_TO_MANY: 当前表的每一条记录都和其他表的多条(0-n)记录关联
BELONGS_TO: 当前表的每一条记录都属于另一个表的某条记录
关联中必须设置的属性为:
‘name’, // 关联的名字(如:hasOne、hasMany)
‘tableClass’, // 关联的表数据入口对象名
‘mappingName’, // 字段映射名
可选属性:
‘foreignKey’, //外键字段名
’sort’, //对关联表进行查询时使用的排序参数
‘conditions’, //对关联表进行查询时使用的条件参数
‘fields’, //对关联表进行查询时要获取的关联表字段
‘limit’, //对关联表进行查询时限制查出的记录数
‘enabled’, //是否处理关联,设置为falses时,不处理该表入口的任何关联。enabled 的优先级高于 linkRead、linkCreate、linkUpdate 和 linkRemove。
‘countOnly’, //指示在查询关联表时是否仅仅统计记录数,而不实际查询数据
‘counterCache’, //将关联记录总数缓存到指定的字段,数据表中要建立相应的字段
‘linkRead’, //指示是否在主表读取记录时也读取该关联对应的关联表的记录,默认ture
‘linkCreate’, //指示是否在主表创建记录时也创建该关联对应的关联表的记录,默认ture
‘linkUpdate’, //指示是否在主表更新记录时也更新该关联对应的关联表的记录,默认ture
‘linkRemove’, //指示是否在主表删除记录时也删除该关联对应的关联表的记录,默认ture
‘linkRemoveFillValue’, //当删除主表记录而不删除关联表记录时,用什么值填充关联表记录的外键字段,默认0
’saveAssocMethod’, //指示当保存关联数据时,采用何种方法,默认为 save,可以设置为 create、update 或 replacevar $belongsTo = array(
‘tableClass’ => ‘Table_Users’,
‘mappingName’ => ‘author’,
‘foreignKey’ => ‘user_id’
);
var $hasOne = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);
var $hasMany = array(
‘tableClass’ => ‘Table_Profiles’,
‘mappingName’ => ‘profiles’,
‘foreignKey’ => ‘user_id’,
’saveAssocMethod’=> ’save’
);
var $manyToMany=array(
);
一个表可以有多个关联
var $hasMany = array(
array(
‘tableClass’ => ‘Model_Permissions’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘permissions’,
),
array(
‘tableClass’ => ‘Model_Products’,
‘foreignKey’ => ‘pclass_id’,
‘mappingName’ => ‘products’,
‘enabled’ => false,
),
[
array(
...
),
]
);
关联: 一个关联是一个关系,这个关系属于某一个数据表。例如 users 表可能就拥有一个或者多个关联。
主表: 对于一个关联,拥有该关联的数据表就是主表。例如 posts 表定义了一个 MANY_TO_MANY 关联。
那么在这里(指这个关联),posts 就是主表。
关联表: 在一个关联中,关联表就是除主表外的另一个表。
外键: 在数据库原理中,外键的含义很复杂。但在 FleaPHP 框架中的数据库关联功能中,
外键泛指一个记录中用于关联另一个记录的字段。例如 profile 表中的 user_id 字段就是用于关联 users 表的字段。
这个 user_id 字段就是一个外键。
中间表: 在 MANY_TO_MANY 关联中,除了主表和关联表,还需要另一个表来保存这两个表的记录之间的互相关联关系。
这个表称为中间表。
HAS_ONE 一对一关联
HAS_ONE 是一种非常简单的关联关系。表示一个记录拥有另一个记录。这两个记录分别位于两个数据表中。
示例
在一个信息管理系统中,users 表用于存储用户帐户的基本信息,例如用户名、密码等。
而 profiles 表则用于存储用户的个人信息,例如家庭住址、邮政编码等。
由于每一个用户(一条 users 表中的记录)都有一份对应的个人信息(一条 profiles 表中的记录)。
因此,我们就可以为 users 表定义一个 HAS_ONE 关联。
很明显,users 表的记录拥有一条 profiles 表的记录。因此,当 users 表中的一条记录被删除时,
被删除记录所拥有的 profiles 表中的关联记录也会被自动删除。
表定义
在 HAS_ONE 关联中,要求外键放置在关联表中
分别对应FLEA_Db_TableDataGateway表中的 $hasOne,$hasMany,$manyToMany,$belongsTo 属性
我们下面就用 老师,学生,学生档案,班级的例子说说这几个关系。
以下是SQL代码:
//学生表
Create TABLE `testDB`.`student` (
`stu_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_name` VARCHAR(20) NOT NULL,
`stu_class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`stu_id`)
)//学生档案表
Create TABLE `testDB`.`stu_record` (
`record_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`stu_id` INTEGER UNSIGNED NOT NULL,
`family_add` VARCHAR(150) NULL,
`family_tel` VARCHAR(20) NULL,
PRIMARY KEY (`record_id`)
)
//教师表
Create TABLE `testDB`.`teacher` (
`teacher_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`teacher_id`)
)
//班级表
Create TABLE `testDB`.`classes` (
`class_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`class_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`class_id`)
)
//由于教师与班级是多对多关系,所有建立一个中间连接表以表示该关联
Create TABLE `testDB`.`link_teacher_classes` (
`link_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`teacher_id` INTEGER UNSIGNED NOT NULL,
`class_id` INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (`link_id`)
)
现在,建好表之后,我们还要写几个继承自FLEA_Db_TableDataGateway父类的类,以对应数据库中的Student,Teacher,Classes表(连接表不用了)如下:
//学生表对应的类
class Model_Student extends FLEA_Db_TableDataGateway{
var $tableName = ’student’;
var $primaryKey = ’stu_id’;
/*
这是一对一关系,一个学生对应唯一的一个Record档案
tableClass 对应要与之关联一对一的表的对象类,即档案表的类
foreignKey是在档案表中,对应学生表的一个外键接连字段,
用该字段标识该档案属于哪个学生
mappingName 就是用于在你查询学生信息时,学生档案字段的别名
*/
var $hasOne = array(
’tableClass’ => ‘Model_Record’,
’foreignKey’ => ’stu_id’,
’mappingName’ => ‘record’
);
/*
这是从属关系,一个学生属于某一个班级,换过来说就是班级与学生一对多,
一个班级有多个学生,而学生就只属于一个班级
tableClass 指定该类要与之有从属关系的类,这里是班级类
foreignKey 这里指定的是该表里的连接外表的字段,这里是学生表的班级ID字段
注意:这里的foreignKey指的是本表的字段,而上面hasOne关系中的foreignKey
指的是外表中的字段,要注意区分清楚
mappingName这里就不多说了,跟上面的一样,也是用于显示区分的别名
*/
var $belongsTo = array(
array(
’tableClass’ => ‘Model_Classes’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ‘class’
)
);
}//档案表对应的类
class Model_Record extends FLEA_Db_TableDataGateway{
var $tableName = ’stu_record’;
var $primaryKey = ‘record_id’;
}
//教师表对应的类
class Model_Teacher extends FLEA_Db_TableDataGateway{
var $tableName = ‘teacher’;
var $primaryKey = ‘teacher_id’;
/*
这里确立了教师与班级的多对多关系,一个教师可以教多个班级
而一个班级也有多个教师
tableClass 指定要建立多对多关系的表的类
joinTable 这个属性要注意一个,这个是指定教师表与班级表关系的连接表
由于二维表的数据结构的原因,所以多对多关系要用一个中间表(即连接表)来表示
连接表中就指明两个表各自的主键ID就可以了,以两个字段作复合主键,如不用复合
主键,就新增加一个字段作主键也可,这没关系
*/
var $manyToMany = array(
array(
’tableClass’ => ‘Model_Classes’,
’mappingName’ => ‘class’,
’joinTable’ => ‘link_teacher_classes’,
)
);
}
class Model_Classes extends FLEA_Db_TableDataGateway{
var $tableName = ‘classes’;
var $primaryKey = ‘class_id’;
/*
这里确立了班级与学生的一对多关系
tableClass 指定该表的类要与哪个表的类建立一对多关系
foreignKey 外键ID,这里即指定学生表中定义的班级ID,这个是外表的字段
*/
var $hasMany = array(
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’
)
);
var $manyToMany = array(
// 由于多对多关系是双向的,所以班级表也可以定义上与教师表的多对多关系
// 也可以不写,看需求而定,比如你想查看某个班级信息时,一并显示该班
// 有多少个任课老师的话,那就在这个班级类里加上关系,我这里就不写了。。。
);
}
以上的代码就建立好了关系了,现在只管使用就是了。
不过还提醒大家一点,在每个关系里,都有一个 ‘enabled’ 的属性,如果设置为 false的话,则是将该关系禁掉,所以查询出来的结果就没有该关系的相应数据,这样可以节省效率,按需要时才打开相应的关联,该属性默认为true 可以如下设置:
array(
’tableClass’ => ‘Model_Student’,
’foreignKey’ => ’stu_class_id’,
’mappingName’ => ’students’,
‘enabled’ => false
)
现在我们来测试一下数据。(事先自行插入几行数据用以测试)
$classManager = FLEA::getSingleton(‘Model_Classes’);
$class =& $classManager->find(array(‘class_id’ => 1));
dump($class);
标签:
fleaphp,
php
2011/09/06 at 16:10
本文将全面分析FleaPHP的数据库查询条件,包含字符串格式,数组格式,混合格式,in查询,or查询,关联查询等常用查询。
FleaPHP的数据库查询条件$conditions 参数可以是整数、字符串和数组三种类型:
1.如果 $conditions 参数是一个整数,则假定该整数为主键字段值。
view plaincopy to clipboardprint?
// 查询主键字段值为1的记录
$user = $tableUsers->find(1);
2.如果 $conditions 参数是一个字符串,则该字符串将直接作为查询条件,这种方式可以支持最灵活的查询条件。 例如:
view plaincopy to clipboardprint?
$conditions = 'id < 3'
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE id < 3”
3.1.如果 $conditions 参数是一个数组,且指定了键名和值,则查询条件中字段名为键名,字段值等于键值。例如:
// 查询id字段值为3的记录
$conditions = array(
'id' => '1',
);
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE `id` = 1”
3.2.如果 $conditions 参数是一个数组,但其中的元素没有键名, 则假定键值为自定义查询条件,例如:
$conditions = array('id = 1');
// 生成的where字句为“WHERE `id` = 1”
$user = $tableUsers->find($conditions);
3.3.$conditions 为数组时,可以混用字符串和键值对两种风格:
$conditions = array(
'id < 3',
'sex' => 'male',
);
$user = $tableUsers->find($conditions);
// 生成的where字句为“id < 3 AND `sex` = 'male'”
$conditions = array( 'id < 3', 'sex' => 'male',);$user = $tableUsers->find($conditions);// 生成的where字句为“id < 3 AND `sex` = 'male'”
$conditions 为数组时,多个查询条件之间将使用 AND 布尔运算符进行连接。
3.4.“in()”查询在FleaPHP中的实现
我们有时候要用到in这样的操作,那么在condition里面怎么写呢?
// 假如主键名为“id”,需要查询id的值为1、2、3其中之一,则可以这样写:
$condition = array(
'in()' => array(1,2,3),
)
那么如果不是主键的话怎么写了呢? 也很简单,提供键值对即可。例如:
view plaincopy to clipboardprint?
$condition = array(
'in()' => array(
'username' => array('username1','username2')
)
)
3.5 or查询的实现
当 $conditions 包含多个元素时,每一个数组元素都是下列格式的数组:
array(字段名, 值, 比较操作, 连接下一个条件的操作, 是否是自定义命令)如果“是否是自定义命令”为 true,则“字段名”为自定义的查询条件,而“值”和“比较操作”两项将被忽略。
“比较操作”的默认值是“=”;
“连接下一个条件的操作”的默认值是“AND”;
“是否是自定义命令”的默认值是 false。
$conditions = array(
array('username', 'dualface', '=', 'OR'),
array('user_level', 'vip', '>='),
);
生成的 sql 如下
WHERE `username` = 'dualface' OR `user_level` >= 'vip'
实例代码:
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('Field2','Value2','=','OR'),
array('Field3','Value3','>'),
);
3.6.关联表限制条件
上面介绍的都是相对于主表而言的,那么我们如何来操作关联表的条件呢?我们来看下面
$conditions =array(
array('Field1','Value1','LIKE','OR'),
array('mappingName.Field',$this->primaryKey,'=','OR'), //这里的field是指关联表中的字段 ,mappingName就是定义关联时候那个影像别名
array('Field2','Value2','>'),
);
4.find(),findAll()函数中其它参数的含义和用法如下:
find ( $ conditions,
$ sort = null,
$ fields = '*',
$ queryLinks = true
)
findAll ( $ conditions = null,
$ sort = null,
$ limit = null,
$ fields = '*',
$ queryLinks = true
)
4.1.$sort 参数指定查询时的排序方式,类型只能为字符串
例如 'created ASC' 表示按照“created”字段进行从小到大的排序。
4.2.$fields 参数指定查询结果中要包含哪些字段,类型可以为字符串或数组
当数据表的字段很多时,通过指定 $fields 参数可以避免查询不需要的字段,从而提高性能。
$fields 参数即可是以“,”逗号分隔的字段名,也可以是包含多个字段名的数组,例如:
$fields = array('title', 'created');
//也可以写成下面的字符串形式,两种写法作用相同,区别在于自动生成的字段名两边将会添加上“`”符号,以防止出现字段名与SQL关键字冲突的情况出现。建议手写时也加上“`”字符
$fields = 'title, created';
$user = $tableUsers->find('id < 10',NULL,$fields);
$fields = array('title', 'created');//也可以写成下面的字符串形式,两种写法作用相同,区别在于自动生成的字段名两边将会添加上“`”符号,以防止出现字段名与SQL关键字冲突的情况出现。建议手写时也加上“`”字符$fields = 'title, created';$user = $tableUsers->find('id < 10',NULL,$fields);
推荐使用数组,这样表数据入口处理起来更快一些。
4.3.$queryLinks表示是否启用关联查询,默认是启用的,即默认会查询关联表(前提是关联设置属性enabled是开启状态)
下一篇文章将讨论一下FleaPHP的数据表关联设置
标签:
fleaphp,
php
2011/09/03 at 10:11
一个网站的robots文件对于做seo是至关重要的,它可以限制搜索引擎蜘蛛抓取不该收录的目录或者页面,避免资源的浪费,它的规则主要有以下几点:
1) User-Agent键
后面的内容对应的是各个具体的搜索引擎爬行器的名称。如百度是Baiduspider,谷歌是Googlebot。
一般我们这样写:
User-Agent: *
表示允许所有搜索引擎蜘蛛来爬行抓取。如果只想让某一个搜索引擎蜘蛛来爬行,在后面列出名字即可。如果是多个,则重复写。
注意:User-Agent:后面要有一个空格。
在robots.txt中,键后面加:号,后面必有一个空格,和值相区分开。
2)Disallow键
该键用来说明不允许搜索引擎蜘蛛抓取的URL路径。
例如:Disallow: /index.php 禁止网站index.php文件
Allow键
该键说明允许搜索引擎蜘蛛爬行的URL路径
例如:Allow: /index.php 允许网站的index.php
通配符*
代表任意多个字符
例如:Disallow: /*.jpg 网站所有的jpg文件被禁止了。
结束符$
表示以前面字符结束的url。
例如:Disallow: /?$ 网站所有以?结尾的文件被禁止。
应该注意的是:
1,在"/robots.txt"文件中,至少要有一条Disallow记录,允许收录优先级要高于禁止收录,如
User-agent: *
Allow: /a/b.htm
Disallow: /a/
则a目录下b.htm可以访问,其他禁止
2,注意路径后面加斜杠和不加斜杠的区别
如果目录后边带斜杠,那么访问不带斜杠的地址时还是可以访问目录首页,如果想屏蔽掉整个目录,建议不带斜杠
Allow或Disallow的值 |
URL |
匹配结果 |
/tmp |
/tmp |
yes |
/tmp |
/tmp.html |
yes |
/tmp |
/tmp/a.html |
yes |
/tmp/ |
/tmp |
no |
/tmp/ |
/tmphoho |
no |
/tmp/ |
/tmp/a.html |
yes |
|
/Hello* |
/Hello.html |
yes |
/He*lo |
/Hello,lolo |
yes |
/Heap*lo |
/Hello,lolo |
no |
html$ |
/tmpa.html |
yes |
/a.html$ |
/a.html |
yes |
htm$ |
/a.html |
no |
3,robots文件只有放在根目录才有效,放在子目录没效。
4,robots.txt文件用法举例
例1. 禁止所有搜索引擎访问网站的任何部分 |
User-agent: *
Disallow: / |
例2. 允许所有的robot访问
(或者也可以建一个空文件 “/robots.txt”) |
User-agent: *
Disallow:
或者
User-agent: *
Allow: / |
例3. 仅禁止Baiduspider访问您的网站 |
User-agent: Baiduspider
Disallow: / |
例4. 仅允许Baiduspider访问您的网站 |
User-agent: Baiduspider
Disallow:
User-agent: *
Disallow: / |
例5. 禁止spider访问特定目录
在这个例子中,该网站有三个目录对搜索引擎的访问做了限制,即robot不会访问这三个目录。需要注意的是对每一个目录必须分开声明,而不能写成 “Disallow: /cgi-bin/ /tmp/”。 |
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例6. 允许访问特定目录中的部分url |
User-agent: *
Allow: /cgi-bin/see
Allow: /tmp/hi
Allow: /~joe/look
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/ |
例7. 使用”*”限制访问url
禁止访问/cgi-bin/目录下的所有以”.htm”为后缀的URL(包含子目录)。 |
User-agent: *
Disallow: /cgi-bin/*.htm
|
例8. 使用”$”限制访问url
仅允许访问以”.htm”为后缀的URL。 |
User-agent: *
Allow: .htm$
Disallow: / |
例9. 禁止访问网站中所有的动态页面 |
User-agent: *
Disallow: /*?* |
例10. 禁止Baiduspider抓取网站上所有图片
仅允许抓取网页,禁止抓取任何图片。 |
User-agent: Baiduspider
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .gif$
Disallow: .png$
Disallow: .bmp$ |
例11. 仅允许Baiduspider抓取网页和.gif格式图片
允许抓取网页和gif格式图片,不允许抓取其他格式图片 |
User-agent: Baiduspider
Allow: .gif$
Disallow: .jpg$
Disallow: .jpeg$
Disallow: .png$
Disallow: .bmp$ |
例12. 仅禁止Baiduspider抓取.jpg格式图片 |
User-agent: Baiduspider
Disallow: .jpg$ |
标签:
robots,
seo
2011/09/01 at 09:34
解决WordPress半角引号自动转换为全角引号问题有许多种方法,有插件,有修改源码,有修改主题,下面介绍两种:
一、通过修改主题functions.php实现(推荐使用):
在主题functions.php文件中加入以下代码:
/*禁用半角引号自动转换为全角引号*/
remove_filter('the_content','wptexturize');
二、通过修改WP源文件实现:
注释掉 wp-includes\formatting.php文件的下列两行代码即可
$curl = str_replace($static_characters, $static_replacements, $curl);
$curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
标签:
wordpress
2011/08/30 at 16:20
昨天已经解决了flowplayer播放swf出现的重声问题,但是还有一个问题就是下面controls控制菜单依然失效,没办法,客户建议直接隐藏掉,下面是代码:
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',
onBegin: function () { this.getPlugin("play").hide(); }
},
plugins: {controls: null}
});
2011/08/29 at 14:38
今天在修改一个项目,客户网站用到flowplayer-3.2.7这个播放器来播放视频文件,如果格式是flv格式的文件则播放没有问题,如果格式是swf的文件,播放的时候就会出现一个play again 的按钮一直在视频上面,一点击就会重新播放,声音还会叠加,跑到官网去看手册,最后想出一个解决的方案是把按钮隐藏掉,但是这样点击视频还是会出现重播,于是我给视频加了一个链接,如下:
var txt = '<a onclick="return false"; href="<?php echo $mvurl; ?>" '
+ 'style="display:block;width:480px;height:360px;" id="kzxy_player"></a>';
document.write(txt);
flowplayer("kzxy_player", "/index/flowplayer/flowplayer-3.2.7.swf",{
clip: {
linkUrl:'#re',//加一个无动作的链接
onBegin: function () { this.getPlugin("play").hide(); } //隐藏按钮
}
});
2011/08/28 at 15:46
默认iframe框架是不能撑开高度的,如果需要让框架高度自适应需要用js实现
js代码:
var adjustIframe = function (id) {
var iframe = document.getElementById(id)
var idoc = iframe.contentWindow && iframe.contentWindow.document || iframe.contentDocument;
var callback = function () {
var iheight = Math.max(idoc.body.scrollHeight, idoc.documentElement.scrollHeight); //取得其高
iframe.style.height = iheight + "px";
}
if (iframe.attachEvent) {
iframe.attachEvent("onload", callback);
} else {
iframe.onload = callback
}
}
HTML代码如下所示:
使用代码:
window.onload = function(){
adjustIframe("js_sub_web");
}
标签:
iframe,
js