[][1]

最近由于工作需要,一次性需要把所有的编辑器改进成CKEditor,不过这玩意没有上传功能,只好找到它的姐妹产品CKFinder。网上一查,才知道这两东西合伙才有希望完成上传等诸多功能。

由于之前都用FCKeditor,突然使用CKEditor蛮不适应,不过FCK由于有漏洞,也不敢用了,才知道原来FCK是CK的前身。 几经抓狂,花了半天时间终于搞定了。总结了以下心得:

1、/ckeditor/config.js, 配置文件,如果不想写太多,可以直接写好默认配置(语言,菜单栏,宽度),有需要可以百度config配置

config.language = 'en';
config.skin = 'v2';
config.uiColor = '#AADC6E';
config.toolbar = 'Basic';
....

2、官方的demo大多都喜欢用js配置editor区域,习惯写php的我就嫌麻烦,只好看内置的php类。

require_once ROOTPATH . "ckeditor/ckeditor.php";
$CKEditor = new CKEditor();
$CKEditor->returnOutput = true; //设置输出可用变量的情况
$CKEditor->basePath = '/ckeditor/';//设置路径
$contentarea = $CKEditor->editor("content", $rs['contents']); //生成一个以name为content的textarea

echo $contentarea;


  

在 jQuery 1.2 中,您可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 “myurl?callback=?”。jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。 注意:此行以后的代码将在这个回调函数执行前执行。

$.getJSON('http://192.168.0.144/test/testjson.php?callback=?',function (json){
        alert(json[1].name);

php代码:

$arr[] = array('id'=>1,'name'=>'PHP');
$arr[] = array('id'=>2,'name'=>'JSP');

$json_str = json_encode($arr);

echo $_GET['callback'].'('.$json_str.')';
?>

jquery中利用getJSON这个方法就可以轻松搞定跨域传值问题了。

如何激发 haslayout?

大部分的 IE 显示错误,都可以通过激发元素的 haslayout 属性来修正。可以通过设置 css 尺寸属性(width/height)等来激发元素的 haslayout,使其“拥有布局”。如下所示,通过设置以下 css 属性即可。

  • display: inline-block
  • height: (任何值除了auto)
  • float: (left 或 right)
  • position: absolute
  • width: (任何值除了auto)
  • writing-mode: tb-rl
  • zoom: (除 normal 外任意值)

Internet Explorer 7 还有一些额外的属性(不完全列表):

  • min-height: (任意值)
  • max-height: (除 none 外任意值)
  • min-width: (任意值)
  • max-width: (除 none 外任意值)
  • overflow: (除 visible 外任意值)
  • overflow-x: (除 visible 外任意值)
  • overflow-y: (除 visible 外任意值)
  • position: fixed

其中 overflow-x 和 overflow-y 是 css3 盒模型中的属性,目前还未被浏览器广泛支持。

对于内联元素(默认即为内联的元素,如 span,或 display:inline; 的元素),

  • width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。
  • zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有“layout” 的元素如果同时 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

本文转载至:http://blog.chinaunix.net/u/27731/showart_259031.html

1. PHPCOOKIE

cookie 是一种在远程浏览器端储存数据并以此来跟踪和识别用户的机制。

PHPhttp协议的头信息里发送cookie, 因此 setcookie() 函数必须在其它信息被输出到浏览器前调用,这和对 header() 函数的限制类似。

1.1 设置cookie:

可以用 setcookie() setrawcookie() 函数来设置 cookie。也可以通过向客户端直接发送http头来设置.

1.1.1 使用setcookie()函数设置cookie:

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, bool secure [, bool httponly]]]]]] )

name:   cookie变量名

value:   cookie变量的值

expire: 有效期结束的时间,

path: 有效目录,

domain: 有效域名,顶级域唯一

secure: 如果值为1,cookie只能在https连接上有效,如果为默认值0,httphttps都可以.

例子:

<?php

$value = 'something from somewhere';


setcookie("TestCookie", $value); /* 简单cookie设置 */

setcookie("TestCookie", $value, time()+3600); /* 有效期1个小时 */

setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.com", 1); /* 有效目录 /~rasmus,有效域名example.com及其所有子域名 */

?>

设置多个cookie变量: setcookie(‘var[a]‘,’value’);用数组来表示变量,但他的下标不用引号.这样就可以用$_COOKIE[‘var’][‘a’]来读取该COOKIE变量.

1.1.2. 使用header() 设置cookie;

最近搞这个自动取消置顶的东西,非常之烦

一开始方案是采取读出两次数据 ,一组是置顶不过期数据,一组是所有数据。然后进行数组匹配,第二个数组中不在第一个数组的数据累加到第一个数组后头。当文章数目仅仅就10来篇的时候也就罢了,倘若上百篇,这么大的二维数组循环匹配太消耗资源。

想了想,还是放弃了这种方式,实在不可取。最终去在mysql手册中找了控制流程函数IF,终于解决了这个问题。

函数表达式:IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

举个例子就很好理解

mysql > SELECT IF(1>2,'yes ','no');
          > 'yes'

数据库表结构设计:

id: int(11)  
title: varchar(255)  
istop: tinyint(1) //这个是是否置顶:1表示置顶;0表示非置顶  
topdeadline: int(10) //置顶截止时间,时间戳格式..  
…… //更多的字段

PHP中操作Mysql:

//这里有额外的要求,当置顶截止时间为空时,代表永久置顶。
$timestamp = mktime(); //获取当前时间戳
//置顶为1时,截止时间大于当前时间或者 截止时间为0,定义一个字段为top为其赋值
$sql = "SELECT id, title,
IF(istop=1 AND (topdeadline>" . $timestamp . " OR topdeadline=0), 1, 0) AS top,1
FROM article ORDER BY id DESC";