⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 context.pm

📁 网页留言本,比一般的留言簿管用
💻 PM
📖 第 1 页 / 共 5 页
字号:
	return $ctx->{__stash}->{$key};    }}sub register_handler { $_[0]->{__handlers}{$_[1]} = $_[2] }sub handler_for      {    my $v = $_[0]->{__handlers}{$_[1]};    ref($v) eq 'ARRAY' ? @$v : $v}sub _hdlr_include {    my($arg, $cond) = @_[1,2];    if (my $tmpl_name = $arg->{module}) {        require MT::Template;        my $tmpl = MT::Template->load({ name => $tmpl_name,                                        blog_id => $_[0]->stash('blog_id') })            or return $_[0]->error(MT->translate(                "Can't find included template module '[_1]'", $tmpl_name ));        my $ret = $tmpl->build($_[0], $cond);        return defined($ret) ? $ret : $_[0]->error($tmpl->errstr);    } elsif (my $file = $arg->{file}) {        my $blog = $_[0]->stash('blog');        my @paths = ($file, map File::Spec->catfile($_, $file),                            $blog->site_path, $blog->archive_path);        my $path;        for my $p (@paths) {            $path = $p, last if -e $p && -r _;        }        return $_[0]->error(MT->translate(            "Can't find included file '[_1]'", $file )) unless $path;        local *FH;        open FH, $path            or return $_[0]->error(MT->translate(                "Error opening included file '[_1]': [_2]", $path, $! ));        my $c = '';        local $/; $c = <FH>;        close FH;        return $c;    }}sub _hdlr_link {    my($ctx, $arg, $cond) = @_;    if (my $tmpl_name = $arg->{template}) {        require MT::Template;        my $tmpl = MT::Template->load({ name => $tmpl_name,                                        type => 'index',                                        blog_id => $_[0]->stash('blog_id') })            or return $ctx->error(MT->translate(                "Can't find template '[_1]'", $tmpl_name ));        my $site_url = $ctx->stash('blog')->site_url;        $site_url .= '/' unless $site_url =~ m!/$!;        return $site_url . $tmpl->outfile;    } elsif (my $entry_id = $arg->{entry_id}) {        require MT::Entry;        my $entry = MT::Entry->load($entry_id)            or return $ctx->error(MT->translate(                "Can't find entry '[_1]'", $entry_id ));        return $entry->permalink;    }}sub _hdlr_mt_version {    require MT;    my $version = MT->VERSION;#     $version =~ s/a/&alpha;/g;#     $version =~ s/b/&beta;/g;    $version;}sub _hdlr_publish_charset {    MT::ConfigMgr->instance->PublishCharset || 'iso-8859-1';}sub _hdlr_default_language {    MT::ConfigMgr->instance->DefaultLanguage || 'en';}sub _hdlr_signon_url {    MT::ConfigMgr->instance->get("SignOnURL");}sub _hdlr_if_nonempty {    my ($ctx, $args, $cond) = @_;    $args->{tag} =~ s/^MT//;    my $handler = $ctx->handler_for($args->{tag});    if (defined($handler)) {	my $value = $handler->($ctx, { %$args });	if (defined($value) && $value ne '') # want to include "0" here	{	    _hdlr_pass_tokens($ctx, $args, $cond);	} else {	    _hdlr_pass_tokens_else($ctx, undef, $cond);	}    } else {	_hdlr_pass_tokens_else($ctx);	    }}sub _hdlr_if_nonzero {    my ($ctx, $args, $cond) = @_;    $args->{tag} =~ s/^MT//;    my $handler = $ctx->handler_for($args->{tag});    if (defined($handler)) {	my $value = $handler->($ctx, { %$args });	if (defined($value) && $value)	{	    _hdlr_pass_tokens($ctx, $args, $cond);	} else {	    _hdlr_pass_tokens_else($ctx, undef, $cond);	}    } else {	_hdlr_pass_tokens_else($ctx);	    }}sub _hdlr_error_message {    my $err = $_[0]->stash('error_message');    defined $err ? $err : '';}sub _hdlr_var {    my($ctx, $args) = @_;    my $tag = $ctx->stash('tag');    return $ctx->error(MT->translate(        "You used a [_1] tag without any arguments.", "<MT$tag>" ))        unless keys %$args && $args->{name};    if ($tag eq 'SetVar') {        my $val = defined $args->{value} ? $args->{value} : '';        $ctx->{__stash}{vars}{$args->{name}} = $val;    } else {        return $ctx->{__stash}{vars}{$args->{name}};    }    '';}sub _hdlr_cgi_path {    my $path = MT::ConfigMgr->instance->CGIPath;    $path .= '/' unless $path =~ m!/$!;    $path;}sub _hdlr_cgi_server_path {    my $path = MT::instance()->server_path() || "";    $path =~ s!/*$!!;    $path;}sub _hdlr_cgi_relative_url {    my $url = MT::ConfigMgr->instance->CGIPath;    $url .= '/' unless $url =~ m!/$!;    if ($url =~ m!^https?://[^/]+(/.*)$!) {        return $1;    } else {        return $url;    }}sub _hdlr_static_path {    my $path = MT::ConfigMgr->instance->StaticWebPath;    $path .= '/' unless $path =~ m!/$!;    $path;}sub _hdlr_comment_script { MT::ConfigMgr->instance->CommentScript }sub _hdlr_trackback_script { MT::ConfigMgr->instance->TrackbackScript }sub _hdlr_search_script { MT::ConfigMgr->instance->SearchScript }sub _hdlr_xmlrpc_script { MT::ConfigMgr->instance->XMLRPCScript }sub _hdlr_blogs {    my($ctx, $args, $cond) = @_;    my $builder = $ctx->stash('builder');    my $tokens = $ctx->stash('tokens');    require MT::Blog;    my $iter = MT::Blog->load_iter;    my $res = '';    while (my $blog = $iter->()) {        local $ctx->{__stash}{blog} = $blog;        local $ctx->{__stash}{blog_id} = $blog->id;        defined(my $out = $builder->build($ctx, $tokens, $cond))            or return $ctx->error($builder->errstr);        $res .= $out;    }    $res;}sub _hdlr_blog_id { $_[0]->stash('blog')->id }sub _hdlr_blog_name { $_[0]->stash('blog')->name }sub _hdlr_blog_description {    my $d = $_[0]->stash('blog')->description;    defined $d ? $d : '';}sub _hdlr_blog_url {    my $url = $_[0]->stash('blog')->site_url;    $url .= '/' unless $url =~ m!/$!;    $url;}sub _hdlr_blog_site_path {    my $path = $_[0]->stash('blog')->site_path;    $path .= '/' unless $path =~ m!/$!;    $path;}sub _hdlr_blog_archive_url { $_[0]->stash('blog')->archive_url }sub _hdlr_blog_relative_url {    my $host = $_[0]->stash('blog')->site_url;    if ($host =~ m!^https?://[^/]+(/.*)$!) {        return $1;    } else {        return '';    }}sub _hdlr_blog_timezone {    my $so = $_[0]->stash('blog')->server_offset;    my $no_colon = $_[1]->{no_colon};    my $partial_hour_offset = 60 * abs($so - int($so));    sprintf("%s%02d%s%02d", $so < 0 ? '-' : '+',	    abs($so), $no_colon ? '' : ':',	    $partial_hour_offset);}{    my %real_lang = (cz => 'cs', dk => 'da', jp => 'ja', si => 'sl');sub _hdlr_blog_language {    my $lang_tag = $_[0]->stash('blog')->language || '';    $lang_tag = ($real_lang{$lang_tag} || $lang_tag);    if ($_[1]->{'locale'}) {        $lang_tag =~ s/^(..)([-_](..))?$/$1 . '_' . uc($3||$1)/e;    } elsif ($_[1]->{"ietf"}) {        # http://www.ietf.org/rfc/rfc3066.txt        $lang_tag =~ s/_/-/;    }    $lang_tag;}}sub _hdlr_blog_host {    my $host = $_[0]->stash('blog')->site_url;    if ($host =~ m!^https?://([^/:]+)(:\d+)?/!) {        return $_[1]->{exclude_port} ? $1 : $1 . ($2 || '');    } else {        return '';    }}sub _hdlr_blog_entry_count {    my $blog_id = $_[0]->stash('blog')->id;    require MT::Entry;    scalar MT::Entry->count({ blog_id => $blog_id,                              status => MT::Entry::RELEASE() });}sub _hdlr_blog_comment_count {    my $blog_id = $_[0]->stash('blog')->id;    require MT::Comment;    scalar MT::Comment->count({ blog_id => $blog_id,                                visible => 1});}sub _hdlr_blog_cc_license_url {    $_[0]->stash('blog')->cc_license_url;}sub _hdlr_blog_cc_license_image {    my $cc = $_[0]->stash('blog')->cc_license or return;    my ($code, $license, $image_url) = $cc =~ /(\S+) (\S+) (\S+)/;    return $image_url if $image_url;    "http://creativecommons.org/images/public/" .        ($cc eq 'pd' ? 'norights' : 'somerights');}sub _hdlr_cc_license_rdf {    my($ctx, $arg) = @_;    my $blog = $ctx->stash('blog');    my $cc = $blog->cc_license or return;    my $cc_url = $blog->cc_license_url;    my $rdf = <<RDF;<!--<rdf:RDF xmlns="http://web.resource.org/cc/"         xmlns:dc="http://purl.org/dc/elements/1.1/"         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">RDF    ## SGML comments cannot contain double hyphens, so we convert    ## any double hyphens to single hyphens.    my $strip_hyphen = sub {        (my $s = $_[0]) =~ tr/\-//s;        $s;    };    if (my $entry = $ctx->stash('entry')) {        $rdf .= <<RDF;<Work rdf:about="@{[ $entry->permalink ]}"><dc:title>@{[ encode_xml($strip_hyphen->($entry->title)) ]}</dc:title><dc:description>@{[ encode_xml($strip_hyphen->(_hdlr_entry_excerpt(@_))) ]}</dc:description><dc:creator>@{[ encode_xml($strip_hyphen->($entry->author ? $entry->author->name : '')) ]}</dc:creator><dc:date>@{[ _hdlr_date($_[0], { 'format' => "%Y-%m-%dT%H:%M:%S" }) .             _hdlr_blog_timezone($_[0]) ]}</dc:date><license rdf:resource="$cc_url" /></Work>RDF    } else {        $rdf .= <<RDF;<Work rdf:about="@{[ $blog->site_url ]}"><dc:title>@{[ encode_xml($strip_hyphen->($blog->name)) ]}</dc:title><dc:description>@{[ encode_xml($strip_hyphen->($blog->description)) ]}</dc:description><license rdf:resource="$cc_url" /></Work>RDF    }    $rdf .= MT::Util::cc_rdf($cc) . "</rdf:RDF>\n-->\n";    $rdf;}sub _hdlr_blog_if_cc_license {    $_[0]->stash('blog')->cc_license ? _hdlr_pass_tokens(@_) : '';}sub _hdlr_entries {    my($ctx, $args, $cond) = @_;    require MT::Entry;    my @entries;    my $blog_id = $ctx->stash('blog_id');    my($cat, $author, $saved_entry_stash);    if ($args->{category}) {        if (!ref $args->{category} && $args->{category} !~ /\s+(?:AND|OR)\s+/) {            $cat = MT::Category->load({ label => $args->{category},                blog_id => $blog_id })                or return $ctx->error(MT->translate(                    "No such category '[_1]'", $args->{category}));        } else {            my @cat_objs;            my $is_and;            if (ref $args->{category}) {                $is_and = (shift @{$args->{category}}) eq 'AND';                @cat_objs = @{$args->{category}};            } elsif (my $cat_name = $args->{category}) {                $is_and = $cat_name =~ /AND/;                require MT::Category;                ## If this is a boolean lookup (like "Foo AND Bar"), we have to                ## special-case the search. Then we stick the resulting list of                ## entries into the stash so that it can be filtered using the                ## mechanism below.                return $ctx->error(MT->translate(                                   "You can't use both AND and OR in the same expression ([_1]).",                                   $cat_name ))                    if $cat_name =~ /\bAND\b/ && $cat_name =~ /\bOR\b/;                my @cats = split /\s+(?:AND|OR)\s+/, $cat_name;                require MT::Placement;                @cat_objs = map {                    my $cat = MT::Category->load({ label => $_,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -