r5 - 26 Aug 2009 - 06:23:31 - Main.yfangYou are here: YWiki >  Ywiki Web > 优化和修改

优化和修改

更改默认页

vi /var/www/ywiki/.htaccess

# 将/index.html指向 /bin/view
RewriteEngine On
RewriteCond ${QUERY_STRING} ^(.*)$
RewriteRule ^index\.html$ /bin/view/ [L]

添加插件BeautifierPlugin,用于代码语法高亮

  • 安装插件
cd /var/www/ywiki
wget BeautifierPlugin.tgz
tar zxvf BeautifierPlugin.tgz
    • 你已经安装好BeautifierPlugin了,接下来让插件有效
    • 浏览器访问bin/configure,编辑页面使插件有效
    • 你在 BeautifierPlugin可以看到关于这个插件的说明

  • 修正插件第一行空行和firefox下显示乱码问题
# lib/Output/HTML.pm  line 23
#       $self->{code}           = '<pre>_WORD_</pre>';
$self->{code}           = '_WORD_';
  • 增加perl缩进引导字符集
# lib/HFile/HFile_perl.pm  line 22
#        $self->{indent}                 = ["{"];
#        $self->{unindent}               = ["}"];
#        $self->{stringchars}            = [];
$self->{indent}                 = ["{", "[", "("];
$self->{unindent}               = ["}", "]", ")"];
$self->{stringchars}            = ['"', "\'"];
  • 增加bash缩进引导字符集
# lib/HFile/HFile_bash.pm  line 22
#    $self->{indent}                 = ["{("];
#    $self->{unindent}               = ["})"];
$self->{indent}                 = ["{", "case", "start)", "stop)", "restart)", "*)", "do"];
$self->{unindent}               = ["}", "esac", "done", ";;"];
# 这样的写法显然是不好的,不过没有办法,这个插件的缩进没有成对的概念,所以只能猥琐处理顶一下了
  • 增加对CODE直接显示的支持
# lib/TWiki/Plugins/BeautifierPlugin.pm  line 111
if ($lang eq "") {
        return _formatBeautifierOutput( $codeFragment );
}

修改页面访问权限

默认的设置下有诸多不便,比如任何一个默认用户可以修改其他用户的个人信息页,普通用户可以访问站点管理页面等等,所以做如下修改
  • 1. 浏览器访问 WebPreferences, 反注释并设定成 Set DENYWEBCHANGE = UnknownUser, 这样管理页面就不能被未知用户修改了
  • 2.把yfang加到admin组里 浏览器访问 TWikiAdminGroup,修改页面成Set GROUP = yfang,保存。
  • 3.修改新用户页面模板,使之只能由自己修改 NewUserTemplate页面增加Set ALLOWTOPICCHANGE = %WIKIUSERNAME%

默认中文界面

  1. 访问http://server:port/bin/configure,在Localisation一部分
  2. 选中{UserInterfaceInternationalisation}、{Languages}{'zh-cn'}{Enabled}、{UseLocale}这几项设置的复选框,
  3. 并设置{Site}{Locale}为“zh_CN.UTF-8”,{Site}{CharSet}为“UTF-8”,{Site}{Lang}和{Site}{FullLang}为“zh-CN”,
  4. 这样保存设置之后,打开Wiki就会是中文,并且能够正常的使用和编辑中文了。

允许中文标题

  • 添加中文字符集在标题WIKIWORD中的支持
// pub/TWiki/TWikiJavascripts/unicode_chars.js  line 12
var CH_CHARS                    = "\\u4e00-\\u9fa5";
var MIXED_CHALPHANUM_CHARS      = MIXED_ALPHA_CHARS + NUMERIC_CHARS + CH_CHARS;
var WIKIWORD_REGEX = "^" + "[" + MIXED_CHALPHANUM_CHARS + "]" + "+";
//var WIKIWORD_REGEX = "^" + "[" + UPPER_ALPHA_CHARS + "]" + "+" + "[" + LOWER_ALPHANUM_CHARS + "]" + "+" + "[" + UPPER_ALPHA_CHARS + "]" + "+" + "[" + MIXED_ALPHANUM_CHARS + "]" + "*";
var ALLOWED_URL_CHARS = MIXED_CHALPHANUM_CHARS + "-_^:";
//var ALLOWED_URL_CHARS = MIXED_ALPHANUM_CHARS + "-_^";

支持多字节文字(Multibyte)长标题

  • 在截断字符串之前编码,避免乱码
# lib/TWiki/Render.pm line 417
require Encode;
$anchorName = Encode::decode('utf8', $anchorName);
$anchorName =~ s/^(.{32})(.*)$/$1/; # limit to 32 chars - FIXME: Use Unicode chars before truncate
$anchorName = Encode::encode('utf8', $anchorName);

汉字h1, h2等CSS美化

  • 由于字体关系,中文字体和英文字体对比起来显得十分单薄,所以加粗
// pub/TWiki/PatternSkin/style.css line 76
/* h1 { font-size:210%; } */
/* h2 { font-size:150%; } */
h1 { font-size:210%; font-weight:bold; }
h2 { font-size:150%; font-weight:bold; }

个性化

  • 这里首先记住一个链接 TWikiPreferences,这里你可以随意定制你的页面风格,包括背景颜色,版权信息,logo,主题等等。
  • 用户登陆,通过bin/configure页面的Security Setup->Authentication->{LoginManager}δ 这里设定登录形式,默认none,改为TWiki::Client::TemplateLogin通过网页形式登录(就像Ywiki一样)

注册用户时系统发信失败

  • 事实上由于使用系统sendmail发信,而系统并未搭建完善的邮件服务器,没有做DNS反向解析,被外部邮箱认定是垃圾邮件,根本不能到达邮件接收者,导致注册之后根本不能收到注册邮件。即使能够通过部分邮件服务器的检查(这已经是很少数了),也很有可能被扔到垃圾箱里,非常不爽。
  • 解决方案:使用SMTP代理发信
    • 我相信大家都有外面的免费邮箱,越稳定越好,要求其支持SMTP发信。这样就避免了被盾的命运。所有发出去的邮件在接受者看来都是从那个外部邮箱发出去的,所以你需要找一个比较著名的支持smtp的邮箱,比如gmail,163,yahoo,sina,sohu,等等。
  • 具体步骤
    1. 访问http://server:port/bin/configure,在Mail and Proxies部分
    2. {SMTP}{MAILHOST}δ 设为 你的smtp服务器
    3. {SMTP}{SENDERHOST}δ 设为 wiki.yfang.cn
    4. {SMTP}{Username}δ 设为你的 smtp 用户名
    5. {SMTP}{Password}δ 设置你的密码
    6. 这样保存设置之后,应该就可以使用smtp发信了,可是实验下来还是不成功。
    7. 通过手工telnet mail.fudan.edu.cn 25 发现auth login是可行的,随即检查原来的代码,最终在代码上做如下修改,终于可以正常发信了
# lib/TWiki/Net.pm line 34
# 添加两个库
use MIME::Base64;
use Text::Iconv;

# 添加一个函数,用来转编码,后面会用到
sub _utf82gbk {
        my ($str) = @_;
        my $converter = Text::Iconv->new("utf-8", "gbk");
        return $converter->convert($str);
}

# lib/TWiki/Net.pm line 288
# 重点修改 _sendEmailByNetSMTP 函数

# 1. 在297 行 $header =~ s/([\n\r])(From|To|CC|BCC)(\:\s*)([^\n\r]*)/$1 . $2 . $3 . _fixLineLength( $4 )/geois; 后加一段判断
# 如果不做这个修改,系统发出来的信的主题和发信人中的中文会显示乱码
# 如果你用的smtp服务器默认编码是utf8的,可以跳过这一步
if( $this->{MAIL_HOST} eq 'mail.fudan.edu.cn' ){  # fudan mail server use gb2312 as header charset, so we have to change it
        $header =~ s/([\n\r])(From|To|CC|BCC|Subject)(\:\s*)([^\n\r]*)/$1 . $2 . $3 . _utf82gbk( $4 )/geois;
}

# 2. 349行开始的核心发信代码更换成如下代码:

my $smtp = 0;
if( $this->{HELLO_HOST} ) {
        $smtp = Net::SMTP->new( $this->{MAIL_HOST},
                Hello => $this->{HELLO_HOST},
                AUTH => 'login',
                Debug => $TWiki::cfg{SMTP}{Debug} || 0 );
} else {
        $smtp = Net::SMTP->new( $this->{MAIL_HOST},
                AUTH => 'login',
                Debug => $TWiki::cfg{SMTP}{Debug} || 0 );
}
my $status = '';
my $mess = "ERROR: Can't send mail using Net::SMTP. ";
die $mess."Can't connect to '$this->{MAIL_HOST}'" unless $smtp;

if( $TWiki::cfg{SMTP}{Username} ) {
        
        # yang.fang 2008.1.4 support auth login
        my $encode_smtpuser = encode_base64($TWiki::cfg{SMTP}{Username});   # 这里是base64加密的用户名
        my $encode_smtppass = encode_base64($TWiki::cfg{SMTP}{Password});   # 这里是base64加密的密码,smtp使用它们来验证
        
        $smtp->command('AUTH','LOGIN');
        my $answer = $smtp->getline();
        # 334 VXNlcm5hbWU6
        
        $smtp->command($encode_smtpuser);
        $answer = $smtp->getline();
        # 334 UGFzc3dvcmQ6
        
        $smtp->command($encode_smtppass);
        $answer = $smtp->getline();
        # 235 Authentication successful or 535 Authentication failed
        if ($answer =~ /535/i) {
                die $mess.$smtp->message;
        }
        # $smtp->auth($TWiki::cfg{SMTP}{Username}, $TWiki::cfg{SMTP}{Password});
        # 上面这句是原来的代码,网上的说法是这个模块有问题,这样做并不能验证,所以我采用手动验证方式与smtp服务器交互
}
  • 再次尝试发信,应该就可以成功了,Good luck!

-- Main.yfang - 14 Dec 2007

Topic attachments
I Attachment Action Size Date Who Comment
elsepatch Net_pm.patch manage 1.4 K 21 Jan 2008 - 09:55 Main.yfang Net.pm的patch
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r5 < r4 < r3 < r2 < r1 | More topic actions
 
Powered by YWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding YWiki? Send feedback