[jquery]近来jquery的两次应用
最近的开发,都和Rails无关,但是两次用到了jquery。上次做完一个项目后,买了2本js的书,打算好好学下jquery和js,可惜看了前几章就又没时间专心看了。这两次也是借着一点点了解,解决了2个jquery的应用。不忙的时候,一定要认真复习一遍。
1、用jquery解密淘宝图片地址
从淘宝过来的数据,图片地址是加密的。查的资料上看,可以用一段js代码解密,可问题是那段代码需要点击后才会解密。我的程序里需要直接显示图片。怎么办?
解决办法是,将拿回来的加密字串放到js的方法里,将解密结果更新img的src属性。所以在上面那个文件提供的方法下面,加上了jquery的方法。做了个典型的方法调用。
$(document).ready(function() {
var whoback = "";
whoback = '$results[image]';
var iamback = Button1_onclick(whoback);
$('#taobao_pic').attr('src', iamback);
$('#image_url').attr('value', iamback);
});
2、wslide插件
这是一个可以实现新闻列表分页显示的jquery插件,地址:http://www.webinventif.fr/wslide-plugin/
可惜没有上,下一页按钮。页面是法文的,不懂。所以用完这个,真的需要找时间专心看一下那两本书了。《jquery基础教程》和《精通javascript》。
写在最后:感谢最近的几位朋友与我联系开发的意向。感谢大家的信任。目前答应了俩个朋友的邀请,在这个月中(结束手头两个项目)跟他们谈合作的细节。每个项目周期可能在2周左右。真的很期待。我会在这个过程中不断充实自己。再次感谢大家,感谢wordpress,以及这次博客界面的改版,mac真的可以带来好运。
TextMate中文教程之使用emacs中常用的快捷键
就像你前面看到的一样TextMate支持一些emacs常见的快捷键。
- Ctrl+D 删除光标右侧的一个字符
- Ctrl+T 调换选中文本的顺序,如果没有选择任何文本则对换光标左右字符的位置。并且将光标置于下一个位置
- Ctrl+K 删除光标到行尾的文字
- Ctrl+Y 复制出删除的最后一次文本
- Ctrl+O 不移动光标插入新的一行
当然这些快捷键在Mac系统中的其它应用中也可以使用,比如Mail。
[php]uchome中的两个字段含义的解释
在uchome的spacefield表中,有两个看似明确,实际很别扭的两个字段名,friend和feedfriend。
在处理feed的时候,这两个字段经常会让人搞混乱,一时想不起来意思。
其实friend是表明该空间的好友,这和blog的friend不一样,blog的friend是定义的blog的开放级别。
feedrfriend,基本上和friend是同样内容,但是当设置屏蔽时,会从这个表中去掉被屏蔽的人的id,所以,这个字段保存的是可以查看该空间feed的id。
那么,现在我在做的是增加同组查看功能,比如,设置某一个组只能本组人查看,外组的人无法查看任何消息。这时,就用上了这里的方法。
未完,待续
[php]uc实名认证的修改,使其他系统调用uch的实名
写在前面:jp加入本站后,博客立刻火了起来。我奥运会后一直在做php的开发,而且是专门研究,hack康盛的uch,uc和supesite,给客户做php的站,一直没有做Rails的开发,有点遗憾。不过jp带着我还算没太落后,碰到好的Rails项目肯定还会继续Railser的开发的。
这是一篇笔记,边写边整理代码,比较复杂。贴在这里吧。
uc有个问题,就是在uch打开实名认证时,其他与uc通信的应用,仍旧显示uc里的username字段,而独uch显示认证的名字。为了使整站统一,需要在别的应用里显示uchome_space.name字段的内容。
思路:
1、在uc_members中增加name和namestatus字段。
ALTER TABLE `uc_members` ADD COLUMN `name` char(20) NOT NULL default ''; ALTER TABLE `uc_members` ADD COLUMN namestatus tinyint(1) NOT NULL default '0';
2、uch的source/cp_profile.php 82行后,增加同步更新uc实名字段。
//同步更新uc主表实名
update_uc_table('uc_members',Array('name'=>$setarr['name'], 'namestatus'=>$setarr['namestatus'], 'uid'=>$_SGLOBAL['supe_uid']));
3、管理后台 admin/admincp_space.php 批量管理实名时,同步更新uc表
75行后:
//同步更新uc表,单个用户
update_uc_table('uc_members',Array('name'=>$setarr['name'], 'namestatus'=>$setarr['namestatus'], 'uid'=>$uid));
需要在 source/function_common.php 中添加一个方法。和updatetable一样的,取消了table的前缀。
function update_uc_table($tablename, $setsqlarr) {
global $_SGLOBAL;
$setsql = $comma = '';
foreach ($setsqlarr as $set_key => $set_value) {
$setsql .= $comma.'`'.$set_key.'`'.'=\''.$set_value.'\'';
$comma = ', ';
}
$where = $comma = '';
if(empty($wheresqlarr)) {
$where = '1';
} elseif(is_array($wheresqlarr)) {
foreach ($wheresqlarr as $key => $value) {
$where .= $comma.'`'.$key.'`'.'=\''.$value.'\'';
$comma = ' AND ';
}
} else {
$where = $wheresqlarr;
}
$_SGLOBAL['db']->query('UPDATE '.$tablename.' SET '.$setsql.' WHERE uid='.$setsqlarr['uid']);
}
//122行后,批量更新
case '1':
//通过实名认证
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET namestatus='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$_SGLOBAL['db']->query("UPDATE uc_members SET `namestatus`='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$url .= 'namestatus=0';
$createlog = true;
break;
case '2':
//取消实名认证
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']->query("UPDATE uc_members SET `namestatus`='0' WHERE uid IN (".simplode($_POST['uids']).")");
$url .= 'namestatus=1';
$createlog = true;
break;
case '3':
//清空姓名
$_SGLOBAL['db']->query("UPDATE ".tname('space')." SET name='',namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']->query("UPDATE uc_members SET `name`='' WHERE uid IN (".simplode($_POST['uids']).")");
break;
4、在需要的应用中,修改方法其实应该放到uc_client中,但是我未找到一个很重要的方法究竟在哪定义,就是uc_client/client.php 中的 call_user_func 方法,我需要hack这个方法,来将name和namestatus属性包装进来,但是没找到,高手指点下呗。答:最终,还是在modoer里修改了user class,而且在feed的时候,还要使用实名,就只能这样hack了。不过还是没有明白这个call_user_func方法是怎么调用的。
所以用了个土办法。这里有个设置问题,当实名未认证时,是否显示该实名。
$tmp = Array();
$tmp = $db->get_one('SELECT name, namestatus from uc_members where `username`="'.$user->username.'"');
if($tmp['namestatus']){
$user->name = $tmp['name'];
}else{
$user->name = $tmp['name']."(未认证)";
}
这里还有个顾虑就是,在这个新系统中,是否沿用uch的认证机制,如果需要,这个改动讲很大,还是依附于uc过来的数据处理。
其实完美的方案应该该是完全放到uc_client中,但是我4里的问题我还没解决。目前的只是按照常规的方法hack相关代码解决的。
modoer是开源的点评程序,非常出色,从代码里学到很多知识,不仅是php,可能对今后开发Rails都有帮助。在此感谢作者的工作!!!
广告下自己的新站:
对了,我们现在用的新插件是这个,http://code.google.com/p/syntaxhighlighter,非常强
TextMate中文教程之使用制表符
如下图所示,你可以在编辑窗口的下面修改制表符的大小或者使用Soft Tabs模式。如果你选择了Soft Tabs类型,那么TextMate会移除目前的制表符,当你保存文档的时候,它会用空格来替代。并且今后编辑同样语言类型文档,也会如此。
在TextMate里面你大概还会遇到Smart Tab的情况,当你按一个Tab键的时候,会根据目前的缩进级别自动在前面填充相应数量的制表符。当你选取一部分文字的时候,可以使用 Text -> Convert -> Spaces to
Tabs 或者 Text -> Convert -> Tabs to Spaces功能,如果你没有选择任何文本,则该操作会影响当前文档。
TextMate中文教程之文本对齐
TextMate中文教程之编辑模式
TextMate支持两种额外的编辑模式,当你输入固定宽度的文本或者ASCII的时候尤其有用。它们是Freehanded Editing和 Overwrite,你可以在 Edit -> Mode 下找到它们。
当你切换 Freehanded Editing 模式(Option+Apple+E),TextMate允许你使用键盘来移动光标或者用鼠标点击。你可以放到一行的结尾外,或者列的中间。如果你增加新内容,TextMate会在特定区域补充上空白。
在使用列选择器的时候,这个功能通常是激活的,所以你可以把内容区域扩充。如果你希望单击鼠标切换这个模式,那么当你单击的时候请按住Option键。
另一个编辑模式Overwrite Mode (Option+Apple+O),用来改变目前存在的文本。你很容易就能辨识出现在现在是否激活了这个模式,因为它会让你的光标成为一个下划线。和在两个字符中间插入新字符不同,TextMate的这种编辑模式会用你输入的字符替换当前字符。当你要进行文本替换的时候,这个模式可以很好的避免行内后面的文本窜位。
这些模式会引起自动化操作的异常,如果你看到了一些奇怪的结果请确保已经关闭了这些模式。如果有必要,请每次需要使用这些模式的时候手动开启。
TextMate中文教程之一次编辑多行
TextMate允许你一次编辑多行文本。你可以使用这个功能添加新内容或者删除旧内容。这个功能在你操作列表数据的时候尤其方便。让我们仍然用一个例子来熟悉这个用法:
- 创建一个新的TextMate文档,Ctrl+N
- 选择当前工作的语言环境 Ctrl+Option+Shift+H
- 增加一些基础的文档结构,doctype+Tab键然后选择2.增加必须的根节点html然后按Ctrl+< 然后按回车会给你留一些空间输入内容。
- 现在输入header区域,head+Tab键。在title中输入Apple Products。按两次方向键下,按回车给body留出空间。
- 输入body然后按Ctrl+< 然后按回车键。
- 离开head区域,现在创建一个标签元素。按Ctrl+< 然后输入h1 再按Tab键跳到内容区输入 Computers TextMate Runs On: 然后按Apple+回车两次。跳过关闭标签。并留出一些空白区域。
- 同样的办法,创建ul标签。输入下面内容
Mac mini
iMac
Mac Pro
Macbook
Macbook Pro
你需要选择这些内容,然后才能一次给它们添加上标签。首先把你的光标移动到最后Macbook Pro的右边,然后按Shift+Option+左两次来选择这一行,再按Shift+Option+上最后按Shift+Option+左把空格也选上。现在使用最牛B的Ctrl+Shift+Apple+W组合键。 - 使用Ctrl+Option+Apple+P来预览
接下来我要教你如何给刚刚的列表增加点东西以便识别哪些是台式机哪些是笔记本:
- 按Ctrl+Shift+L选择第一行。按住Shift再按两次方向键下。
- 编辑选择行快捷键是Option+Apple+A
- 按Option+左 两次输入( desktop )
- 同样给后两行增加 ( laptop )
如同你看到的 Edit Each Line in Selection 允许你一次给多行添加或者删除内容。它和列选择器很像,它通常用来给一堆列内容增加新内容。
TextMate中文教程之剪切,复制和粘贴
另一项常用的操作是利用 Edit 菜单的剪切,复制和粘贴功能。这些都是其他软件常见的功能,但是TextMate在这些标准方法的基础之上增加了历史剪贴板。让我们做一个简单的例子来加深理解:
- 新建一个 TextMate 文档 (Ctrl+N)
- 输入下面的文字
Line Three.
Line One.
Line Two. - 你可以通过历史剪贴板来重新安排它们的顺序。移动到文档的第一行(Apple+上),选择这一行(Shift+Apple+L),剪切它(Apple+X)。对最后一行进行一样的操作(Apple+下,Shift+Apple+L,Apple+X)。然后再如此操作最后一行(上,Shift+Apple+L,Apple+X)。
- 现在你可以依次粘贴它们。用Apple+V粘贴你历史剪贴板里面的最后一个记录。如果你想粘贴历史剪贴板里面的上一条记录的话需要按Shift+Apple+V,再次按这个组合键你可以粘贴出最后历史剪贴板里面的第一条记录。现在你可以按希望的顺序来排列这些行了。
如果排序顺序和你想的不一样,别害怕。按Ctrl+Option+Apple+V或者选择Edit -> Paste from Histor, TextMate会打开一个历史剪贴板列表。你可以用方向键来选择条目并按回车选择该条目。或者按ESC退出列表。
注意,粘贴出来的文本的缩进位置是由TextMate根据当前文档而决定的。虽然大多数情况下这个特性可以节省你不少时间,但是可能你偏偏不想这样。希望 Paste Without Re-indent。打开Edit菜单并按下Ctrl键你能看到这个命令。当然你也可以直接使用Ctrl+Apple+V来进行这个操作。如果这个特性让你感到讨厌,你可以在配置中禁用它。


