Catalyst newsgroup
我平时就用 Thunderbird 来订阅 newsgourp. 一般而言我只订阅两个服务器,一个是 news.gmane.org 另一个是 news.yaako.com
news.gmane.org 里还有 modperl 的组:gmane.comp.apache.mod-perl
喜欢的话我还是推荐试下 newgroup. I love it very much.
Perl is not the whole part of life. I know!
<xml><message>OK</message></xml>然后 javascript 的代码大概为:
function ajax() {
var myAjax = new Ajax.Request( url, {
method: 'get',
parameters: pars,
onSuccess: showResponse,
} );
}
function showResponse(request) {
response = request.responseText;
JSAN.use('XML.ObjTree');
var xotree = new XML.ObjTree();
var tree = xotree.parseXML( response );
$('message').innerHTML = tree.xml.message;
}
这是针对回复只有一个 <message> 的。如果是多个 messages, javascript 的代码可以为:for (i = 0; i < tree.xml.message.length; i++) {唯一有点麻烦的是,我们期待回复的是 message array, 但是只有回了一个 message, 那这个 for 会失败,但是有 tree.xml.message 所以在 for 后面得加个// ugly hack, for only one
if (tree.xml.message) {
SELECT * FROM comment WHERE reply_to = ?来得到我想要的结果。但是我用
SELECT * FROM comment WHERE reply_to = ? AND object_id = ? AND object_type = ?时,结果是一样的,但是速度从 7-9s 提高到 0.07-0.09, 速度提升了百倍。这东西可能在表的 rows 比较少的时候效果不明显。但在 rows 是 4,530,000 时就有百倍的提升。
sub test : Global {
my ( $self, $c ) = @_;
unless ($c->user_exists) {
$c->res->redirect('/login');
# return 1;
}
$c->res->body($c->user->user_id);
}注意这里的 $c->res->redirect, 它不是马上一碰到就执行的,而是全部执行完整个 test 子程序才执行的。JSAN.js根据 http://www.openjsan.org/doc/b/be/beppu/Form/Validator/0.33/lib/Form/Validator.html 这里的说法写 HTML 文件。大致为:
Form/Validator.js
Form/Validator/*
<script src='/js/JSAN.js'></script>
<form name="stuff" ...
<script>
JSAN.use('Form.Validator');
JSAN.use('Form.Validator.Report.AlertAll');
fv = new Form.Validator(document.stuff);
fv.reporter('AlertAll'); // show a pop-up with all errors
fv.set('title', 'notBlank', "Title is required.");
fv.set('text', fv.makeValueMin(5), "Text must be 5 or greater.");
</script>
sub vote : Global {
my ( $self, $c ) = @_;
unless ($c->user_exists) {
#$c->res->redirect('/login');
$c->res->body(<<HTML);
<script>
top.location = '/login';
</script>
HTML
return 1;
}TT files:var myAjax = new Ajax.Updater('vote_result', url, {method: 'get', parameters: pars, evalScripts: true});sub vote : Global {
my ( $self, $c ) = @_;
$c->res->redirect('/login') unless ($c->user_exists);and TT files:var url = '/vote';目前没有解决方案。mailling list 的问题在这:http://lists.rawmode.org/pipermail/catalyst/2006-April/thread.html#6563
var myAjax = new Ajax.Updater('vote_result', url, {method: 'get',
parameters: pars});
<div id='vote_result'></div>
$ENV{DBIX_CLASS_STORAGE_DBI_DEBUG} = 1;将这个写在 Root.pm 的 sub auto 里就可以了。package Template::Plugin::HtmlToText;
use strict;
use vars qw( @ISA $VERSION );
use base qw( Template::Plugin );
use Template::Plugin;
$VERSION = '0.01';
sub new {
my ($class, $context, $arg) = @_;
$context->define_filter('html2text', [ \&html2text => 1 ]);
return \&tt_wrap;
}
sub html2text {
my ($context, $args) = @_;
return sub {
my $html = shift;
return $html unless ($html =~ m#(<|>)#s);
require HTML::TreeBuilder;
my $tree = HTML::TreeBuilder->new->parse($html);
require HTML::FormatText;
my $formatter = HTML::FormatText->new(%{$args});
my $text = $formatter->format($tree);
return $text;
}
}
1;
[% USE FillInForm %]
[% FILTER fillinform fdat => journal_date || c.req.params %]
<form>
<input type='radio'
[% END %]
[% USE FillInForm %]
[% IF journal;
journal_date = {
title => journal.title,
};
END; %]
[% FILTER fillinform fdat => journal_date || c.req.params %]
[% USE FillInForm %]
[% FILTER fillinform fdat => journal || c.req.params %]