Posts Tagged with textpattern

Textpattern不能自动保存,头痛阿

Textpattern的编辑器真得是简陋的不能再简陋了,不支持所见即所得的富文本编辑倒也没什么,简单就是美嘛,不过不支持撰写时自动保存的确是让人有些头痛

本来是写另一篇的,查字典看语法用日语写了一大通,结果Safari一个崩溃…紧接着我也崩溃了,实在没心情再重复一遍

其实很多东西可以很简洁甚至简陋,但是必要的功能最好还是又的不是么,又或者,textpattern本来就不建议在线编辑?

不过不管怎么样,用了些日子的Textpattern,还是很喜欢的,很简单,又很邪恶的东东

PS:尝试了一下textpattern的trackback插件,还是不错的,不过似乎没有考虑spam的问题,暂时还是不加了,有空再研究研究

Textpattern 4.10

程序换完了,模板搞好了,消停了两天又坐不住了,于是乎。。。把textpattern从4.0.5升级到了svn的trunk版本,4.10

没什么太大的变化,不过有些插件已经不太工作了,比如 rss_admin_quikpik ,而 rss_article_edit , rss_live_archive 等插件的后台设置也不行了,后台检测也是错误警告一大堆

还是开发版本的缘故吧,而且原本textpattern的更新就比较慢,所以也不是很期待能有什么比较大的改变,其实现在的4.0.5就已经很不错了,呵呵

  • 撰写页面, 高级选项里的文章标记语言部分从原来的三项增加到五项,添加了Strip Tags和Textile Lite。其他没什么大的变化,只是布局稍微改变了一下
  • Section的设置部分UI有所变化,添加了parent section的设置,现在可以设置级联section了

变化不多,不知道bug多不多,用用看吧

Textpattern Plugin Creator

熟悉了Wordpress的插件体制的用户,一下子转到Textpattern,对其插件系统可能会很不适应,就像我一样…

Wordpress设置了专有的插件目录,按照特定的格式编写php文件,放到插件目录并在后台激活就可以了,而Textpattern则不同

在Textpattern中,一个插件不仅要遵循某种格式,而且在发布前要经过所谓的“编译”,而安装后的插件也不是以文件形式来存放,而是放在数据库的txp_plugin表里

大致看了一下表的字段,除了版本作者等基本信息外,有三个比较有意思的字段: code, code_restore, code_md5

第一个code字段保存的是插件源代码,也是当前正在工作的版本

第二个code_restore字段保存的是插件的初始源代码,也就是安装时候的源代码,因为textpattern允许用户在后台随时修改插件代码,而修改后的代码会单独保存在code字段,不会涉及到初始的代码,这样在必要时可以做恢复

第三个code_md5字段保存的是插件md5校验码,大概是用来比较当前版本和初始安装的版本比较有没有变化吧

跑题了,回头看看plugin所谓的编译吧

翻了一下官方的插件模板,发现所谓的编译其实很简单,就是新建一个数组,在数组里填入插件的作者版本帮助和源码,然后算出md5一并保存,接着对这个数组序列化并转换成base64编码,不难猜到textpattern后台安装插件的动作了,无非是所有操作的逆操作

不过每次都修改模板并运行获得源码似乎也挺麻烦的,于是借鉴zem plugin template写了一个简单的“编译器”,顺便学习了一下Sajax,和我一样懒得可以用这个吧,呵呵

Textpattern Plugin Creator

简单到简陋的东西,使用说明也免了吧,谁叫我懒呢…

迁移: Wordpress 2 Textpattern

Textpattern带了Wordpress的导入脚本,本以为一帆风顺,结果却问题多多,不得已修改了一下脚本,现总结一番
*Update: 所有修改都在 textpatter/includes/import/import_wp.php*
*1. 中文乱码*
老问题了,不过一般都可以用SET NAMES查询来解决,这次也不例外

mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';

改成

mysql_select_db($b2db,$b2link);
$results[]= 'connected to wp database. Importing Data';
mysql_query ("set names 'utf8';");

*2. 打开评论*
Textpattern导入文章默认是关闭评论的,这个比较郁闷
差不多刚才那个地方,紧接着是从wordpress里取出post的查询语句

$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();

修改查询语句,取出原来post的评论状态字段:

$a = mysql_query("
select
".$wpdbprefix."posts.ID as ID,
".$wpdbprefix."posts.post_date as Posted,
".$wpdbprefix."posts.post_title as Title,
".$wpdbprefix."posts.post_content as Body,
".$wpdbprefix."posts.comment_status as CommentStatus, /* 评论状态 */
".$wpdbprefix."users.user_login as AuthorID
from ".$wpdbprefix."posts
left join ".$wpdbprefix."users on
".$wpdbprefix."users.ID = ".$wpdbprefix."posts.post_author
",$b2link) or $results[]= mysql_error();

保存post到textpattern的查询语句也要修改:

$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();

改成:

$q = mysql_query("
insert into `".PFX."textpattern` set
Posted = '".addslashes($Posted)."',
Title = '".addslashes($textile->TextileThis($Title,1))."',
url_title = '".stripSpace($Title,1)."',
Body = '".addslashes($Body)."',
Body_html = '".addslashes($Body_html)."',
AuthorID = '".addslashes($AuthorID)."',
Category1 = '".addslashes($Category1)."',
Category2 = '".addslashes($Category2)."',
Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',
Section = '$insert_into_section',
uid='".md5(uniqid(rand(),true))."',
feed_time='".substr($Posted,0,10)."',
AnnotateInvite = '$default_comment_invite',
Status = '$insert_with_status'
",$txplink) or $results[]= mysql_error();

*3. 永久链接*
textpattern的永久链接真是不敢恭维,居然不支持中文,如果直接导入的话,所有的文章永久链接里的中文都将丢失,当然用id方式的没关系,但是对于我等使用/year/month/day/title格式的就...为了保持无缝切换(因为之前wp的永久链接就是这个格式),对脚本再一次修改
因为所涉及的查询语句和之前打开评论的完全一样,所以简单说一下,不再重复
1) 取出链接
在刚才插入

".$wpdbprefix."posts.comment_status as CommentStatus,

的地方再插入一句

".$wpdbprefix."posts.post_name as PostName,

2) 保存链接
在刚才插入

Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',

的地方找到

url_title = '".stripSpace($Title,1)."',

修改成

url_title = '".addslashes($PostName)."',

*4. 用户显示名称*
之前用wp一直用admin用户发表文章,但是显示名称改成了自己的名字,这样导入的话所有文章的作者名字都会是原始的admin,是个小问题,不过总是看着不舒服,一道改了
找到

.$wpdbprefix."users.user_login as AuthorID

修改为

".$wpdbprefix."posts.post_name as PostName,

*5. tags丢失*
当然这个是对于wp 2.3以上用户而言
在取出post之后是一个while循环,挨个处理post,就在这里取tags吧
找到

while($b=mysql_fetch_array($a)) {
//Clean ugly wp slashes before to continue
$b = undoSlash(undoSlash($b));

在后面加入:

$tags = "";
$t = "
select t.name from
".$wpdbprefix."terms AS t,
".$wpdbprefix."term_relationships AS r,
".$wpdbprefix."posts AS p,
".$wpdbprefix."term_taxonomy as ta
where
p.id=".$b['ID']." and p.id=r.object_id and r.term_taxonomy_id=ta.term_id and ta.term_id=t.term_id and ta.taxonomy='post_tag';
";
$e = mysql_query($t, $b2link) or $results[] = mysql_error();
$tag = mysql_fetch_assoc ($e);
if ($tag) {
$tags = $tag['name'];
while ($tag=mysql_fetch_assoc ($e)) {
$tags = $tags . ',' . $tag['name'];
}
$b['tags'] = $tags;
}

tag取出来了,再作为keyword保存就很简单了,在保存post的地方,也就是在刚才插入

Annotate = '".addslashes($CommentStatus == 'closed' ? 0 : 1)."',

的地方,加入一句

Keywords = '".addslashes($tags)."',

这样就差不多了,然后转个tru_tags插件就和以前一样了
*其实2.3版本的wp已经取消了分类的数据库表,而是和tag的数据库表合并起来,所以textpattern(4.0.5)的导入脚本是不支持tags并且也不能正确导入分类的*

初试Textpattern

换到Textpattern了,不是wordpress不好,只是有点腻了,大概我真的有什么更新强迫症之类的,所有的东西都是最新版,可以称作“man living in the edge“了,哈哈

说不清为什么选择了Textpattern,有人说Textpattern简洁,有人说Textpattern灵活,也有人说Textpattern快速,而我,大概只是第一次看到Textpattern,就觉得有什么东西在吸引着我吧

Txp提供了wp导入,不过问题多多,中文乱码,永久链接,tag,分类…网上搜了一下,发现用Textpattern的人还真不多,也或许是用Textpattern的人本来也很个性的不屑于写这些东西

于是自己动手,修改了一些代码,把wp里的post都转过来,改天把修改的代码放上来吧

Txp的论坛真得可以用冷清这个词来形容,其他资源像插件和模板之类的相对于wordpress也好像只能算个零头,嗯…

现在开始要稍微学一下Textile了,大致看了一下语法,和很多wiki的语法很像,很快就能熟悉起来了吧