用Zoundry Raven发表带Slug和可自定日期的文章
用Zoundry Raven发表带缩略名(Slug)解决方案
在micolog后台的系统设置里,我使用了默认结构化链接为%(year)s/%(month)s/%(day)s/%(postname)s.html,这样我的文章的链接将是2009/11/18/slug-name.html的形式,您可以把slug-name换成其它喜欢的缩略名,使得链接的指向一目了然。在网页上写文章时,编辑器下方有个Slug文本框可以设置,但在使用Zoundry Raven发表时,即使我在软件"设置"里面加了缩略名,可还是没效果。

博客程序目录下的api_rpc.py是完成接受Zoundry Raven的数据并完成发表工作的。该文件里面的metaWeblog_newPost方法具体完成发表新文章的功能,它的第二个参数struct传入的就是博客的数据。我测试了一下,发现当我把Zoundry Raven的很多属性都设置上后,最终传到metaWeblog_newPost的struct有以下几个属性及它们的内容:
- mt_keywords : 标签Tags
- mt_convert_breaks:未知
- title:标题
- description:正文
- dateCreated:日期
唯独没有wp_slug,我在想是不是WordPress才支持,但无论如何,这不是api_rpc.py没处理这个问题,而是Zoundry Raven没传递过来。要在Zoundry Raven上找解决方法似乎更难些,于是我想这样来解决吧,把Slug附加到Title后面。
定义:Zoundry Raven发文的struct结构中的title值包含Title和Slug,标题最后一个@(如果存在)之后的所有字符串为Slug,之前的为标题。
示例:
"今天真冷" == Titile: "今天真冷" ; Slug: 无
"今天真冷@cold-day-today" == Title:"今天真冷" ; Slug: "cold-day-today"
"我的邮件是xxx@yyy.com@my-email" == Title:"我的邮件是xxx@yyy.com" Slug:"my-email"
就这样,不用担心@做了特殊符号而输入不了,只要在写完的标题之后加上@slug-name即可。下面是api_rpc.py文件要修改的代码,后面有注释中文的就是要改动的行,很容易找到这些行的:
for cate in cates: c=Category.all().filter('name =',cate) if c: newcates.append(c[0].key())
titleAndslug = struct['title'].rsplit('@',1) #添加这一行,把Title分离 entry=Entry(title = titleAndslug[0], #修改这一行,取出标题 content =struct['description']+string, categorie_keys=newcates )
if struct.has_key('mt_text_more'): content=struct['mt_text_more'] if content: entry.content=entry.content+"<!--more-->"+struct['mt_text_more'] if struct.has_key('mt_keywords'): entry.settags(struct['mt_keywords'])
# if struct.has_key('wp_slug'): #注释掉这行
# entry.slug=struct['wp_slug'] #注释掉这行 if len(titleAndslug)>1 and titleAndslug[1]!='': #添加这一行,如果长度>1则表示有Slug entry.slug=titleAndslug[1] #添加这一行,将Slug赋值
这样就可以实现了,以后用Zoundry Raven写文章时就记得把Slug加在标题后面吧,用网页的编辑器对这个就无效了,您需要在网页编辑器下面的Slug文本框添加。
用Zoundry Raven设置发文时间
如前面提到的,如果在发文的时候,设置了发文的时间的话(选中上图中的"覆盖发布时间"),那么Zoundry Raven传递给api_rpc.py的struct里就有一个dateCreated的值,它是这样的格式:YYYYMMDDTHH:mm:ssZ,如20091118T12:44:46Z 。在api_rpc.py里面处理一下这个值并赋值给entry里的date即可。代码如下,有中文注释的即为修改的行,很容易找到在哪里加入:
if struct.has_key('mt_excerpt'): entry.excerpt=struct['mt_excerpt']
if struct.has_key('dateCreated'): #如果有日期属性 d_s = str(struct['dateCreated']) #格式:YYYYMMDDTHH:mm:ssZ year = int(d_s[0:4]) #获取年,int类型 month = int(d_s[4:6]) #获取月 day = int(d_s[6:8]) #获取日 hour = int(d_s[9:11]) #获取时 minute = int(d_s[12:14]) #获取分 second = int(d_s[15:17]) #获取秒 d = datetime(year,month,day,hour,minute,second) #建立该时间的对象 entry.date = d #赋值给entry里的date
修改之后记得appcfg.py update更新哦,如果想安全点测试,可以通过修改app.yaml里面的version来实现,这时就可以在App Engine后台选择版本了。
转载请注明:来自pugWoo's Life
本文地址:http://www.pugwoo.com/2009/11/18/zoundry-set-slug-datetime.html
6 条评论
我要留言Zoundry Raven 发表于 2010-06-14 at 14:56 回复 引用
pugwoo 发表于 2010-06-14 at 19:54 回复 引用
这个是我设置错了,不好意思误导大家啊
mulberry outlet 发表于 2011-11-22 at 16:40 回复 引用
christian louboutin replica high heels in our online uk store. Your shoes sales prices will save. Christian Louboutin Knockoffs shoes sale now, newest styles of christian louboutin high heels in hot sale now. Welcome to purchase!