<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Test Jsonp</title>
<script type="text/javascript">
function jsonpCallback(result)
{
alert(result.msg);
}
</script>
<script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback"></script>
</head>
<body>
</body>
</html>跨域获取json数据
2010年7月19日 由 admin 没有评论 »在Firefox中伪造浏览器请求头信息(User-agent)
2010年7月16日 由 admin 没有评论 »- 在地址栏输入”about:config” 然后回车,进入设置页面
- 在过滤器中输入”user”,进行选项搜索
- 找到”general.useragent.extra.firefox”选项,将该值修改成你所想要的浏览器版本,如”Internet Explorer 8.0″
这样,就实现了http请求头信息中浏览器版本的伪造。
Ecshop二次开发之自定义库文件和模板数据调用
2010年7月14日 由 admin 没有评论 »Smarty的标签非常多,也比较繁琐,所以Ecshop使用了精简版的Smarty,其中用到的Smarty模板语法:
{$keywords} 输出模板变量 {$array.test.abc} 输出二维数组 {$lang.remark_package} 语言包$lang[remark_package] {insert_scripts files='common.js'} 引入js文件 <!-- {foreach from=$property_group item=property} -->xxxx<!-- {/foreach} --> 循环 <!-- {if $package_goods_list} -->xxxx<!-- {/if} --> 判断 <!-- #BeginLibraryItem "/library/goods_tags.lbi" --><!-- #EndLibraryItem --> 引入goods_tags.lbi库文件,相当于PHP的include {*内容*} html注释,只在模板上显示,页面上会被删除掉.
Ecshop二次开发的数据调用,主要动用到以下两个目录下的文件
dwt(模板文件)路径: themes\default
lbi(库文件)路径: themes\default\library
举个例子就很清楚了,是我从网上找来的,由于转载得很严重,所以不知道真正出处。。
我们在themes\default\library下新建一个名为newest_comments.lbi的库文件,写入以下内容:
if(!function_exists("get_new_comments")){ function get_new_comments($num) { $sql = 'SELECT * FROM '. $GLOBALS['ecs']->table('comment') . ' WHERE status = 1 AND parent_id = 0 and comment_type=0 '. ' ORDER BY add_time DESC'; if ($num > 0) { $sql .= ' LIMIT ' . $num; } //echo $sql; $res = $GLOBALS['db']->getAll($sql); $comments = array(); foreach ($res AS $idx => $row) { $comments[$idx]['add_time'] = $comments[$idx]['add_time'] = local_date ($GLOBALS['_CFG']['time_format'], $row['add_time']); $comments[$idx]['user_name'] = $row['user_name']; $comments[$idx]['content'] = $row['content']; $comments[$idx]['id_value'] = $row['id_value']; } return $comments; } } $this->assign('new_comments',get_new_comments(10)); // 10条最新评论 ?> <!--数据调用-最新评论开始 --> <div class="comments"> <!--{foreach from=$new_comments item=comment}--> <div class="t_l f_l"><a href="goods.php?id={$comment.id_value}" target="_blank"> {$comment.content|truncate:15:""}</a></div> <div class="d_r f_r">时间:{$comment.add_time}</div> <!--{/foreach}--></div>
这样一个库文件就做好了。我们发现,库文件可以使用PHP、Smarty标签和HTML混写的写法,这无疑大大降低了我们二次开发的难度。这个库文件的作用,就是取出数据库中的10条最新评论,并且循环输出到模板。
接下来我们就要在模板中调用这个库文件,我们打开首页的模板themes\default\index.dwt(这里的dwt文件和页面都是一一对应,如商品页是goods.dwt,品牌页是brand.dwt)。我们在首页模板适当的地方加入:
<!-- #BeginLibraryItem "/library/newest_comments.lbi" --> @@@这里即使修改了也没反应@@@<!-- #EndLibraryItem -->
这样就实现了自定义库文件的编写和调用。
细心的你可能会发现,在Ecshop的dwt模板文件中,调用库文件标签<– #BeginLibraryItem “/library/和<– #EndLibraryItem –>之间存在着一些和对应的lbi库文件中重复的内容。你可以把它们当作是注释,用Dreamweaver等编辑器编辑模板时候的需要看见的注释。真正的库文件内容还需要到相应的库文件中去修改。好吧 ,就是这些,简单吧。
[Ecshop]让Smarty不用再写assign
2010年7月14日 由 admin 没有评论 »由于工作缘故,开始研究起Ecshop的二次开发。从今天起会陆续写几篇关于Ecshop二次开发的文章和大家分享。
Ecshop使用的是Smarty模板引擎——一种被很多人称为“过时”的模板引擎技术(当然,我也是这么认为的)。Smarty作为一种模板引擎技术,使用它的目的是为了实现MVC。而仅仅通过模板技术实现的MVC,还不能成为真正意义上的MVC。Smarty现在也不是PHP官方推荐的模板技术了。不过在官方的框架Zend Framework中,还是保留了对Smarty的支持。
Ecshop的源码中使用了自己精简的Smarty,功能上基本能满足需求。Ecshop仍然是采用面向过程的编码方式,和Discuz类似。而Discuz的中使用模板变量前是不用assign的。那么在Ecshop中像下面的代码我们能不能也省了呢
$smarty->assign('image_width', $_CFG['image_width']); $smarty->assign('image_height', $_CFG['image_height']); $smarty->assign('helps', get_shop_help()); // 网店帮助 $smarty->assign('id', $goods_id); $smarty->assign('type', 0); $smarty->assign('cfg', $_CFG); $smarty->assign('promotion', get_promotion_info($goods_id));//促销信息 $smarty->assign('promotion_info', get_promotion_info());
当然是可以的。我们在Smarty类中的display方法开头加入以下这几句
unset($GLOBALS['_ENV'],$GLOBALS['HTTP_ENV_VARS'],$GLOBALS['HTTP_SERVER_VARS'],$GLOBALS['HTTP_POST_VARS'],$GLOBALS['HTTP_GET_VARS'],$GLOBALS['HTTP_COOKIE_VARS'],$GLOBALS['HTTP_POST_FILES'],$GLOBALS['HTTP_COOKIE_VARS']); //先清空这几个全局变量 $this->assign($GLOBALS); //把全局变量数组"注入模板"
这样,以后在二次开发中我们就不用写那么多繁琐的$smart->assign 了
PHP开发中使用ORM存不存在性能问题
2010年6月5日 由 admin 2 条评论 »随着PHP开发框架的发展,许多框架都向RoR社区和Java社区取经,引入了 ORM (对象关系映射),方便了我们进行数据库操作。
事实上,一个出色的 ORM,不但要能够支持多种关联关系,以及对象间的泛化和依赖,还应该让开发者可以在对象关系网间自由的导航。开发者不需要操心如何维护对象间的关系,要做的仅仅是将对象间的关系定义出来。只要定义好关系,我们就可以通过直观的代码在对象间进行游历。
以下是从QeePHP的开发手册上抄来的,分析得很有道理:
诸如“作者 -> 撰写的书籍 -> 读者 -> 阅读的书籍 -> 这些书籍的作者”这样的对象导航当然会导致多次数据库查询,但是以此来认为框架的 ORM 性能不佳,其实是不正确的。
因为即便不使用任何 ORM,依赖于手工编写和优化的 SQL 查询,也不可能在一次查询中就从一个“作者”得到跨越了几层关系的“其他作者”的信息。所以,ORM 提供的这种对象导航能力并不等同于性能损失。
另一个更常见的误解就是:查询 10 篇文章及每篇文章的前 5 个评论。这种需求即便是手工编写的 SQL,也需要 10 次查询。所以开发者发现使用“一对多”关联导致多次查询就不应该意外了
除了一些无法避免的 SQL,QeePHP 的 ORM 已经做了大量的优化工作。并且利用延迟查询、In-Memory 缓存、集合对象等技术来进一步减少和消除不必要的查询操作。
Thinkphp2.0中关联模型中的一个bug
2010年5月10日 由 admin 2 条评论 »今天天气真好啊。。
在最近一个新项目的开发中,我采用了thinkphp作为开发框架,需求是围绕discuz和uchome进行的二次开发。
我在Conf/config.php配置文件中设置的默认表前缀是”a_”,但由于需求需要,我需要从论坛的”cdb_activitities” 和”cdb_threads”两张表中进行关联查询。按照tp开发手册上所说,我自定义了一下两张表模型的表前缀,并加上关联规则:
/** * Activities模型 * * @author xhowhy */ class ActivitiesModel extends RelationModel { //put your code here protected $tablePrefix = 'cdb_'; public $_link = array( 'threads'=>array( 'mapping_type'=>HAS_ONE, 'class_name' =>'threads', 'foreign_key'=>'tid' ) ); } /** * Description of ThreadsModelclass * * @author Administrator */ class ThreadsModel extends RelationModel { //put your code here protected $tablePrefix = 'cdb_'; }
可关联后进行查询,发现class_name返回的是bool(false)。我很奇怪,就算是没有被关联的数据,那返回的也应该是null,怎么会是bool(false)。后来经过查看tp源码中的Thinkphp/Lib/Think/Core/Model/RelationModel.class.php文件,终于在170行找到原因:
// 获取关联模型对象 $model = M($mappingClass);
可以看出,在生成关联模型对象的时候,源码中采用了M函数,而在Thinkphp/common/function.php中定义的M函数的作用是“M函数用于实例化一个没有模型文件的Model”。很显然,根据上下文,这里应该使用D函数。因为就算是关联模型,也不一定没有模型文件,同样有可能是自定义表前缀、甚至是跨库操作。
所以代码应该改成:
// 获取关联模型对象 $model = D($mappingClass);
问题成功解决了。
推荐一款挑战河蟹的利器——河蟹工具条
2010年5月7日 由 admin 没有评论 »国内的一位牛人发布了一款Web辅助工具条(原名:河蟹工具条CrabBar)。
使用方法与今天刚发布的QQWeb输入法类似。特点是“无需下载客户端软件,简单设置后即可在线使用”
总而言之很强大,推荐大家使用。
http://www.skiyo.cn/ 中的某篇文章,并且你想对其进行评论,这时候请在地址栏中输入以下代码:
javascript:void((function(){ var e=document.createElement('script'); e.setAttribute('src', 'http://crabbar.googlecode.com/svn/trunk/crabbar.js'); document.body.appendChild(e);})())稍等3秒左右,等待工具条加载完毕后,会在你浏览器中正中央出现河蟹工具条。这时候你就可以在我的博客中的评论框中进行评论,然后选中你想要改变的文字,并且点击工具条上的“菊花文”,这些文字就变成菊花文了。
[视频][音乐]孙燕姿-垦丁音乐嘉年华-2010-Kending Live2010-Stefanie Sun
2010年4月29日 由 admin 没有评论 »今天无意在QQ音乐上看到燕姿4月初的时候参加的垦丁音乐嘉年华,最近动作很频繁哦。。看样子新专辑已经不远了
4月4日晚, 垦丁音乐嘉年华热烈引爆,久未露面的孙燕姿压轴登台献唱,这也是她睽违台湾一年多以来的首次演出,自然成为众人关注的焦点。当晚,孙燕姿一身红色民族风衣服加上中分长发,有别于以往的个性女生形象,愈发成熟、女人。
MP3:
Tracklist
01.神奇
02.超快感(变奏版)
03.我不难过
04.完美的一天
05.遇见
06.志明与春娇(原唱: 五月天)
07. 我怀念的
08.The Moment
09.绿光(变奏版)
Download
Rapidshare
http://rapidshare.com/files/377651282/myvoiddeck.com.live.zip
Mediafire
http://www.mediafire.com/?zowzjzmmuko
Zshare
http://www.zshare.net/download/75141832f42621e1/
Zippyshare
http://www2.zippyshare.com/v/1411991/file.html
Limelinx
http://limelinx.com/files/ca970a86787846f4e4e72682ed746166
Megaupload
http://www.megaupload.com/?d=QB44KRJH
设计的实用性
2010年4月13日 由 admin 2 条评论 »事情的起因是,去年网络中心achao老师让大家做一个学校FTP搜索引擎的首页,各位Computer fans开始各显神通。可其实老师的本意是让大家做一个HTML页面出来,有些同学误解老师的意思,拿ps画,而画完了,却又没人懂得切图,更没人写CSS和JS。这情况是我早就料到的。然而下面说的是我没料到的事。
昨晚到网络中心去,给小危老师“辅导”毕业设计(囧,要不怎么说)。他给我看了Pluwen童鞋画的搜索引擎首页设计图,说achao让他试着做一个这样的页面,可他做了几天了,还是没做出来。我平常是几乎不做页面的人,因为我不喜欢处理那么多浏览器的兼容性问题。但我对css还是略有了解,况且既然别人有困难,我一向是很乐于帮助的。我和小危探讨了图如何切之后,让他用ps把图切好,我开始写代码。小危老师对我不用Dreamweaver的可视化操作来设计网页很惊讶,我表示专业人员都是这样的切图的- -其实网页设计上我也只是个半桶水。。页面做好之后,在IE6和火狐下测试,发现导航条在火狐下会下移10个像素。我知道这是IE6的问题,使用了一个IE6 hack技巧之后,问题解决了。(没料到的是最后这件事竟然是我做的。。)
在做导航条的动画切换时,我发现Pluwen的设计之中采用了较多的颜色渐变。这样做的后果就是,在切换到其他导航菜单的时候,当前被激活菜单的背景色会和周围的颜色渐变格格不入。也容易导致切图失败——因为你总要去涂抹原图,往往还费力不讨好。可见这些花俏的特效还是不能滥用,除非你能把握到最终的效果。在更多的时候,设计还是要以实用为好。




