Monthly Archive for 五月, 2010

Thinkphp2.0中关联模型中的一个bug

今天天气真好啊。。
在最近一个新项目的开发中,我采用了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);

问题成功解决了。

很不错的原型设计软件

http://www.balsamiq.com/products/mockups

要说的一点是这款软件是要付费的,79美元(也可以免费使用,如何免费,请看网站上的说明)。作者说在2008年,这款软件就从1,322位付费用户那获得了162,302美元的收入(其 中仅12月份就有39,000美元),这证明了只要是提供真正价值的服务和软件,就能够创造很好的收入,即使在经济萧条的寒冬里。

推荐一款挑战河蟹的利器——河蟹工具条

国内的一位牛人发布了一款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秒左右,等待工具条加载完毕后,会在你浏览器中正中央出现河蟹工具条。这时候你就可以在我的博客中的评论框中进行评论,然后选中你想要改变的文字,并且点击工具条上的“菊花文”,这些文字就变成菊花文了。