blog.TangGaowei.com

分类: 软件开发

为什么要给HTML中的图片加上标题

作者 Neot 写于 2008-06-02  | 213 次浏览

有些时候,我们要将浏览器的图片显示关闭,以节省网络流量。特别是在用手机上网的时候。

如果图片标签没有添加标题属性,关闭图片显示后,用户就无法知道图片的用途。特别是将图片用做按钮 ( 比如“搜索”按钮 ) 时,甚至无法进行点击操作,丧失了按钮的功能。

一般网站还算影响不大,手机版的网站就是致命的了。许多手机用户为了节省流量,平时都将浏览器的图片显示关掉。这部份用户很可能被迫放弃对网站的访问。

[ 标签: html ]
[ 固定链接:http://blog.tanggaowei.com/2008/06/html.html ]

WordPress 中 get_option(’home’) 和 get_option(’siteurl’) 的区别

作者 传说一梦 写于 2008-05-18  | 255 次浏览

原来一直搞不懂 get_option(’home’) 和 get_option(’siteurl’) 的区别,因为我的网站,这两个值是相同的。今天看了“Giving WordPress Its Own Directory”这篇文章才明白它们之间的区别。

‘home’ 和 ’siteurl’ 变量分别对应后台“Setting (设置) -> General (常规)“里的“Blog address (Blog 地址)”和“WordPress address (WordPress 地址)”。’home’ 是 blog 的首地址,用于对外发布,供浏览用户访问;’siteurl’ 是 WordPress 的首地址,用于后台管理,供管理员访问。

WordPress 允许将源码安装到站点的子目录。这是导致 ‘home’ 和 ’siteurl’ 的值不同的根本原因。所以 ‘home’ 一般包含 ’siteurl’ 。这种典型的站点目录结构如下:

/index.php (从 /blog 目录拷贝后,经修改得到)
/blog/wp-admin
/blog/wp-content
/blog/wp-includes

[ 标签: WordPress插件开发 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/wordpress-get_optionhome-get_optionsiteurl.html ]

SVN 项目的目录结构

作者 传说一梦 写于 2008-05-17  | 240 次浏览

一个 SVN 项目的良好目录结构如下:

project1
    trunk
    branches
    tags   

1. project1

项目名。

2. trunk

主干目录,用于主干产品的维护。大部分操作都在此目录下完成。

3. branches

分支目录,用于分支产品的维护。

分支目录通过 trunk 的“右键菜单 -> TortoiseSVN -> Branch / Tag” 进行操作。

4. tags

标签目录,用于保存产品的稳定版本。比如 project1/tags/product1/1.0 目录中,保存 product1 产品的 1.0 稳定版。如果没有分支产品,目录结构类似 project1/tags/1.0 。

标签目录通过 trunk 的“右键菜单 -> TortoiseSVN -> Branch / Tag” 进行操作。

[ 标签: svn ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/svn.html ]

让自己的 WordPress 插件支持“新版本”提醒

作者 传说一梦 写于 2008-05-17  | 195 次浏览

开发一个 WordPress 插件的新版本后,想提醒老版本的用户有“新版本”可供下载。开始,每次版本更新,我都要在博客里发布“新版本”信息,以提醒插件用户。但是,很多插件用户并不会经常浏览我的博客,因而得不到提醒。

如果将插件注册到 WordPress 官方网站,那么,只要使用此插件的用户,都能即时在他们的 WordPress 站点的“插件管理”页面,看到“新版本”的提醒信息。即使是在插件注册之前就使用了插件的用户,也能获得提醒。

要让自己的 WordPress 插件支持“新版本”提醒,操作如下:

1. 注册一个 WordPress.org 网站的帐号

网址:http://wordpress.org/support/register.php

2. 添加你的插件信息

网址:http://wordpress.org/extend/plugins/add/

需要填写如下信息:

  • 你插件的名字
  • 一到两句话的插件描述
  • 你的插件的原始链接(可选的)

3. 等待审批

审批需要 3-4 天,可能更长。

审批通过后,会在注册时提供的邮箱里收到 WordPress.org 的通知。通知中最重要的是插件的 subversion 目录。比如我的 WP-T-WAP 插件,subversion 目录为 http://svn.wp-plugins.org/wp-t-wap

subversion 是一个版本控件软件,简称 SVN。据说是 CVS 替代产品。(要了解 SVN 请访问:http://www.subversion.org.cn/

4. 下载和安装 TortoiseSVN

网址:http://tortoisesvn.net/downloads

TortoiseSVN 是 SVN 的客户端。主要操作在“目录”和“文件”的右键菜单中。

5. 创建 SVN 项目目录

比如我的 WP-T-WAP 插件的 SVN 项目目录为 d:\svn-home\wp-t-wap\ 。

6. 从 WordPress.org 取出插件的 SVN 项目

以我的 WP-T-WAP 插件为例。对 d:\svn-home\wp-t-wap\ 目录单击右键,选择 "SVN Checkout…"菜单。在 "URL of repository" 项里填入 "http://svn.wp-plugins.org/wp-t-wap" (实际操作,应修改为第 3 步中 WordPress 通知邮件里提供的 SVN 目录)。

如果操作正确,会在 d:\svn-home\wp-t-wap\ 目录里出现 branches、tags 和 trunk 三个目录。

7. 创建 readme.txt 文件

readme.txt 文件用于存放插件的名称、版本、简介、安装方法等信息。为了让全世界的用户都可以使用,最好使用英文填写。模块如下:

http://wordpress.org/extend/plugins/about/readme.txt

一般只填写"Plugin Name"、"Description"和"Installation"三段就好了。后面的可以删除。(如果需要的话,填写更详细的信息当然更好)

"Plugin Name"段中,"Contributors" 字段填写作者名字,"Donate link"字段填写作者主页,"Tags"字段填写插件相关的关键字,"Requires at least"字段填写能适用的 WordPress 的最低版本,"Tested up to"字段填写测试的 WordPress 版本,"Stable tag"字段填写插件的版本号。

"Stable tag"是关键字段,用于比较两个版本的新旧。

"Description"段应填写 HTML 格式信息。如果要换行,需加入 <br> 标签。

"Installation"段填写插件的安装步骤。

8. 拷贝插件到 trunk 目录

将插件的所有文件拷贝至第 6 步中从 WordPress 取出的 trunk 目录。(注意,是拷贝插件的文件,而不是插件的目录)

readme.txt 文件也拷贝至 trunck 目录。

9. 提交 trunk 目录至 WordPress 的 SVN 服务器

右键单击 Trunk 目录,选择 "SVN Commit" 菜单。在 "Message" 项里填写操作备注。点击 "OK" 按钮提交。

10. 添加插件的版本

上一步只是提交插件源码至服务器,这一步要从源码生成一个插件版本。

右健单击 trunk 目录,选择 "TortoiseSVN » Branch/Tag" 。在 "To URL" 项里填入版本存放路径。

比如 WP-T-WAP 1.8 的版本存放路径应为 "http://svn.wp-plugins.org/wp-t-wap/tags/1.8" 。"1.8" 代表版本号,必须与此时 trunk 目录的 readme.txt 文件中的 "Stable tag" 字段对应。

下次再添加更新的版本时,记得修改 "Stable tag" 字段。

11. 等待 WordPress 从 SVN 里更新插件信息

新添加的插件版本,在 15 分钟内,将更新至 WordPress.org 的插件发布页(比如:http://wordpress.org/extend/plugins/wp-t-wap/)。更新后,插件用户就能在 WordPress 站点的“插件管理”页面里,看到插件的“新版本”提醒信息了。

参考文章:发布你的插件到 WordPress 官方插件目录

[ 标签: svn, WordPress插件开发 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/wordpress-5.html ]

Wordpress 的国际化

作者 传说一梦 写于 2008-05-12  | 106 次浏览

Wordpress 是使用 mo 文件进行国际化的。mo 文件是二进制文件,由 po 文件生成。从 po 文件生成 mo 文件,可使用 poEdit 编辑器。用 poEdit 编辑器打开 po 文件后,按 [Ctrl + S] 保存时,就可自动生成同名的 mo 文件。

po 文件是文本文件,可以用记事本、Editplus 等文本编辑器编辑。po 文件的格式类似如下:

1  msgid ""
2  msgstr ""
3  "Project-Id-Version: WP-T-WAP\n"
4  "POT-Creation-Date: \n"
5  "PO-Revision-Date: 2008-05-12 12:14+0800\n"
6  "Last-Translator: tanggaowei <tanggaowei@gmail.com>\n"
7  "Language-Team: TangGaowei.com <tanggaowei@gmail.com>\n"
8  "MIME-Version: 1.0\n"
9  "Content-Type: text/plain; charset=utf-8\n"
10 "Content-Transfer-Encoding: 8bit\n"
11 "X-Poedit-KeywordsList: _e;__\n"
12 "X-Poedit-Basepath: .\n"
13 "X-Poedit-SearchPath-0: .\n"
14
15 #: index.php:57
16 msgid "Last Comments"
17 msgstr "最新评论"
18
19 #: index.php:54
20 msgid "Categories"
21 msgstr "分类"

文件最上面两行可能是定义数据的格式。将 msgid 引号里的内容定义为信息 ID,将 msgstr 引号里的内容定义为 ID 对应的内容。如第 16 行的 "Last Comments" 就是 ID,"最新评论" 翻译成的内容。

第 3 行到第 13 行是文件信息和编辑成 mo 文件要使用的参数。poEdit 的 "设置" 里可设置这部分内容,保存时能自动生成。

第 15 行和第 19 行是注释,不写也可以。注释是为了下次修改时,查看所有使用过此翻译的位置。一定格式的注释能在 poEdit 里直接定位到被翻译的文件位置。

Wordpress 有 4 个方法用于加载 mo 文件到内容,以供页面使用:

1. load_textdomain($domain, $mofile)

$domain - 域名,用于区分其它域的 mo 数据。
$mofile - mo 文件的物理地址,含文件名。

load_textdomain 函数是下面 3 个函数的基础。

2. load_default_textdomain()

用于加载 Wordpress 站点自己使用的 mo 文件。(实际将 $domain 缺省为 ‘default’。)

3. load_plugin_textdomain($domain, $path = false)

$domain - 域名,用于区分其它域的国际化数据。
$path - mo 文件相对于 Wordpress 站点根目录的相对路径,不含文件名。(不一定非得是插件目录,站点的任何目录都可以)

用于加载 Wordpress 插件所使用的 mo 文件。假设 $domain = ‘wap’,Language = ‘zh_CN’,则 mo 文件名应为 wap-zh_CN.mo 。

4. load_theme_textdomain($domain)

$domain - 域名,用于区分其它域的国际化数据。假设 $domain = ‘wap’,Language = ‘zh_CN’,则 mo 文件名应为 zh_CN.mo ,mo 文件的目录为当前模板的目录。

用于加载 Wordpress 模板所使用的 mo 文件。

以上 4 个函数都在 /wp-includes/l10n.php 文件里定义。它们的生命周期都是 Page,也就是当页面加载完时失效,并不是一个页面执行一次,其它页面都可使用。

Language 在 /wp-config.php 文件的 "define (’WPLANG’, ‘zh_CN’);" 行定义。

mo 文件被正确的加载后,就可以在页面里使用这些数据了:

1. 返回值函数

__(’Last Comments’)

返回 load_default_textdomain() 函数加载的, ID 为 ‘Last Comments’ 所对应的数据。如上例,应返回 ‘最新评论’ 。(函数名为 2 个下划线)

__(’Last Comments’, ‘wap’)

返回 ‘wap’ 域中,ID 为 ‘Last Comments’ 所对应的数据。如上例,应返回 ‘最新评论’ 。

2. 输出函数

_e(’Last Comments’)

输出 load_default_textdomain() 函数加载的, ID 为 ‘Last Comments’ 所对应的数据。如上例,应返回 ‘最新评论’ 。

_e(’Last Comments’,'wap’)

输出 ‘wap’ 域中,ID 为 ‘Last Comments’ 所对应的数据。如上例,应返回 ‘最新评论’ 。

[ 标签: 国际化 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/wordpress-4.html ]

智能设备应用程序的菜单怎么修改不了

作者 传说一梦 写于 2008-05-08  | 127 次浏览

调试VS2005 C++ MFC 智能设备应用程序时,系统总是显示项目的初始菜单(在手机上运行可能正常)。要使用自己的菜单,请注释掉 res\MyProjectsp.rc2 中以下内容:

/////////////////////////////////////////////////////////////////////////////
//
// 数据
//
/*
IDR_MAINFRAME SHMENUBAR DISCARDABLE
BEGIN
    IDR_MAINFRAME,
    1,
    I_IMAGENONE, IDOK, TBSTATE_ENABLED, TBSTYLE_BUTTON | TBSTYLE_AUTOSIZE,
    IDS_OK, 0, NOMENU,
END
*/

[ 标签: 资源菜单 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/post-12.html ]

怎样恢复 Edit 控件的 BackSpace 键功能

作者 传说一梦 写于 2008-05-08  | 117 次浏览

VS2005 C++ MFC 智能设备应用程序中,在 Edit 控件里按“TBack”键时,并没有删除光标前的字符,而是最小化当前应用程序。要恢复 Edit 控件的 BackSpace 键功能,方法如下:

1. 函数申明:在 MyProjectDlg.h 中写到“DECLARE_MESSAGE_MAP()”语句之前

afx_msg LRESULT OnHotKey ( WPARAM wParam, LPARAM lParam );  // 一定要在 DECLARE_MESSAGE_MAP() 之前

DECLARE_MESSAGE_MAP()

2. 消息映射:在 MyProjectDlg.cpp 的 BEGIN_MESSAGE_MAP() 段添加代码

BEGIN_MESSAGE_MAP(….)

ON_MESSAGE( WM_HOTKEY, OnHotKey )

END_MESSAGE_MAP()

3. 函数定义:在 MyProjectDlg.cpp 中实现代码

LRESULT CMyProjectDlg::OnHotKey ( WPARAM wParam, LPARAM lParam )
{
    if(VK_TBACK == HIWORD(lParam))
    {        
          SHSendBackToFocusWindow( WM_HOTKEY , wParam, lParam);

          return 1;
    }

    return 0;
}

[ 标签: BackSpace, Edit控件, TBACK ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/edit-backspace.html ]

VS2005 C++ 字符串相关处理

作者 传说一梦 写于 2008-05-08  | 153 次浏览

———————————————————————————-
分割字符串
———————————————————————————-
#include <string.h>
#include <stdio.h>

char data[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";   // 分隔符字符集
char *token;

void main( void )
{
   printf( "%s\n\nTokens:\n", data );
   /* Establish string and get the first token: */
   token = strtok( data, seps );
   while( token != NULL )
   {
      /* While there are tokens in "string" */
      printf( " %s\n", token );
      /* Get next token: */
      token = strtok( NULL, seps );
   }
}

———————————————————————————-
字符串转换成数字
———————————————————————————-

char* token = "20";   
int nHour;

nHour = atoi( token);

———————————————————————————-
数字转换成字符串
———————————————————————————-
_itoa( nHour,buf, 10);  // 10 代表十进制

char* token = "20";   
char* buf;
int r;
int nHour;
string sHour;
nHour = atoi( token);
nHour += 8;
_itoa( nHour,buf, 10);
sHour = buf;

[ 标签: 字符串 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/vs2005-c-4.html ]

VS2005 C++ MFC 怎样添加事件、映射消息和重载函数

作者 传说一梦 写于 2008-05-08  | 388 次浏览

VS2005 的 MFC 添加事件、映射消息和重载函数的操作 和 VS6.0 不一样,是在窗口类的属性页里。操作如下:

在“类视图”中,右键单击想要操作的窗口类,点击“属性”。在打开的属性页中,最上一排按钮中的“事件”、“信息”和“重写”分别对应“添加事件”、“映射消息”和“重载函数”的操作。

[ 标签: mfc, 映射消息, 添加事件, 重载方法 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/vs2005-c-mfc.html ]

捕捉手机 Home 键

作者 传说一梦 写于 2008-05-08  | 154 次浏览

(虽然能捕捉到,但是好像最后还是执行了返回桌面操作)

1. 注册热键

BOOL CMyProjectDlg::OnInitDialog()
{
    …

    // 处理 VK_HOME
    BYTE appkey = SHGetAppKeyAssoc(_T("MiniBlogClient.exe"));
    ::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME);

    …
}

2. 重写 PreTranslateMessage 函数

BOOL CMyProjectDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类
    if( pMsg->message == WM_HOTKEY )
    {
        SetForegroundWindow();

        return TRUE;
    }

    return CDialog::PreTranslateMessage(pMsg);
}

[ 标签: HOME键 ]
[ 固定链接:http://blog.tanggaowei.com/2008/05/home-2.html ]

订阅

 

手机访问

http://blog.tanggaowei.com/wap/
查找文章: