分类目录
文章索引模板
Wordpress的K2模板BUG - 九月 8, 2009 by yippee

Fatal error: Call to undefined function is_active_module() in /opt/lampp/htdocs/wordpress/wp-content/themes/k2/theloop.php on line 76

找了下资料,要是我自己的,就不用这个模板了

1. If you get this error:


    Fatal error: Call to undefined function: get_option() in [...]/wp-content/themes/k2/theloop.php on line 28


To fix this, disable all the plugins that load their own version of prototype.js.


这个也太狠了··其他用了prototype的插件都得禁用


I had a slight issue with the 2.2 Wordpress upgrade. I got a “undefined function is_active_module()” from k2. The solution was to run the uninstall k2 function from its options page. Then set the theme as current and all is well.


这个搞得只有两栏目了


I solved the problem with Call to undefined function: is_active_module() and can continue using the sidebar widgets that I love.
It is not clean but, commenting the code that manages asides works.
I have commented the lines 76 to 78 in theloop.php


//if (is_home() and is_active_module(‘asides_sidebar_module’)) {
// $hide_asides = true;
//}


I noticed that I had no problem with sidebar widgets in all the other pages but home.
Now everything works smoothly. Hopefully I will have some time in this century to see how I could save asides, but I do not use them :-)
这个不知道有没有什么后遗症··


Installation


    * Copy ‘TechnoBlue’ folder to the ’styles’ folder of TripleK2
    * Go to Presentation > K2 Options
    * Select technoblue.css as the K2 Scheme
    * Click ‘Update Options’ to save

标签:,
20090710 php sqlite wordpress - 八月 18, 2009 by yippee

今天开始折腾WP了


要在PHP5里面开启SQLITE支持


extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll


否则会报告:


Fatal error: Call to undefined function sqlite_open() in xxx.php on line XX


<?php
print_r(PDO::getAvailableDrivers());


      $db=sqlite_open(“db.sqlite”); //打开db.sqlite数据库,如果不存在则尝试创建。
 sqlite_query($db,”drop table test”);
 sqlite_query($db,”create table test (id INTEGER PRIMARY KEY,name text);”); //创建test表,id字段为自动递增主键
 sqlite_query($db,”insert into test (name) values(‘hello’);”); //插入一行内容
 sqlite_query($db,”insert into test (name) values(‘world’);”);//插入一行内容
 $result=sqlite_query($db,”select * from test”); //取得test表的所有内容
 while($row=sqlite_fetch_array($result)) { //通过while循环表中所有内容
   print “”;
   print_r($row); 
   print “”;
 }
 sqlite_close($db);//关闭数据库的连接


?>


输出:
Array ( [0] => mysql [1] => sqlite [2] => sqlite2 ) Array ( [0] => 1 [id] => 1 [1] => hello [name] => hello ) Array ( [0] => 2 [id] => 2 [1] => world [name] => world ) ?>


验证完后,按照 http://wordpress.org/extend/plugins/pdo-for-wordpress/installation/



  • Step 1: unzip the files in your wp-content directory. After unzipping the structure should look like this


    wp-content
    ->plugins
    ->themes
    ->pdo
    db.php
    index.php[maybe]


    The key thing is the presence of the pdo directory and the db.php file in the ‘root’ of the wp-content directory.



  • Step 2: Edit your wp-config.php file so that:


    this line of code is placed directly after the define(‘COLLATE’,”); line:

    define(‘DB_TYPE’, ’sqlite’);    //mysql or sqlite`

    Note: currently only mysql and sqlite are supported. I hope that more flavours will appear soon.


  •  

    标签:, , , ,
    20090709 wordpress sqlite url database - 八月 18, 2009 by yippee

    既然初步决定使用WP,就收集了一些相关的资料


    关于SQLITE:


    系统环境依赖要求:
    主机php套件必须支持SQLite和PDO扩展(不过放心,常见系统都是完美支持的);SQLite的数据库信息存于独立文件中,该文件及文件夹必须要求读写权限。很简单,就这些要求。


    升级更换wordpress数据系统:
    这里指出一个简易的方法:首先在wordpress后台中使用“工具-导出”功能导出.xml文件。


    然后,下载SQLite的wordpress功能插件-“PDO(SQLite) For Wordpress”,将压缩包中的db.php和pdo文件夹放置到wp-content文件夹中。


     


    然后,编辑wp-config.php文件,在define(‘DB_COLLATE’, ”); 后面加入“define(‘DB_TYPE’,’sqlite’);”。


    关于URL重写


    进入管理后台,点菜单紧靠右边的“设置”,点选其下的“永久链接”(Permalinks)
    点选“自定义,请在下面填入自定义结构”,再其下框里输入:/posts/%post_id%.html
    点页面右下按钮“更新永久链接结构>>”保存设置,此时在 Wordpress 的根目录自动生成里一 .htaccess 文件,内容大体如下:
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /codemo/wordpress23/
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /codemo/wordpress23/index.php [L]
    </IfModule>
    # END WordPress
    刷新下你的 Wordpress 首页,便会发现帖子链接都变成形如:http://www.yyyqi.com/codemo/wordpress23/posts/1.html 的静态页形式了,伪静态顺利实现!
    另,其它自定义永久链接写法及对应效果:
    0、
    Permalinks写法:/%year%/%monthnum%/%postname%/
    效果:http://www.yyyqi.com/2007/03/zero-to-riding-the-rails-in-four-months.html
    1、
    Permalinks写法:/%year%/%monthnum%/%day%/%postname%/
    效果:http://www.yyyqi.com/2007/10/14/zero-to-riding-the-rails-in-four-months/
    2、
    Permalinks写法:/%year%/%monthnum%/%postname%.html
    效果:http://www.yyyqi.com/2007/03/zero-to-riding-the-rails-in-four-months.html
    3、
    Permalinks写法:/%year%/%monthnum%/%day%/%postname%.html
    效果:http://www.yyyqi.com/2007/03/15/zero-to-riding-the-rails-in-four-months.html
    4、
    Permalinks写法:/%category%/%postname%.html
    效果:http://www.yyyqi.com/category/zero-to-riding-the-rails-in-four-months.html


    关于数据导入导出···
    wordpress数据库表基本结构:


    wp_options:系统基本设置信息;
    wp_users:注册用户基本信息;
    wp_usermeta:注册用户附加信息,主要包括权限等设置;
    wp_categories: 日记分类,友站链接(blogroll)也包含其中;分类之间也可以有从属关系;公开日记在category_count中计数,私人日记不计数;
    wp_links:友站链接(blogroll);
    wp_link2cat: 友站链接的分类;
    wp_posts:日记,其中的上传的附件和图片也作为其中的记录,不过类别不同,与日记存在从属关系;其中有几个字段好像没用,如: post_category,post_parent
    wp_post2cat:日记(包括附件)的分类;
    wp_postmeta:日记中的一些附加信息,也包括上传附件的一些附加信息,自定义字段也存在这里,如:Jerome’s Keywords的tag属性就是保存在这里的;
    wp_comments:评论,评论的游客的userid为0;


    wordpress仅仅用了 10 个 Table就实现了这么强大的系统,让我钦佩:


        wp_comments
        wp_links
        wp_options
        wp_postmeta
        wp_posts
        wp_term_relationships
        wp_term_taxonomy
        wp_terms
        wp_usermeta
        wp_users


    下面我们按照它们之间的关系来介绍一下这几个表:


    按照功能大致分为五类。


        * user: 用户信息,包括wp_users表和wp_usermeta表。
        * link:链接信息,包括wp_links表。
        * post: 文章及评论信息,包括wp_posts、wp_postmeta、wp_comments。
        * category,link_category,tag:这个是比较复杂的信息模块,它包含了对分类,链接分类,标签的管理,包括wp_term,wp_term_relationships和wp_term_taxonomy表。
        * option: 全局设置信息,包括wp_options表。


    wp_posts
    作为一个博客系统,最核心的当然是博主发表的一些“文章”了,这些“文章”存放的地方就是这个 wp_posts 表了。注意,这里所说的“文章”是加引号的,因为这个表里存放的除了普通的文章之外,还有附件和页面(page)的一些信息。表里面的 post_type 这个字段就是用来标示类型的。还有一点需要注意的就是,这个表里一些字段是针对于 post_type 的特定类型的,比如 menu_order 这个字段是“页面(page)”特有的,用来指定“页面”的顺序。post_mime_type 是针对附件的,来指定附件的类型。


    wp_postmeta
    每篇文章的属性是不可能仅仅用 wp_posts 表里的那几个字段来完全标示的,往往还有一些因人而异的属性:写这篇文章时候的心情,地点等等。这些属性的名称和值类型都是不确定的,因此,Wordpress 采用了元信息(meta)来表示它们。这个表很简单,只有 meta_id, post_id, meta_key, meta_value 这四个字段。post_id 是相关 post 的 id。我们注意到 meta_value 是 longtext 类型的,这里仅是用来存储值,至于值的确切类型,需要程序员来关心。
    在撰写文章的时候,我们可以发现编辑框下面有一个 Custom Fields 的选项,我们可以在这里添加 post 的 meta 信息。


    wp_comments
    用户评论。除了评论的内容以外,还记录了评论用户的名字,邮箱,网址,浏览器类型等信息。比较重要的两个字段是 comment_post_ID 和 comment_approved,前一个用来指示这条评论隶属于哪一篇文章,后一个用来记录审核状况。还有一个比较有意思的是这个 commnet_agent 字段,我们可以利用这个字段来统计一下用户浏览器类型。


    wp_users
    用户帐号表。存储用户名、密码还有一些用户的基本信息。


    wp_usermeta
    类似上面的 wp_postmeta,存储一些因人而异的用户信息。(比如QQ?ICQ?)


    wp_options
    用来记录 Wordpress 的一些设置和选项。里面有一个 blog_id 字段,这个应该是用在 MU 版里面来标示不同的 Blog 的。


    wp_links
    用来存储 Blogroll 里面的链接。


    wp_terms
    wp_term_relationships
    wp_term_taxonomy


    这三个表是这里面关系最复杂的了,在 Wordpress 2.2 及以前的版本中是没有这三个表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 这三个表。对比这两个版本我们可以发现:在 2.2 版和之前的版本,post 和 link 和 category 的关系都是通过各自单独的表来记录的。而在 2.3 版中加入了 tag 的支持,Wordpress 把 post、link、tag 的分类都抽象成了统一的形式,用新的三个表来记录这些信息。
    wp_terms
    记录分类,链接分类,标签的一些简要信息,包括名称,缩写。


    wp_term_taxonomy
    是对wp_terms中的信息的关系信息补充,有所属类型(category,link_category,tag),详细描述,父类,所拥有文章(链接)数量。


    wp_term_relationships
    关系表,多对多的,object_id是与不同的对象关联,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是关联wp_term_taxonomy中的term_taxonomy_id。

    标签:, , , ,
    20090708 wordpress bo-blog - 八月 18, 2009 by yippee

    用了这麽久BOBLOG文本版本,主版本早已经升级到MYSQL了。我这个也许久没有动过了,这几天正好练手.NET SQLITE等。就把BLOG备份到SQLITE里面了。所以这段时间也没有更新。不过FEEDSKY订阅居然还增加了几个,真是奇怪。


    居然已经2000多了。目前的BOBLOG似乎还撑得住,可是占用的空间越来越大了。因此也想试一试WORDPRESS了。


    找了一些资料:


    首先看到一个BOBLOG转WORDPRESS的:从Bo-Blog搬家到WordPress全程攻略。发现要数据库版本的BOBLOG,又找了通文本版本升级到数据库版本的·····实在晕


    http://www.bo-blog.com/weblog/read.php/343.htm


    1. 完整正常安装 Bo-Blog V2.0.1。
    2. 安装后进入2.0的后台,到文章管理中删除自动生成的第一篇日志。
    3. 到2.0的后台的分类管理中删除自动生成的分类 (如果此时程序报错,请忽略)。
    4. 到2.0后台的“数据维护”-“刷新缓存”中,选择“刷新计数器”选项下的“最大ID缓存”,按“确定”。
    5. 上传 convert.php 到您安装 1.7 的文件夹下并在浏览器内运行,按照这个程序的指导完成数据转换。
    6. 程序在完成数据转换后,会要求您填写数据库的一些信息,此时如实填写,即可将所有数据转入数据库中。
    7. 转换完成后,到后台的维护选项中,先刷新所有计数器项目,然后刷新所有缓存。
    8. 在2.0里重新设置联合撰写人,重新更改副管理员撰写的日志的作者。


    http://bbs.bo-blog.com/thread-7863-1-1.html 这里一堆安装包 2.0.3以下版本升级文件包。


    1.首先你得确保你的部落格程序的版本号为1.7.0108.2。
    如果程序为非此版本号,请先升级至该版本。
    程序升级文件包请访问该连接:http://bbs.bo-blog.com/viewthrea … &extra=page%3D1

    2.先将数据备份。这是很重要滴。然后下载1.7~2.0版本的转换程式。
    请访问这里获取:http://bbs.bo-blog.com/viewthread.php?tid=2806&extra=page%3D2

    3.全新安装一个2.0版本的程序。建议安装版本号为2.0.1 sp1版本的程序。
    请访问这里获取:http://bbs.bo-blog.com/viewthread.php?tid=7863&extra=page%3D1

    4.然后根据1.7~2.0的转换程式包里面的要求操作。将1.7的数据转换到2.0.1 sp1里。这里是很关键的一步。要仔细操作。转换成功之后后面的工作会比较容易了。

    5.如果数据成功完整的转换到2.0.1sp1里,那么接下来就开始从这个版本上往上升级至2.1.1版本。请根据下面的向导操作,各个版本之间不可跳跃式升级。因为每个版本之间的数据库都有较大改动,跳跃式升级会带来不可预想的错误。

    2.0.1 sp1 –>2.0.2 sp2 –>2.0.3 beta 1 –>2.0.3 –>2.0.3 sp1 –>2.1.0 –>2.1.1

    建议按照该顺序进行升级。在操作前还是要说一句,请仔细阅读文件包内的相关升级说明后再操作。

    标签:, , , ,
    20090720 wordpress tags 删除 - 八月 18, 2009 by yippee

    20090720 wordpress tags 删除

    SIMPLE TAGS 修改

    SIMPLE TAG功能很强大,可是默认是整个页面搜索TAG,我习惯标题直接放了,并且整个页面搜索内容实在太多,生成的TAG也太多。

    修改:D:\PhpNow\htdocs\wp\wp-content\plugins\simple-tags\2.7\inc

    simple-tags.admin

    // Get objects
    global $wpdb;
    $objects = (array) $wpdb->get_results(“SELECT p.ID, p.post_title, p.post_title FROM {$wpdb->posts} p WHERE {$post_type_sql} ORDER BY ID DESC LIMIT {$n}, 20″);

    直接把P.POST_COMMENT也改为POST_TITLE,让它搜索两次标题

    突然无法批量从管理页面删除TAG,点击删除后整个页面就白了。刷新返回后,TAG又出现了。找了找资料,看了看数据。折腾下,直接从数据库里面把所有TAG干掉了。

    TAG总共关系到三个表

    select a.* FROM `wp_term_relationships` a, wp_term_taxonomy b, wp_terms c WHERE a.term_taxonomy_id = b.term_taxonomy_id AND c.term_id = b.term_id AND b.taxonomy = ‘post_tag’ //找出所有TAG

    delete
    FROM `wp_term_relationships`
    WHERE term_taxonomy_id in (select term_taxonomy_id from wp_term_taxonomy
    where taxonomy = ‘post_tag’) 删除

    可是服务器上居然是MYSQL 4.0,不支持嵌套SELELCT,只好改
    select wp_term_relationships.* from wp_term_relationships
    LEFT JOIN wp_term_taxonomy  ON wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id
    where wp_term_relationships.term_taxonomy_id is not NULL and wp_term_taxonomy.taxonomy = ‘post_tag’

    wp_term_relationships这是POST ID和term_taxonomy_id关联

    SELECT wp_terms . *
    FROM wp_terms, wp_term_taxonomy
    WHERE wp_terms.term_id = wp_term_taxonomy.term_id
    AND wp_term_taxonomy.taxonomy = ‘post_tag’ and wp_terms.term_id >20

    wp_term_taxonomy 是 TAG ID和 term_taxonomy_id  关联

    wp_terms 存放每个ID的名称等

    标签:, , ,
    20090723 wordpress WP Cleaner - 八月 18, 2009 by yippee

    20090723 wordpress WP Cleaner

    WP Cleaner v1.0.1
    用了这个插件手工清除

    这个方法好像太麻烦了
    关掉wordpress的自动保存(autosave)功能
    方法:在wordpress目录/wp-admin/中找到以下四个文件:
    post-new.php
    page-new.php
    post.php
    page.php

    用文本编辑工具打开后在其中搜索“autosave”(不包括引号),都会在相应位置找到这样的一行:

    wp_enqueue_script(‘autosave’);

    通过在该行前加入“//”(不包括引号)来将这一行注释掉,保存。
    这个方法好像无效
    关掉WP自动保存,一劳永逸:

    首先,打开你的代码编辑器,我用的是EditPlus(小巧玲珑),把下面的代码粘帖上去。

    <?php
    /*
    Plugin Name: Disable Autosave
    */
    function disable_autosave() {
    wp_deregister_script(’autosave’);
    }
    add_action( ‘wp_print_scripts’, ‘disable_autosave’ );
    ?>

    保存为close-wp-autosave.php或者其它名字(字母),但是后缀一定要是.php,然后上传到你网站的plugin目录里,然后去管理页面的插件里激活它。就可以自动生效了

    用了个超级切换插件 好像也无效

    WordPress 给用户和插件开发者预留了一个参数,WP_POST_REVISIONS,可以让你轻松关闭文章版本管理功能。

    你可以直接在 wp-config.php 文件中定义 WP_POST_REVISIONS 这个常量,其共有三个参数:

    * true, –1: 默认值,将存储文章每一次的修订;
    * false, 0: 不保存任何修订的版本,但自动保存功能依然有效;
    * >0 的整数: 最多保留的版本数量,超过此数的版本将被删除。

    标签:,
    20090730 c# xml rpc wordpress - 八月 18, 2009 by yippee

    采用 WordPress API wrapper for .Net.


    在POST结构增加


     public string mt_keywords; //标签
            public string wp_slug; //URL别名


    Post pp = new Post();
                    pp.title = nl.name;
                    pp.description = nl.txt;
                    pp.dateCreated = DateTime.Parse(nl.time);
                    TreeNode[] ts = treeType.Nodes.Find(nl.parent, true);
                    if (ts.Length > 0)
                    {
                        pp.categories = new string[] { ts[0].Text };
                        
                    }
                    pp.wp_slug = nl.p;
                    string[] stags = nl.p.Split(‘-’);
                    string strtag = “”;
                    for (int i = 1; i < stags.Length;i++ )
                    {
                        strtag = stags[i] + “,” + strtag;
                    }
                    pp.mt_keywords = strtag;



                    string s = wp.NewPost(pp, true);


    将别名分拆后组成TAG


    然后发布,返回BLOGID号


     

    标签:, , , ,
    20090718 wordpress OK - 八月 18, 2009 by yippee

    搞了半天,终于搞定了。

    由于空间PHP版本的问题,没有办法使用SQLITE

    本机很快就已经搭建完成。

    数据也很快导入了。

    但是发布出现两个问题

    1、当部署到服务器的时候,安装插件的时候,发现TAG不正常显示,直接搜索插件也提示出现未知错误。原本是把自己本机弄好的直接上传,因此重新弄了一次。重新进行干净安装。但是奇怪的是,问题还是存在,然后在网吧又是正常的。

     由于服务器速度问题,数据导入倒出问题,导致折腾了好几天。

    2、数据错位问题,也许由于垃圾留言的影响,导致丢了几个BLOG,结果导入的时候没有发现,直接忽略空白内容,导致错位,标题和内容失配,只好又重新来过,这次在网吧折腾,好像速度会快些。

    主题采用的是:Contrast Style 1.1 三栏,因为比较喜欢堆彻东西。

    插件用了不少

    Antispam Bee 屏蔽垃圾留言的

    Akismet 自带反垃圾留言的,但是不知道到哪里去找被它砍掉的留言(上线才半天,报告干掉了24个)

    Disable Canonical URL Redirection WP默认首页为不带index.php

    Genki Announcement 公告栏

    Peter’s Custom Anti-Spam 增加留言验证码

    Simple Tags 智能标签,这个比较强大

    Some Chinese Please 屏蔽纯洋文留言,上次就被阿拉伯文搞死两个BLOG

    Wordpress Thread Comment 嵌套留言

    WP-PageNavi 页码导航 但是不能输入

    WP-PostViews BLOG点击数

    WP-T-Wap WAP插件

    WP Kit CN 强大 

    用来解决官方 WordPress 没有照顾到的中文相关问题。使用这个插件,你可以显示随机文章,最新留言(最新引用),留言最多文章,发表评论最多的网友,还有真正的文章摘要,等等,真正截断,没有乱码。此插件在桑葚基础上修改,支持最新评论显示表情。支持指定最新评论截断字数。使用了对中文兼容更好的截断算法,现在控制字数更精确了。

    Genki AnnouncementSCP SettingPageNaviPostViewsWP-T-WAPSimple TagsWP Kit CN

    标签:, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
    20090730 wordpress c# xml rpc info - 八月 18, 2009 by yippee

    WordPress 2.7 XML-RPC wrapper for .Net
    http://www.orbifold.net/default/?p=1721
    XML-RPC.Net
    http://www.xml-rpc.net/
    WordPress 2.5 XML-RPC wrapper for .Net
    http://www.orbifold.net/default/?p=1003
    Using Wordpress XMLRPC services | PHP Made Simple
    http://www.phpmadesimple.info/2009/07/05/using-wordpress-xmlrpc-services/
    Weblog Client « WordPress Codex
    http://codex.wordpress.org/Weblog_Client
    3.4. C# XML-RPC Tutorial
    http://www.wordtracker.com/docs/api/ch03s04.html
    CodeProject: Coding Blog Engine with MetaWeblog API Support and Using it with Windows Live Writer. Free source code and programming help
    http://www.codeproject.com/KB/XML/MetaWeblogAPI.aspx?display=Print
    WP-XML-RPCLib2 – SharpLab.
    http://blog.sharplab.net/computer/cprograming/wp-xml-rpclib/3015/
    WP-XML-RPCLib2 – SharpLab.
    http://blog.sharplab.net/computer/cprograming/wp-xml-rpclib/computer/cprograming/wp-xml-rpclib/3015/
    CodeProject: Coding Blog Engine with MetaWeblog API Support and Using it with Windows Live Writer. Free source code and programming help
    http://www.codeproject.com/KB/XML/MetaWeblogAPI.aspx
    MetaWebLog API and Blog Writers – Rick Strahl’s Web Log
    http://www.west-wind.com/WebLog/posts/23858.aspx
    Windows Live Writer Beta 2 Now Available
    http://www.gtrifonov.com/blog/2007/06/06/Windows_Live_Writer_Beta_2_Now_Available.aspx
    Coding blog engine with MetaWeblog API support and using it with Windows Live Writer
    http://www.gtrifonov.com/blog/2006/11/27/Coding_blog_engine_with_MetaWeblog_API_support_and.aspx
    15 Seconds : Programming for the Palm Part 2 – The Synchronization Process
    http://www.15seconds.com/Issue/030722.htm
    C# blog client
    http://www.aspcode.net/C-blog-client.aspx
    The MetaBlog API (Creating and Editing Posts)
    http://geekswithblogs.net/Tariq/archive/2009/07/05/133264.aspx
    public string wp_slug;

    XML-RPC Request Format
    http://www.tutorialspoint.com/xml-rpc/xml_rpc_request.htm
    3.4. C# XML-RPC Tutorial
    http://www.wordtracker.com/docs/api/ch03s04.html

    标签:, , , , ,
    20090813 Wordpress cms BBtheme 修改 - 八月 18, 2009 by yippee

    原来采用的样式是老外的,黑白感觉太过明显了。花了一点时间找了下,采用了国人的。http://www.yippeesoft.com/yippeesoft/helloflash-bbtheme.php WordPress BBtheme CMS。

    基本上用起来了,也调整了一些地方。记录下,方面以后追溯。

    • archive.php:
      • <div class=”postbg”><?php //the_content(”); ?></div> 去除内容部分,只留标题。比较简洁
    • single.php
      • <a href=”http://www.yippeesoft.com/blog/rss2.php”>RSS Feed</a>  修改了RSS地址
      • 将 <?php wp_related_posts(); ?>改为<?php st_related_posts(); ?>
      • 将原代码提取随机文章改为 <?php wkc_random_posts(‘number=10&length=250′);?> 这是WP-KIT-CN插件提供的
    • topbar.php
      • 注释了’Categories’ 我觉得既然顶部有了菜单,右则就没有必要了。
    • cats.php
      • 按照说明修改了ID。categories = array(
      • 修改了日期显示格式 the_time(‘y-m-d’)
    • footer.php
      • 增加统计JS代码
      • 增加备案链接
      • 去除底部功能菜单
    • sidebar.php
      • 注释掉原有内容 如Archives等 用小工具替代
      • 增加BACKLINKS
    • index.php
      • 最新头条 开始 修改ID
      • the_time(‘y-m-d’) 修改时间格式
      • <?php echo $title  ?><?php echo ‘ ‘; echo $commentcount  ?> 增加评论条数
      • 注释广告
      • 文章列表 注释 //the_content(”); 移动 发表于 等,将三行改为两行
      • 去除友情链接 改用 小工具
    • header.php
      • 增加广告代码
      • 修改RSS地址
      • 去除LOGO
    标签:, , , , ,
    20090801 wordpress 定制 - 八月 18, 2009 by yippee
    Wordpress

    Wordpress

    WORDPRESS定制之處:

    1、D:\PhpNow\htdocs\wp\wp-includes\post.php

    //if ( mysql2date(‘U’, $post_date_gmt, false) > mysql2date(‘U’, $now, false) )
    // $post_status = ‘future’;

    这两行判断时间,进行定时发布,我习惯一天一天累加发布

    2、SIMPLE TAGS

    D:\PhpNow\htdocs\wp\wp-content\plugins\simple-tags\extras simple-tags.importer.php

    importer 函数:

    $objects = $wpdb->get_results( “SELECT ID, post_title, post_title FROM {$wpdb->posts} WHERE {$type_posts} ORDER BY ID DESC LIMIT {$n}, 20″ );

    原本获得内容,进行比较等。这样生成的TAG非常多。

    D:\PhpNow\htdocs\wp\wp-content\plugins\simple-tags\2.7\inc simple-tags.admin.php

    pageAutoTags函数

    $objects = (array) $wpdb->get_results(“SELECT p.ID, p.post_title, p.post_title FROM {$wpdb->posts} p WHERE {$post_type_sql} ORDER BY ID DESC LIMIT {$n}, 20″);

    3、页面部分

    single.php

    增加 上一篇、下一篇:<div class=”post-title”>
    <h1><?php previous_post(); ?>   <?php next_post(); ?></h1>
    </div>

    增加阅读次数:<?php if(function_exists(‘the_views’)) { the_views(); } ?>

    right-sidebar.php

    增加页面显示计时:<div class=”widget-header”>Post Stats</div>
    <?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?>  seconds.

    left-sidebar.php

    增加BACKLINKS显示

    <div class=”left-widget”>
    <?php if(get_option(‘backlinks_key’)) : ?>
    <div class=”widget-header”>Partner links</div>

    <?php backlinks_links()?>
    </div>
    <?php endif; ?>

    footer.php

    增加 备案链接、统计JS代码

    archive.php

    不显示 目录说明: <?php /* echo category_description();  */?>

    增加时间、评论、页面URL、点击次数等

    <?php /* the_content(‘read this entry &#187;’); */?>
    <?php if(is_category() || is_archive() || is_home() ) {
    the_excerpt();
    } else {
    the_content(‘Read the rest of this entry &raquo;’);
    } ?>
    <div class=”details”><div class=”inside”> <?php the_time(‘F j, Y’); ?> at <?php the_time(‘g:i a’); ?> – <?php comments_popup_link(‘No Comments’, ‘1 Comment’, ‘% Comments’); ?> so far | <a href=”<?php the_permalink() ?>”>Read On &raquo;</a> <?php if(function_exists(‘the_views’)) { the_views(); } ?> </div></div>

    去除原WP默认的旧条目,改为PAGENAV导航

    <!– <?php next_posts_link(‘&laquo; old entrys’) ?>
    <?php previous_posts_link(‘new entrys &raquo;’) ?> –>
    <?php wp_pagenavi() ?>

    \index.php

    增加发布时间显示 <?php the_time(‘Y F j ‘) ?>-<?php the_time(‘g:i a’); ?>

    改为摘要显示 <?php /* the_content(‘read the entry &#187;’); */ ?>
    <?php if(is_category() || is_archive() || is_home() ) {
    the_excerpt();
    } else {
    the_content(‘Read the rest of this entry &raquo;’);
    } ?>
    <div class=”details”><div class=”inside”>    – <?php comments_popup_link(‘No Comments’, ‘1 Comment’, ‘% Comments’); ?> so far | <a href=”<?php the_permalink() ?>”>Read On &raquo;</a> <?php if(function_exists(‘the_views’)) { the_views(); } ?>  </div></div>

    修改导航:<!– <?php next_posts_link(‘&laquo; old Posts’) ?>
    <?php previous_posts_link(‘new Posts &raquo;’) ?>–>
    <?php wp_pagenavi() ?>

    \header.php

    统统改用固定文字,不调用函数

    <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
    <title>YippeeSoft开心软件-盛放</title>
    <link rel=”stylesheet” href=”http://www.yippeesoft.com/blog/wp-content/themes/contrast-style/style.css” type=”text/css” media=”screen” />
    <link rel=”alternate” type=”application/rss+xml” title=”盛放 RSS Feed” href=”http://www.yippeesoft.com/blog/feed” />
    <link rel=”pingback” href=”http://www.yippeesoft.com/blog/xmlrpc.php” />
    YippeeSoft开心软件-盛放<div id=”sitename”>YippeeSoft开心软件-盛放</div>

    define(‘WP_CACHE’, true);
    define(‘WP_POST_REVISIONS’, false);

    标签:, ,
    WORDPRESS WAP 发布 - 七月 19, 2009 by yippee

    手机发布文字

    标签:, , ,
    20080201 word 版本 比较 - 十一月 4, 2008 by yippee

    20080201 word 版本 比较
    http://www.yippeesoft.com

    WORD比较工具-总结

    修订标记的方法也好,
    但是对于修改WORD文档较大时,
    尤其是WORD文档中本身就有带颜色字时,
    会把你看的眼花缭乱,
    真的很头晕。

    经过这两天查找,
    我找到以下可以比较WORD文档的工具,
    (以下排列无排名,都是最新的版本号):
    1。8楼说的Compare It! 3(http://www.grigsoft.com/
    2。Compare Suite 3.0(http://www.comparesuite.com/
    3。DiffDoc3.62(http://www.softinterface.com
    4。Change-Pro 5.0(http://www.change-pro.com/

    4款工具的比较
    1。Change-Pro 5.0 找不到下载地址,也没有破解版,不知道好不好用。
    2。带有WORD格式(比如字体信息,表格等)的比较
    只有DiffDoc3.62,功能强大,但是有时会出错,
    由于WORD本身的复杂性,本身有WORD复杂格式的文档,比较后的结果
    会很乱。
    3。去除WORD格式(比如字体信息,表格等)的比较
    有Compare Suite 3.0和Compare It! 3,
    Compare Suite 3.0不如Compare It! 3好用,
    两个软件的功能基本差不多,
    但是Compare Suite 3.0慢,而且需要转换,
    Compare It! 3不需要转换,速度较快,
    建议使用Compare It! 3

    使用建议:
    通过我的使用,建议如下:
    如果改动小的WORD文档,
    使用DiffDoc3.62,
    改动大的WORD文档,
    使用Compare It! 3。

    DiffDoc3.62同时具有比较PDF,TXT,C,XLS,PPT,HTML等文件的功能,
    同时可以比较目录,功能前大,很需要有一个这样的工具。
    Compare It! 3同时具有比较TXT,C,XLS,PPT,ZIP等文件的功能,
    同时可以比较目录,功能简单易用,对于复杂的文档,DiffDoc3.62会很乱或出错的时候,
    就很需要它了。

    另外Compare It! 3很小1M多,有绿色版,
    DiffDoc3.62较大4M多,没有听说有绿色版。

    撰写工作报告或是演讲文稿,经常是改了再写,写了再改,有时候甚至需要预备多个版本。通常的做法是将每个版本的文档单独保存为一个文件,相似的文件多了,不仅占用了磁盘空间,而且管理起来也不方便。有没有什么好办法可以解决这个问题呢?当然有!

      解决这个问题的关键就是Word 2000/XP的“版本”功能,打开Word 2000/XP的“文件”菜单,可以找到这项不为常人所关注的命令。

      提示:Word 2000/XP采用了智能菜单,可以隐藏不常用的命令,所以,如果打开“文件”菜单后找不到“版本”命令,请将菜单完全展开,便可以看到。

      以演讲文稿为例,当第一稿录入完毕后,执行“版本”命令,在弹出的窗口中点击“现在保存,紧接着在出现的“保存版本”窗口中输入“第一稿”,如图所示,最后点击“确定”完成保存。

      继续编辑文档,当第二稿、第三稿完成后,重复上述操作,不同的是在“保存版本”中输入“第二稿”、“第三稿”。

      当需要调用该演讲文稿的早期版本时,再次“版本”命令,单击要打开的版本,再点击 “打开”按钮即可。

      如果希望在同一个文档中保存文档的多个版本,务必记得使用“版本”功能。由于Word 2000/XP仅保存版本间的差别而不是每个版本的完整副本,使用这种方法还可节省磁盘空间哦!

      技巧:在执行“版本”命令时可以选中“关闭时自动保存版本”复选框,再单击“关闭”,这样每次关闭文档都会自动生成一个备份版本。

    ThinkPad X61 – 1 Year Depot Warranty
     Description   Part number   Unit price*   Quantity   Price*
     ThinkPad X61 – 1 Year Depot Warranty
    Edit   7675CTO   $1,110.00   1   $1,110.00
     Processor: Intel® Core™ 2 Duo T7500 NV (2.2GHz, 4MB L2, 800MHz FSB)       1   
     Operating System: Genuine Windows Vista Home Basic       1   
     Operating System Language: Genuine Windows Vista Home Basic US English       1   
     Display: 12.1" XGA TFT, 2×3 Ultraconnect II antenna       1   
     Total memory: 1 GB PC2-5300 DDR2 SDRAM 667MHz SODIMM Memory (1 DIMM)       1   
     Keyboard: Keyboard US English         1   
     Pointing device: TrackPoint       1   
     Hard Drive: 120GB Hard Disk Drive, 5400rpm Serial ATA (2.5")       1   
     Wireless card: Intel PRO/Wireless 3945ABG       1   
     Battery: ThinkPad X60 Series 4 cell Enhanced Capacity Battery       1   
     Power cord: Country Pack North America       1   
     Language Pack: Language Pack US English       1   
     Warranty: 7675: Express – 1 Year Depot Warranty       1   

    X61BE9
    台湾  9500  现货  T7500
    2.2G  1G  160G
    5400  12.1XGA
    (1024*768)  Intel X3100
    最大共享256M  无  无线蓝牙/指纹/4芯
    /Vista
    X61BH7
    香港  10100  现货  T7500
    2.2G  1G  160G
    5400  12.1XGA
    (1024*768)  Intel X3100
    最大共享256M  无  无线蓝牙/指纹/4芯
    1G讯盘/Vista

    ThinkPad X61 – 1 Year Depot Warranty
     Description   Part number   Unit price*   Quantity   Price*
     ThinkPad X61 – 1 Year Depot Warranty
    Edit   7675CTO   $1,234.00   1   $1,234.00
     Processor: Intel® Core™ 2 Duo T7500 NV (2.2GHz, 4MB L2, 800MHz FSB)       1   
     Operating System: Genuine Windows Vista Home Basic       1   
     Operating System Language: Genuine Windows Vista Home Basic US English       1   
     Display: 12.1" XGA TFT, 2×3 Ultraconnect II antenna       1   
     Total memory: 1 GB PC2-5300 DDR2 SDRAM 667MHz SODIMM Memory (1 DIMM)       1   
     Keyboard: Keyboard US English         1   
     Pointing device: TrackPoint       1   
     Hard Drive: 160GB Hard Disk Drive, 5400rpm Serial ATA (2.5")       1   
     Intel® Turbo Memory hard drive cache: Intel Turbo Memory 1GB       1   
     Bluetooth: Integrated Bluetooth PAN       1   
     Wireless card: Intel PRO/Wireless 3945ABG       1   
     Battery: ThinkPad X60 Series 4 cell Enhanced Capacity Battery       1   
     Power cord: Country Pack North America       1   
     Language Pack: Language Pack US English       1   
     Warranty: 7675: Express – 1 Year Depot Warranty       1   

    按当前汇率兑换结果
    人民币 当前汇率 美元
    8900 0.1391 1,238.3470

    至少官方价格和水货只差1000人民币

    标签:, ,
    20070707 MSDE SA PASSWORD 备份 恢复 - 十二月 8, 2007 by yippee

    20070707 MSDE SA PASSWORD 备份 恢复
    http://www.yippeesoft.com

    打开SQL安装目录里的 MSDE 目录。打开SETUP.INI,加入以下内容:
    [Options]
    SECURITYMODE=SQL
    SAPWD=123?? 这行是密码,重要。

    然后运行里面的SETUP.EXE安装。

    我都是用批次檔
    setup.exe INSTANCENAME="" SAPWD="1234" DISABLENETWORKPROTOCOLS=0 SECURITYMODE=MSSQL
     

    Microsoft 建议, 此问题会带来潜在安全问题。

    要确定这是否适用于系统, 尝试登录到 MSDE 通过使用 OSQL 实用程序从命令提示符。 使用下列语法:
    C:\\>osql – U sa – P
    如果您收到以下消息
    对于用户\’sa\’登录失败
    sa 密码为空, 不表示系统上不存在问题。

    但是, 如果您运行命令后收到以下信息
    " > 1 "
    安全漏洞适用于系统, 您必须按照下节来更改 sa 密码中步骤。
    回到顶端

    如何保护具有密码 sa 帐户
    可以使用 sp _ password 存储过程来设置为 sa 帐户密码 例如, 要从 NULL 以更改 sa 密码 ": 测试 01", 使用类似于以下代码 !
    sp _ EXEC password NULL, \’ 01\’、 \’ sa \’ 测试 !
    要设置安全密码上 Microsoft Data Engine (MSDE) \’ sa \’ 帐户, 请按照下列步骤操作: 1. 在命令提示符下, 登录到 MSDE: 如下
    C:\\>osql – U sa – P 
    2. 当收到: 1 " 消息, 通过使用以下命令更改 sa 帐户密码 > "
    sp _ EXEC password NULL, 、 \’ sa \’ 测试 01\’ \’ !
    注意此命令,\’Test 01\’是安全密码满足组织的安全准则并能记住 !
     

    为了安全起见,要求使用强 SA 密码。请使用 SAPWD 开关提供同一密码。有关详细信息,请参阅自述文件。安装程序将立即退出。

    更改 MSDE sa 密码和登录验证模式
            Microsoft SQL Desktop engine 2000 是一个常用的SQL支持数据库,但安装后其 sa 的默认密码为空,这样对数据安全有一定影响。因为MSDE2000是简化版本,无管理控制台,修改密码只能进入命令行方式。

            要注意的是要在切换了SQL的身份验证方式后才可以命令行修改密码。默认的SQL身份验证方式是Windows账户模式,要改为采用SQL身份验证。

    要Windows账户身份验证模式切换到SQL的身份验证模式,请按以下步骤操作:
         1. 先停止 MSSQLSERVER 以及所有其他相关服务(如 SQLSERVERAgent)。
         2. 打开注册表编辑器。
         3. 找到以下两个子项之一(取决于 MSDE 是作为默认 MSDE 实例安装的还是作为命名实例安装的):
              HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\MSSqlserver\\\\MSSqlServer
              – 或者 -
             HKEY_LOCAL_MACHINE\\\\Software\\\\Microsoft\\\\Microsoft SQL Server\\\\<Instance Name>\\\\MSSQLServer\\\\
         4. 在右窗格中,双击 LoginMode 子项。
         5. 在 DWORD 编辑器对话框中,将此子项的值设置为 2。确保选择了 Hex 选项,然后单击确定。 (默认情况下,Windows LoginMode 注册表子项的值设置为 1。如果启用SQL的身份验证模式,则此值为 2。)
         6. 重新启动 MSSQLSERVER 和 SQLSERVERAgent 服务以使更改生效。至此,SQL验证模式切换完毕。
         7.在运行菜单执行 CMD 命令先进入命令行模式
         8.进入MSDE安装目录C:\\\\Program Files\\\\Microsoft SQL Server\\\\80\\\\Tools\\\\Binn目录
         9.执行命令
             osql -U sa -Q "sp_password NULL, \\\’password\\\’, \\\’sa\\\’"
            (其中 password 改为你要设置的密码,输入时注意单引号和双引号的格式)
         10、之后会提示输入默认口令,直接按回车即可。密码修改成功。
           修改了口令后不影响使用。如果要改密码步骤同上。此方法也可使用与命令行修改SQL2000企业版和专业版的sa口令。(前提是必须知道sa密码哦)

    如何验证 SA 密码是否为空

         1. 在正在连接到的 MSDE 实例的宿主计算机中,打开命令提示符窗口。
         2. 在命令提示符处键入以下命令,然后按 Enter 键:
             osql -U sa
             这样可以通过 sa 帐户连接到 MSDE 的本地默认实例。要连接到您的计算机上安装的命名实例,请键入:
            osql -U sa -S servername\\\\instancename
            随即将出现以下提示:
            Password:
         3. 再次按 Enter 键。此操作将为 sa 传递一个 NULL(空)密码。
            如果按 Enter 键后出现以下提示,则您对 sa 帐户没有密码:
            1>
           为了符合安全方案的要求,Microsoft 建议您创建非空的强密码。
          但是,如果收到以下错误信息,则表示您输入的密码不正确。此错误信息表示已为 sa 帐户创建了密码:
          "Login Failed for user \\\’sa\\\’." 
          以下错误信息表示运行 SQL Server 的计算机设置为只限 Windows 身份验证:
           Login failed for user \\\’sa\\\’.Reason:Not associated with a trusted SQL Server connection.
           在 Windows 身份验证模式下无法验证 sa 密码。但可以创建 sa 密码,以便 sa 帐户在以后身份验证模式更改为混合模式时仍然是安全的。
           如果您收到以下错误信息,则表示 SQL Server 可能未运行,或者您可能为安装的 SQL Server 的命名实例提供了错误名称:
            [Shared Memory]SQL Server does not exist or access denied.
            [Shared Memory]ConnectionOpen (Connect()).

    另一种简单的更改 sa 密码的方法

         1. 在正在连接到的 MSDE 实例的宿主计算机中,打开命令提示符窗口。
         2. 键入下面的命令,然后按 Enter 键:
             osql -U sa
             在 Password:提示符下,按 Enter 键(如果密码为空)或键入当前密码。这样可以使用 sa 帐户连接到 MSDE 的本地默认实例。
             要使用 Windows 身份验证进行连接,请键入此命令:
             use osql -E

         3. 在各个单独的行内键入下列命令,然后按 Enter 键:
             sp_password @old = null, @new = \\\’password\\\’, @loginame =\\\’sa\\\’
             go
             注意:确保将“password”替换为你的密码。
             您将收到以下提示信息,表示已成功更改密码:
             Password changed.

    1:备份数据库  
      backup   database   库名   to   disk=\’c:\\备份文件名.bak\’  
      2:恢复数据库  
      restore   database   库名   from   disk=\’x:\\备份文件名.bak\’  
     

    2 楼vivianfdlpw()回复于 2005-09-22 11:08:01 得分 0
    RESTORE   DATABASE   新数据库名  
            FROM   DISK=\’bjgl.bak\’  
            WITH   REPLACE,    
                  MOVE   \’数据文件逻辑名\’   TO   \’数据文件新物理位置\’,    
                  MOVE   \’日志文件逻辑名\’   TO   \’日志文件新物理位置\’  

    标签:, , , ,

    20070604 word 比较 数据库 字段名 c# - 十一月 5, 2007 by yippee

    20070604 word 比较 数据库 字段名 c#
    http://www.yippeesoft.com

    如何读sql数据库结构的字段名的描述?  ds.tables(0).columns(i).columnname和
    ds.tables(0).columns(i).caption读到的都是字段名称,而不是字段描述?

     回复人: dahuzizyd(你就是我心中的女神) ( ) 信誉:105  2003-10-05 11:39:44z  得分:0
    ?  

    不知这个是不是你想要的:
    private void form1_load(object sender, system.eventargs e)
    &leftsign;
    string strdsn = "provider=microsoft.jet.oledb.4.0;data source=c:\\\\mctest.mdb";
    string strsql = "select * from developer" ;

    // create objects of adoconnection and adocommand
    oledbconnection myconn = new oledbconnection(strdsn);
    oledbdataadapter mycmd = new oledbdataadapter( strsql, myconn );

    myconn.open();
    dataset dtset = new dataset();
    mycmd.fill( dtset, "developer" );
    datatable dt = dtset.tables[0];

    listbox1.items.add("field name datatype unique autoincrement allownull");
    listbox1.items.add("==================================================================");

    foreach( datacolumn dc in dt.columns )
    &leftsign;
    listbox1.items.add(dc.columnname+" , "+dc.datatype +" ,"+dc.unique +" ,"+dc.autoincrement+" ,"+dc.allowdbnull );
    &rightsign;

    &rightsign;
    详见:
    http://www.c-sharpcorner.com/database/table_p.asp
    这个用的是access,如果是sql server的话,要先使用adapter的fillschema方法得到表架构信息

    top
     回复人: lihonggen0(李洪根,ms mvp,标准答案来了) ( ) 信誉:100  2003-11-11 20:33:23z  得分:20
    ?  

    select rtrim(b.name) as colname
    ,case when h.id is not null then \’pk\’ else \’\’ end as primarykey
    ,type_name(b.xusertype) + case when b.colstat & 1 = 1 then \’[id(\' + convert(varchar,ident_seed(a.name)) + \',\'page.asp?page=CSDN/asppost9/ + convert(varchar,ident_incr(a.name)) + \')]\’ else \’\’ end as type
    ,b.length
    ,case b.isnullable when 0 then \’n\’ else \’y\’ end as [isnull]
    ,isnull(e.text,\’\') as [default]
    ,isnull(c.value,\’\') as descript
    from sysobjects a,syscolumns b
     left outer join sysproperties c on b.id = c.id and b.colid = c.smallid
     left outer join syscomments e on b.cdefault = e.id
     left outer join (select g.id,g.colid from sysindexes f,sysindexkeys g where f.id = g.id and f.indid = g.indid and f.indid > 0 and f.indid < 255 and (f.status & 2048)<>0) h on b.id = h.id and b.colid = h.colid
    where a.id = b.id
    and a.id = object_id(\’table1\’) –tablename改成你要导出的表的名称
    order by b.colid

    top
     回复人: lihonggen0(李洪根,ms mvp,标准答案来了) ( ) 信誉:100  2003-11-11 20:33:52z  得分:0
    ?  

    select   *
    from   ::fn_listextendedproperty (\’ms_description\’, \’user\’, \’dbo\’, \’table\’, \’table11\’, \’column\’, default)

    top
     回复人: lihonggen0(李洪根,ms mvp,标准答案来了) ( ) 信誉:100  2003-11-11 20:34:44z  得分:0
    ?  

    所有字段的描述放在表sysproperties里

    如果要比较两个Word文档内容是否相同,最简单的就是直接在Word程序中直接进行比较(以Word2003为例)。这种方法适用于所有能被word直接读取的文件比较。

      先打开要比较的Word原始文件,然后点击“工具”菜单下的 “比较并合并文档”菜单项,在弹出的“比较并合并文档”对话框中现选择目标文件,为了比较出具体的差异,请务必选中“精确比较”复选框,再单击“比较”按钮,这样Word便会新建一个文档,并将比较结果中所有不同之处以蓝色显示.

    工具-比较合并文档 这个功能不算完美,但是还不错,谢谢推荐。
    这个功能实际上就是在文档改动时没有用改动跟踪的情况下,逆向找出改动痕迹。如果文档是顺着一条线改下来的,对比新旧版本,这个功能实用性还不错;如果文档有很多分支版本后再来比较,会显得很混乱。没办法,机器只能机械的识别出内容的改变,而不能象人一样懂得分主次。我觉得word的跟踪改动把目录的改动也给我标出来真的有点无聊

    标签:, , , ,