25
08年十二月
最近在看django,觉得这种快速开发的framework还是不错的。
但是也有他们存在的问题,尤其是刚开始不久的。兼容性是个大问题。一样的代码,升级了就不能用。
在做django管理试验的时候就遇到了问题,老板本的就不说了,我用的1.0.2是要做如下操作才可以。
urls.py
去掉
- from django.contrib import admin
- admin.autodiscover()
- (r'^admin/(.*)', admin.site.root),
前面的注释
setting.py
INSTALLED_APPS
添加
‘django.contrib.admin’,
要建立一个admin.py,内容如下:
- from django.contrib import admin
- from jobs.models import Job
- class JobAdmin(admin.ModelAdmin):
- pass
- admin.site.register(Job, JobAdmin)
其中Job是model的类名字
还有,需要修改
models.py里的
__str__ 为 __unicode__
不然会出现
Caught an exception while rendering: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)
贝贝爸 发表在 日记图片 |
3
08年十二月
Popularity Contest是个不错的插件,可以根据点击量,评价次数,trackbacks等计算一个文章的受欢迎程度,然后列出来。为了跟用户当前浏览的页面相关性更好,我做了一些修改。
这个插件有2个function可用
akpc_most_popular_in_cat和akpc_most_popular,分别是指定一个分类id或取当前分类和所有的排名。
但是akpc_most_popular_in_cat有一点问题,就是原来的sql语句是在show_top_ranked_in_cat里面的sql是
WHERE tt.term_id = ‘”.intval($cat_ID).”‘
这样,只能在一个分类里面查找,需要修改成支持多个分类id的。改成如下
WHERE tt.term_id in (”.$cat_ID.”)
这样就支持多个分类id了,还有一个问题是取的当前的相关分类id,我们已经解决了。在sidebar.php里面加入如下代码,即可。根据不同的theme,可能需要做些调整。
<li id="hot-article" class="sb1">
<h2 class="widgettitle">热门文章</h2><ul class="pop">
<?php if ( function_exists('akpc_most_popular') ) : ?>
<?php if (is_category()) {
//echo $cat;
$categories= get_categories('child_of='.$cat);
$categoryIDS = array($cat);
foreach ($categories as $category) {
array_push($categoryIDS, $category->term_id);
}
$categoryIDS = implode(",", $categoryIDS);
akpc_most_popular_in_cat(10, "<li>", "</li>", $categoryIDS) ;
}else if ( is_single()){
$categories = get_the_category();
$categoryIDS = array();
foreach ($categories as $category) {
array_push($categoryIDS, $category->term_id);
}
$categoryIDS = implode(",", $categoryIDS);
akpc_most_popular_in_cat(10, "<li>", "</li>", $categoryIDS) ;
}else{
?>
<?php akpc_most_popular($limit=10); ?>
<?php }
endif; ?></ul>
</li>
贝贝爸 发表在 原创技术文章 |
1
08年十二月
wordpress的很多sidebar展示内容都是静态的,比如最新评论,最新文章等。不管首页,分类,还是单页都是一样的。原来写过一篇如何显示wordpress当前分类的文章列表?,这是针对single page的。其实还可以在分类页面做一些工作。
单个的文章页面很简单就用
get_the_category
返回的是一个对象的数组,因为一个文章可能属于多个分类。
分类页面简单的可以直接用
$cat
这个变量,但是这样其实是不完美的,因为当前分类还可以有子分类,怎么拿当前分类的所有子分类id呢?用
get_categories(’child_of=’.$cat);
下一篇贴一个把分类相关的热门文章列在侧边栏的代码。
贝贝爸 发表在 原创技术文章 |
11
08年十一月
继上篇如何使wordpress 2.6.X启用缓存加速开启word2.6.3的cache后,速度感觉有所提高。但是出现了一些问题。
一个是如果关闭cache,则会出现了
WordPress database error: [Table 'wp.wp_categories' doesn't exist]
SELECT * FROM wp_categories
?>
的报错信息。查了一下,是因为版本不兼容的问题,用的是老版的cache.php,里面有一个取分类的功能。原来有XXcategories这个表的。没办法
找到
if ($dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories"))
替换成
if (1<0 && $dogs = $wpdb->get_results("SELECT * FROM $wpdb->categories"))
让这一句不执行就没错误,也可以正常显示了。
最好的办法应该是找到其他的版本,或者修正这句话。。。等空下来再说。//TODO
另外一个问题是开了cache后,评轮的次数也会缓存,就是后台你审核或者删除评论,次数不变。要等缓存清除后才能正确显示,偶的解决方法比较野蛮:
找到
wp_update_comment_count($comment->comment_post_ID);
大概是在787 行,在return前增加一句wp_cache_flush();即可。
应该也有更优雅的方法,比如搞个插件啥的。。可是偶现在不会。。
贝贝爸 发表在 原创技术文章 |
9
08年十一月
有时候写python关于网络的程序。比如用urllib2等module发http请求的时候,发现有时候会有死掉的情况,就是程序没任何反应,也不是cpu,内存没资源的问题。具体情况还没搞明白那里出的问题,但是找到一个解决办法。就是设置socket time out,即:如果一个请求超过一定的时间没有完成,就终止,再次发起请求。
这个是从2.3有的功能用法如下:
settimeout( value)
Set a timeout on blocking socket operations. The value argument can be a nonnegative float expressing seconds, or None. If a float is given, subsequent socket operations will raise an timeout exception if the timeout period value has elapsed before the operation has completed. Setting a timeout of None disables timeouts on socket operations. s.settimeout(0.0) is equivalent to s.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1). New in version 2.3.
就是settimeout()里面填一个数值。小心别太小,别正常的请求也不能完成。
贝贝爸 发表在 原创技术文章 |
8
08年十一月
一直觉得wordpress的性能不好。打开它自己的查询次数和花费时间统计,一个首页有44的查询,一个单文章页面有52次查询。上边这些数字可能跟我装的一些插件或者增加的功能有关。网上说可以开启自带的cache缓存功能。
define(’ENABLE_CACHE’, TRUE);
在2.6.3版本却不行,google了半天的,检查了半天的文件夹属性,还是不行。于是换了一个用老wordpress的网站,用的是2.1.3,打开后却马上可以了。百思不得其解。又是检查了半天。直到最后要放弃了,把2个wp-include/cache.php文件都拿下来做对比,发现区别很大。把老的cache.php替换到2.6.3上,马上就可以了。原来
wp 2.6.3的cache.php 和 2.1.3不一样,启用后,效果还可以。首页的查询从44次数降到了11,单个文章页面,从52减少到了15次。总体花费的时间变化倒不是很大。但是心理感觉还是不错的。
开启后有2个问题,一个是未审核留言的数字,被缓存了。还有一个是换了cache.php文件后,如果关闭缓存,会在头部有一个抱错信息。说是SELECT * FROM wp_categories 。这个表不存在。
下篇再说怎么解决。
贝贝爸 发表在 原创技术文章, 日记图片 |
7
08年十一月
wordpress的Most Commented插件不错,可以显示现在评论最多的文章和页面。
但是有个问题,有些网站的留言本和某些页面也是可以留言的,那么留言最多的就肯定是这些个页面了。于是想去掉页面(page)的评论,只要文章的。
修改很简单找到
if (!$show_pass_post) $request .= " AND post_password =''";
在后边,添加
$request .= " AND post_type !='page' ";
即可。
测试成功。
贝贝爸 发表在 原创技术文章 |
4
08年十一月
wordpress单个文章页面的侧边栏如果还是显示和首页,分类页面一样的文章就没什么意思了。下面的代码是显示文章所属分类的文章列表,这样可以让访问者可以方便查看相关文章。回头再改改,看看能不能在分类页面上显示最受欢迎的文章。
添加下列代码在合时的位置即可
<?php
/*
single page?show current category articles
*/
?>
<?php
if ( is_single() ) :
global $post;
$categories = get_the_category();
foreach ($categories as $category) :
?>
<li class="widget widget_recent_entries" id="<?php $category->term_id;?>-posts">
<h2 class="widgettitle"><?php echo $category->name; ?></h2>
<ul>
<?php
$posts = get_posts('numberposts=5&category='. $category->term_id);
foreach($posts as $post) :
?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php
endforeach; endif ; ?>
<?php
/*
end show current category articles
*/
?>
贝贝爸 发表在 原创技术文章 |
22
08年四月
jquery是个好东西,现在有很多基于它的plugin,tablesorter 就是一个。
上面有好多例子,就不转贴了。最近做了一个小东西,用到了它。
因为是财务的东西,金额用到了千分位,就是每多三位,加一个逗号。原来用都是按照数字来的,加了这个逗号之后,tablesorter不认为它是数字了,他认为234.00比1,234.53大。这也难怪,看了例子,如果是这种货币格式,前面如果是$符号的话,这种格式排序是没问题的。
仔细看了一下文档,原来人家已经考虑到了这样的问题,加下面代码就可以了。
$("#myTable").tablesorter({
headers: { 4: {sorter:"currency"}}
});
测试通过
另:推荐一篇关于中国教育讨论的文章
贝贝爸 发表在 原创技术文章 |
23
07年七月
主要功能是根据贝贝的出生日期来显示贝贝现在多大了,实时显示贝贝的成长。
用当前时间减去出生的日期,但是可以显示出来几岁,几个月,和几天。
天的算法有点问题,没有考虑到大小月和2月份。
function getDays() {
putenv("TZ=Asia/Chongqing");
$by = 2006;
$bm = 7;
$bd = 7;
$rday="";
$today = getdate();
$by = $today[year] - $by;
$bm = $today[mon] - $bm;
$bd = $today[mday] - $bd;
if ($bd < 0) {
$bd = 30 + $bd;
$bm--;
}
if ($bm < 0) {
$bm = 12 + $bm;
$by--;
}
#print $by."-".$bm."-".$bd;
if ($by > 0) {
$rday = $by . "岁";
}
if ($bm == 0&&$bd == 0){
$rday .="生日";
}else{
if ($bm == 0){
$rday.="零".$bd."天";
}elseif ($bd == 0){
$rday.=$bm."个月整";
}else{
$rday.=$bm."个月".$bd."天";
}
}
return $rday;
}
?>
?>
用的时候直接
就可以了
空下来再完善以下,再写一个js的版本。
有bug请拍砖,有好的写法请留言。
贝贝爸 发表在 原创技术文章 |