Japanese plugin dev 2 2 - Hiranyaloka/Documentation GitHub Wiki
ä»åã¯ãããã¯ã¿ã°ãå®çŸãããã©ã°ã€ã³ã解説ããŸãã
ãããã¯ã¿ã°ã®ä»£è¡šæ Œã¯<MTBlogs><MTEntries><MTTags>ã®ãããªã¿ã°ã§ãã
<MTBlogs>ïœ</MTBlogs>ã®ããã«å©çšããŸãã
ãããã¯äž»ã«ããŒã¿ããŒã¹ããæ å ±ãéãããã®æ å ±ãå ã«äžã®ãã¡ã³ã¯ã·ã§ã³ã¿ã°ãªã©ã«æ å ±ãäžããæåãæç« ãåºåãããŸãã
äžèšã®ãããªçç±ã§ãããã¯ã¿ã°ã¯ã«ãŒãåŠçãããŸãããPerlçã®åŠçãšãPHPçã®åŠçã§èšè¿°æ³ãå€ãã£ãŠããŸããç°¡åã«èª¬æãããšä»¥äžã«ãªããŸãã
- ã¿ã°ã®ããã°ã©ã å ã§é åãçšæããããã«ãªããžã§ã¯ããªã©ãæ ŒçŽããŸãã
- ãã®åŸãããã°ã©ã å ã§é åãã«ãŒããããªããžã§ã¯ããªã©ãã³ã³ããã¹ãã«æ ŒçŽããŸã
- ãã³ãã¬ãŒãã®ãããã¯ã¿ã°ã®äžã«èšèŒãããŠãããã¡ã³ã¯ã·ã§ã³ã¿ã°ã«ã³ã³ããã¹ããæž¡ããæåãªã©ãšããããŠåºåããŸãã
- å šãŠã®é åã«å¯ŸããŠåŠçãè¡ã£ãããããã¯ã¿ã°ãæããŸãã
- ã¿ã°ã®ããã°ã©ã å ã§é åãçšæããããã«ãªããžã§ã¯ããªã©ãæ ŒçŽããŸãã
- ååŸããé åãã³ã³ããã¹ãã«æ ŒçŽããŸãã
- ïŒåãã³ãã¬ãŒãã®ãããã¯ã¿ã°ã®äžã«èšèŒãããŠãããã¡ã³ã¯ã·ã§ã³ã¿ã°ã«ã³ã³ããã¹ããæž¡ããæåãªã©ãšããããŠåºåããŸããåºååŸãäžæŠããã°ã©ã ãæããŸãã
- ïŒåç®ä»¥éã¯ã³ã³ããã¹ãããé åãååŸããæ¬¡ã®è¡ã®åŠçãè¡ãããã°ã©ã ãæããŸãã
- å šãŠã®é åã«å¯ŸããŠåŠçãçµãã£ãããã³ã³ããã¹ããåæåãããã°ã©ã ãæããŸãã
ãã©ã°ã€ã³ã®ä»æ§ã¯ä»¥äžã«ãªããŸãã
- ã«ãŒãéšåã®ãããã¯ã¿ã°(<MTCategoryBreadcrumbs>)
- ãã³ããã衚瀺ãããã¡ã³ã¯ã·ã§ã³ã¿ã°(<MTCategoryBreadcrumbTab>)
- é
眮ããã¿ã°ã¯ä»¥äžã®ãšãã
<p><MTCategoryBreadcrumbs><MTCategoryBreadcrumbTab></MTCategoryBreadcrumbs></p>
- å©çšå¯Ÿè±¡ã¯ããã°èšäºã®ã¿
- ã«ããŽãªãèšå®ãããŠããªãå Žåã¯ä»¥äžã®è¡šç€ºã«ãªãã"Top"ã¯ã¢ãŒã«ã€ããããããŒãžãžã®ãªã³ã¯ã匵ãããŠãã
[ Top ]
- ã«ããŽãªãèšå®ãããŠããå Žåããã³ãããªã¹ãã«èŠªã«ããŽãªããé ã«é
眮ãã
[ Top ] < [ foo ] < [ subfoo ]
- ã«ããŽãªã®ã¢ãŒã«ã€ããäœæãããŠããªãå Žåãäžèš"foo"ã®ããã«ãªã³ã¯ã¯åŒµãããªã
- ã«ããŽãªã®ã¢ãŒã«ã€ããäœæãããŠããå Žåãäžèš"subfoo"ã®ããã«ã«ããŽãªã¢ãŒã«ã€
ããžã®ãªã³ã¯ã匵ããã - 察象ãšããã«ããŽãªã¯ã¡ã€ã³ã«ããŽãªïŒâå°ä»ãã®ç©ïŒã®ã¿
åãªããžã§ã¯ããæ£ããããŒããããŠãããã確èªããŸãã
use strict;
use lib qw( t/lib lib extlib );
use warnings;
use MT;
use Test::More tests => 5;
use MT::Test;
ok(MT->component ('MyPlugin05'), "MyPlugin05 plugin loaded correctry");
require_ok('MyPlugin05::L10N');
require_ok('MyPlugin05::L10N::ja');
require_ok('MyPlugin05::L10N::en_us');
require_ok('MyPlugin05::Tags');
1;
ãã¹ãããã®ã¯ä»¥äžã®ïŒé ç®ã§ãã
- 空æååãã€ã³ããããããšã空æååãæ»ã£ãŠããã
- è€æ°ã«ããŽãªãæã£ããšã³ããªãŒïŒä»¶ãååŸãããã³ãããªã¹ããæ»ã£ãŠããã
- ã«ããŽãªãæããªããšã³ããªãŒïŒä»¶ãååŸããã¢ãŒã«ã€ãããããžã®ãªã³ã¯ãæ»ã£ãŠããã
éäžæ¹è¡ãããŠããŸãããå®éã¯ïŒè¡ã§ãã
#===== Edit here
my $test_json = <<'JSON';
[
{ "r" : "1", "t" : "", "e" : ""},
{ "r" : "1", "t" :
"<mt:Entries id=\"7\"><MTCategoryBreadcrumbs><MTCategoryBreadcrumbTab></MTCategoryBreadcrumbs></mt:Entries>",
"e" : "[ <a href=\"http://narnia.na/nana/archives/\">Top</a> ]
< [ <a href=\"http://narnia.na/nana/archives/foo/index.html\">foo</a> ]
< [ <a href=\"http://narnia.na/nana/archives/foo/subfoo/index.html\">subfoo</a> ]"},
{ "r" : "1", "t" :
"<mt:Entries id=\"8\"><MTCategoryBreadcrumbs><MTCategoryBreadcrumbTab></MTCategoryBreadcrumbs></mt:Entries>",
"e" : "[ <a href=\"http://narnia.na/nana/archives/\">Top</a> ]"}
]
JSON
#=====
åç« ã§äœæããMyPlugin05ãå ã«ãã©ã°ã€ã³ãäœæããŸãã
ã°ããŒãã«ã»ã¢ãã£ãã¡ã€ã¢ã®è¿œå ã«ã¯ä»¥äžã®ããã«"tags"=> âmodifierâ=> âã¢ãã£ãã¡ã€ã¢åâ => $ãã©ã°ã€ã³å::ãã³ãã©å ãèšè¿°ããŸãã
"modifier"ã«ã¯ããããã¯ã¿ã°ã¯"block"ããã¡ã³ã¯ã·ã§ã³ã¿ã°ã«ã¯"function"ãèšèŒããŸãã
id: MyPlugin06
name: <__trans phrase="Sample Plugin Block tag">
version: 1.0
description: <__trans phrase="_PLUGIN_DESCRIPTION">
author_name: <__trans phrase="_PLUGIN_AUTHOR">
author_link: http://www.example.com/about/
doc_link: http://www.example.com/docs/
l10n_class: MyPlugin06::L10N
tags:
block:
CategoryBreadcrumbs: $MyPlugin06::MyPlugin06::Tags::hdlr_categorybreadcrumbs
function:
CategoryBreadcrumbTab: $MyPlugin06::MyPlugin06::Tags::hdlr_categorybreadcrumbtab
package MyPlugin06::L10N; use strict; use base 'MT::Plugin::L10N'; 1;
package MyPlugin06::L10N::en_us;
use strict;
use base 'MyPlugin06::L10N';
use vars qw( %Lexicon );
%Lexicon = (
'_PLUGIN_DESCRIPTION' => 'Sample block tag',
'_PLUGIN_AUTHOR' => 'Plugin author',
);
1;
package MyPlugin06::L10N::ja;
use strict;
use base 'MyPlugin06::L10N::en_us';
use vars qw( %Lexicon );
%Lexicon = (
'Sample Plugin Block tag' => 'ãµã³ãã«ãã©ã°ã€ã³ ãããã¯ã¿ã°',
'_PLUGIN_DESCRIPTION' => 'ãããã¯ã¿ã° ãã¹ããã©ã°ã€ã³',
'_PLUGIN_AUTHOR' => 'ãã©ã°ã€ã³äœè
',
);
1;
package MyPlugin06::Tags;
use strict;
sub hdlr_categorybreadcrumbs {
my ($ctx, $args, $cond) = @_;
my $blog = $ctx->stash('blog') || return;
my $entry = $ctx->stash('entry')
|| $ctx->error(MT->translate('You used an [_1] tag outside of the proper context.', 'CategoryBreadcrumbs'));
my $cat = $entry->category() || return _hdlr_top_link($blog);
my @categories = ();
while (1){
if ($cat->parent() == 0) {
push (@categories, $cat);
last;
}
push (@categories, $cat);
$cat = MT::Category->load($cat->parent());
}
@categories = reverse @categories;
my $out = _hdlr_top_link($blog);
for my $category (@categories) {
local $ctx->{__stash}{category} = $category;
my $tokens = $ctx->stash('tokens');
my $builder = $ctx->stash('builder');
$out .= $builder->build( $ctx, $tokens, $cond)
|| return $ctx->error( $builder->errstr );
}
return $out;
}
sub hdlr_categorybreadcrumbtab {
my ($ctx, $args) = @_;
my $blog = $ctx->stash('blog') || return;
my $category = $ctx->stash('category')
|| $ctx->error(MT->translate('You used an [_1] tag outside of the proper context.', 'CategoryBreadcrumbsTab'));
require MT::Util;
my $url = $blog->archive_url;
$url .= '/' unless $url =~ m!/$!;
$url .= MT::Util::archive_file_for(undef, $blog, 'Category', $category);
my $count = MT::Placement->count({category_id => $category->id});
my $anchor_start = '';
my $anchor_end = '';
if ( $url && $count ) {
$anchor_start = '<a href="' . $url . '">';
$anchor_end = '</a>';
}
my $label = $category->label;
my $out = ' < [ ' . $anchor_start . $label . $anchor_end. ' ]';
return $out;
}
sub _hdlr_top_link {
my ($blog) = @_;
my $blog_url = $blog->archive_url;
return "[ <a href=\"$blog_url\">Top</a> ]";
}
1;
- ããã±ãŒãžå®£èš
åãã«package宣èšããã"use strict;"ããŠããŸãã

- ãã³ãã©é¢æ°å®£èš(<MTCategoryBreadcrumbs>)
ãã³ãã©é¢æ°å®£èšãšåŒã³åºãæã®"$ctx", â$argsâã®ä»£å ¥ã§ãããã®é¢æ°ã¯ãããã¯ã¿ã°(<MTCategoryBreadcrumbs>)ã«ãªããŸãã

- ã³ã³ããã¹ãïŒ$ctxïŒããã®ãªããžã§ã¯ãã®ååŸ
7è¡ç®ã$ctx->stash('blog')ãšãããšãä»åŠçãããŠããBlogãªããžã§ã¯ããååŸã§ããŸããBlogãªããžã§ã¯ããååŸã§ããªãå Žåããšã©ãŒè¡šç€ºããåŠçãæããŸãã
8ïœ10è¡ç®ã$ctx->stash('entry')ãšãããšãä»åŠçãããŠããEntryãªããžã§ã¯ããååŸã§ããŸããEntryãªããžã§ã¯ããååŸã§ããªãå Žåããšã©ãŒãåºåããŸããEntryãªããžã§ã¯ãïŒããã°èšäºïŒã®ã«ããŽãªã$catã«ä»£å ¥ããŠããŸãã
ã«ããŽãªãæå®ãããŠããªãå Žåãã¢ãŒã«ã€ãããããžã®ãã¹ïŒ[ Top ]ïŒããã³ãããªã¹ãã®å é ãšããŠè¡šç€ºãåŠçãçµäºããŸãã
ãã®ã¢ãŒã«ã€ãããããžã®ãã¹ãäœæããã®ã颿°"_hdlr_top_link($blog)"ïŒåŸè¿°ïŒã«ãªããŸãã

- ã«ããŽãªã®é
åã®æºå
categoriesé åãçšæããããã°èšäºã«èšå®ãããŠããã«ããŽãªãå«ïŒåïŒèŠªã®é ã«æ ŒçŽããŠãããŸãã
ã«ããŽãªã®"parent"ã«ã¯èŠªã«ããŽãªã®IDãå ¥ã£ãŠããŸãããããã¬ãã«ã®èŠªã®å Žåã¯"0"ãå ¥ã£ãŠããã®ã§ããã§åŠçãçµäºããŸãã
ã«ããŽãªãåŒã³åºãã«ã¯ïŒïŒè¡ç®ã®"MT::Category->load($cat_id);"ãçšããŸããä»åã¯åãå«ã«ããŽãªã§ãã®ã§ã芪ã«ããŽãªã®ã«ããŽãª idã§ãã"$cat->parent()"ãloadã®åŒæ°ãšããŠæž¡ããŸãã
21è¡ç®ã§é åããªããŒã¹ãããå«ïŒåïŒèŠªãããã芪ïŒåïŒå«ãã®é ã«å€æŽããŸãã

- ãããã¯ã¿ã°ã§å²ãããç¯å²ã®å
éšåŠç
23è¡ç®ã§ããã®ãããã¯ã¿ã°ã®åºåã®å é ã«ïŒ[ Top ]ïŒïŒåŸè¿°ïŒãçšæããŸãã
foræãçšããŠã«ããŽãªé åã®äžããäžã€ãã€ã«ããŽãªãåŠçããŸãã
25è¡ç®ã§ã³ã³ããã¹ãã«ã«ããŽãªãèšå®ããŸãã
$tokenãš$builderãçšæããããã¯ã¿ã°ã«ã¯ããŸããéšåã®åŠçãè¡ããŸããåŠçã«å€±æããå Žåã¯ãã«ããšã©ãŒãè¿ããŸãã

- ã¿ã°ã®çµäº
ãããã¯ã¿ã°å ã®æååãè¿ãåŠçãçµäºããŸãã

- ãã³ãã©é¢æ°å®£èš(<MTCategoryBreadcrumbTab>)
ãã³ãã©é¢æ°å®£èšãšåŒã³åºãæã®"$ctx", â$argsâã®ä»£å ¥ã§ãããã®é¢æ°ã¯ãããã¯ã¿ã°ã®å éšã§å©çšãããã¡ã³ã¯ã·ã§ã³ã¿ã°(<MTCategoryBreadcrumbTab>)ã«ãªããŸãã

- ã³ã³ããã¹ãïŒ$ctxïŒããã®ãªããžã§ã¯ãã®ååŸ
$ctx->stash('blog')ãšãããšãä»åŠçãããŠããBlogãªããžã§ã¯ããååŸã§ããŸããBlogãªããžã§ã¯ããååŸã§ããªãå Žåããšã©ãŒè¡šç€ºããåŠçãæããŸãã
$ctx->stash('category')ãšãããšãä»åŠçãããŠããCategoryãªããžã§ã¯ããååŸã§ããŸããCategoryãªããžã§ã¯ããååŸã§ããªãå Žåããšã©ãŒãåºåããŸããCategoryãªããžã§ã¯ãã$categoryã«ä»£å ¥ããŠããŸãã

- ã«ããŽãªã¢ãŒã«ã€ãURLã®ååŸ
MT::Utilãå©çšããåŠçäžã®ã«ããŽãªã®ã¢ãŒã«ã€ãURLãååŸããŸããïŒ$urlïŒ

- ã«ããŽãªã®å©çšãã§ãã¯
åŠçäžã®ã«ããŽãªã®å©çšåæ°ãã«ãŠã³ãããŸãã

- aã¿ã°ã®æºå
空ã®aã¿ã°ãçšæããŸãããã®äžã§URLããããå©çšåæ°ãïŒä»¥äžã®å Žåãaã¿ã°ïŒ$anchor_start, $anchor_endïŒãã»ããããŸããå©çšåæ°ããŒãã®æã¯ã«ããŽãªã¢ãŒã«ã€ããã¹ãç¡ããããªã³ã¯ããŸããã

- ã«ããŽãªã©ãã«ã®çæãšåŠçã®çµäº
58è¡ã§ã«ããŽãªã®ã©ãã«ïŒè¡šç€ºåïŒãååŸããŸãã
59è¡ã§ïŒ < [ <a href=âhttp://www.example.com/foo/subfoo/â> ]ïŒãšãã£ãæååãæºåãã61è¡ç®ã§æååãè¿ããŸãã

- ãã³ãããªã¹ãã®å
é ãªã³ã¯ã®äœæ
ãã³ãããªã¹ãã®ïŒ[ Top ]ïŒãæºåããå éšé¢æ°ã§ãã
Topã®éšåã«ãã¢ãŒã«ã€ããã¹ãžã®ãªã³ã¯ãä»ããŸãã

ãã¡ã€ã«åã¯ãããã¯ã¿ã°ã§ããäºãš<MTCategoryBreadcrumbs>ã¿ã°ã§ããäºãããblock.mtcategorybreadcrumbs.phpãšãªããŸãã
<?php
function smarty_block_mtcategorybreadcrumbs ($args, $content, &$ctx, &$repeat) {
$localvars = array('_categories', '_categories_counter', 'category');
$blog = $ctx->stash('blog');
if (!$blog) {
return;
}
$entry = $ctx->stash('entry');
if (!$entry) {
return;
}
$cat = $entry->category();
if (!$cat) {
return _hdlr_top_link($blog);
}
if (!isset($content)) {
$ctx->localize($localvars);
while (1) {
if ($cat->parent == 0) {
$categories[] = $cat;
break;
}
$categories[] = $cat;
$category_id = $cat->category_parent;
$cat = $ctx->mt->db()->fetch_category($category_id);
}
$categories = array_reverse($categories);
$ctx->stash('_categories', $categories);
$counter = 0;
} else {
$categories = $ctx->stash('_categories');
$counter = $ctx->stash('_categories_counter');
}
if ($counter < count($categories)) {
$category = $categories[$counter];
$ctx->stash('category', $category);
$ctx->stash('_categories_counter', $counter + 1);
$repeat = true;
} else {
$ctx->restore($localvars);
$repeat = false;
}
if ($counter == 1) {
$content = _hdlr_top_link($blog) . $content;
}
return $content;
}
function _hdlr_top_link ($blog) {
$blog_url = $blog->archive_url();
return "[ <a href=\"$blog_url\">Top</a> ]";
}
?>
- ãã³ãã©é¢æ°å®£èš(<MTCategoryBreadcrumbs>)
blockåã¯smartyèšæ³ã«ã®ã£ãšã£ãŠ smarty_block_mtcategorybreadcrumbs ãšãªããŸããäžç·ã«åŒã³åºãæã®"$args", â$contentâ, â$ctxâ, â$repeatâã®ååŸãããŸããPerlçãšç°ãªãäºã«æ³šæããŠãã ããã

- ã³ã³ããã¹ãïŒ$ctxïŒããã®ãªããžã§ã¯ãã®ååŸ
ã³ã³ããã¹ã($ctx)ãããªããžã§ã¯ããååŸããŸãã
Blogãªããžã§ã¯ããååŸããååŸã§ããªãã£ãå Žåã¯ãã®ãŸãŸåŠçãæããŸãã
Entryãªããžã§ã¯ããååŸããååŸã§ããªãã£ãå Žåããã®ãŸãŸåŠçãæããŸãã
Entryãªããžã§ã¯ãã«ã«ããŽãªãèšå®ãããŠããªãã£ãå Žåã¯ã¢ãŒã«ã€ãããããžã®ãªã³ã¯ïŒ[ Top ]ïŒïŒåŸè¿°ïŒãè¿ãåŠçãæããŸãã

- åæå€ã®èšå®ãšïŒåç®ä»¥éã®å€ã®èšå®
18è¡ç®ã§ç¢ºèªããŠããã®ã¯"$content"ã«å€ãèšå®ãããŠãããã§ããå€ãèšå®ãããŠããå Žåã19è¡ïœ32è¡ç®ã®æäœãè¡ããŸããå€ãèšå®ãããŠããå Žåã¯34ïœ35è¡ç®ã®åŠçãè¡ããŸãïŒåŸè¿°ïŒã
19è¡ç®ã§å€ã®æ°žç¶åãè¡ãããã®åæåãããŸãããããã«ã¯ã«ããŽãªã®é åããåŠçäžã®ã«ããŽãªé åã®è¡æ°ãªã©ããããŸãã
21ïœ30è¡ç®ã¯Perlçã®12ïœ21è¡ã®åŠçãšã»ãŒåãã§ããã«ããŽãªé åã«ã芪ïŒåïŒå«ãã®é ã§ã«ããŽãªãå®çŸ©ãããŸãã
31è¡ç®ã§ã³ã³ããã¹ãã«ã«ããŽãªé åãã»ããããŸãã
32è¡ç®ã§ã«ããŽãªé åã®åŠçè¡æ°ã0ã«èšå®ããŠããŸãã
18è¡ç®ã§$contentã«å€ãèšå®ãããŠããå ŽåãïŒåç®ä»¥éã®ã«ãŒãã§ããäºãåããã®ã§ã³ã³ããã¹ãããã«ããŽãªé åãšãã«ããŽãªé åã®åŠçè¡æ°ã34ïœ35è¡ç®ã§ååŸããŸãã

- ã«ãŒãåŠç
ã«ããŽãªé åã®è¡æ°ããåŠçè¡æ°ãè¶ ããªããã°ã39ïœ40è¡ç®ã§ã«ããŽãªãååŸãã³ã³ããã¹ãã«ã«ããŽãªãã»ãããã41è¡ç®ã§åŠçè¡æ°ãïŒãã©ã¹ããŸãïŒæ¬¡ã®åŠçã§æ¬¡ã®è¡ãåç §ãããããïŒã
42è¡ç®ã§ã¯ã«ãŒããç¶ããšããäºã§$repeatã«trueãã»ãããããã®ifæãæããŸãã 38è¡ç®ã§åŠçè¡æ°ãè¶ ããŠããïŒå šãŠã®è¡ã®åŠçãçµãã£ãïŒå Žåãæ°žç¶åãããŠããæ å ±ãéæŸãã$repeatã«falseãã»ããããŠã«ãŒããçµäºããŸãã

- 颿°ã®çµäº
ã«ãŒãäžã§ãã£ãŠããã«ãŒããçµãã£ãŠããŠãPHPçã®ãããã¯ã¿ã°ã¯é¢æ°ãæããŸããããã§ã¯ã$counterãïŒã®ãšãïŒã€ãŸãã«ãŒãã®ååïŒã«åŠçäžã®æåå $content ã®å é ãžãã¢ãŒã«ã€ãããããžã®ãªã³ã¯ïŒ[ Top ]ïŒïŒåŸè¿°ïŒãä»äžããŸããããã§ãTopïŒèŠªããšããåºåã«ãªããŸãã
åå以å€ã¯ $content ããã®ãŸãŸïŒãTopïŒèŠªïŒåãïŒè¿ããŠé¢æ°ãæããŸãã

- ãã³ãããªã¹ãã®å
é ãªã³ã¯ã®äœæ
Perlçãšåãããã³ãããªã¹ãã®ïŒ[ Top ]ïŒãæºåããå éšé¢æ°ã§ãã
Topã®éšåã«ãã¢ãŒã«ã€ããã¹ãžã®ãªã³ã¯ãä»ããŸãã

ãã¡ã€ã«åã¯ãã¡ã³ã¯ã·ã§ã³ã¿ã°ã§ããäºãš<MTCategoryBreadcrumbTab>ã¿ã°ã§ããäºãããfunction.mtcategorybreadcrumbtab.phpãšãªããŸãã
<?php
function smarty_function_mtcategorybreadcrumbtab ($args, &$ctx) {
$blog = $ctx->stash('blog');
$category = $ctx->stash('category');
$args['blog_id'] = $ctx->stash('blog_id');
if (!$category) return '';
$url = $ctx->mt->db()->category_link($category->category_id, $args);
$blog = $ctx->stash('blog');
$index = $ctx->mt->config('IndexBasename');
$ext = $blog->blog_file_extension;
if ($ext) $ext = '.' . $ext;
$index .= $ext;
$url = preg_replace('/\/(#.*)?$/', "/$index\$1", $url);
$cat_list[] = $category->category_id;
$placements = $ctx->mt->db()->fetch_placements(array('category_id' => $cat_list));
if ($placements[0]) {
$count = 1;
}
$anchor_start = '';
$anchor_end = '';
if ( $url && $count ) {
$anchor_start = '<a href="' . $url . '">';
$anchor_end = '</a>';
}
$label = $category->label;
$out = ' < [ ' . $anchor_start . $label . $anchor_end. ' ]';
return $out;
}
?>
- ãã³ãã©é¢æ°å®£èš(<MTCategoryBreadcrumbTab>)ãããã¯ã¿ã°ã®ã«ãŒãå
ã§å©çšããããã¡ã³ã¯ã·ã§ã³ã¿ã°ã§ãã
functionåã¯smartyèšæ³ã«ã®ã£ãšã£ãŠ smarty_function_mtcategorybreadcrumbtab ãšãªããŸããäžç·ã«åŒã³åºãæã®"$args", â$ctxâã®ååŸãããŸããPerlçãšç°ãªãäºã«æ³šæããŠãã ããã

- ã³ã³ããã¹ãïŒ$ctxïŒããã®ãªããžã§ã¯ãã®ååŸ
ããã°ãšã«ããŽãªã®ãªããžã§ã¯ããã³ã³ããã¹ãããååŸããŸãã

- ã«ããŽãªã¢ãŒã«ã€ãURLã®ååŸ
Perlçã®å Žå"MT::Util::archive_file_for()"ãå©çšã§ããŸããããPHPçã«ã¯çšæãããŠããªãããã<MTCategoryArchiveLink> ( $MT_DIR/php/lib/function.mtcategoryarchivelink.php ) ã®PHPã³ãŒãããå¿ èŠãªç©ãåŒçšããŸããã

- ã«ããŽãªã®å©çšãã§ãã¯
åŠçäžã®ã«ããŽãªã®å©çšåæ°ãã«ãŠã³ãããŸããå ·äœçã«ã¯MT::Placementsãªããžã§ã¯ãã察象ã®ã«ããŽãªIDã§fetchãã$placements[0]ãååšããã察象ã®ã«ããŽãªãå©çšãããŠããïŒ$count = 1;ïŒãã®ãšããŸãã

- aã¿ã°ã®æºå
空ã®aã¿ã°ãçšæããŸãããã®äžã§URLããããå©çšåæ°ãïŒä»¥äžã®å Žåãaã¿ã°ïŒ$anchor_start, $anchor_endïŒãã»ããããŸããå©çšåæ°ããŒãã®æã¯ã«ããŽãªã¢ãŒã«ã€ããã¹ãç¡ããããªã³ã¯ããŸããã

- ã«ããŽãªã©ãã«ã®çæãšåŠçã®çµäº
30è¡ã§ã«ããŽãªã®ã©ãã«ïŒè¡šç€ºåïŒãååŸããŸãã
31è¡ã§ïŒ < [ <a href=âhttp://www.example.com/foo/subfoo/â> ]ïŒãšãã£ãæååãæºåãã33è¡ç®ã§æååãè¿ããŸãã

$MT_DIR/
|__ plugins/
|__ MyPlugin06/
|__ config.yaml
|__ lib/
| | MyPlugin06/
| |__ L10N.pm
| | L10N/
| | | en_us.pm
| | | ja.pm
| | Tags.pm
|__ php/
| |block.mtcategorybreadcrumbs.php
| |function.mtcategorybreadcrumbtab.php
|__ t/
|00-compile.t
|01-tags.t
ã§ã¯ãäœæãããã©ã°ã€ã³ã«å¯ŸããŠãã¹ããè¡ããŸãã
$ cd $MT_DIR $ perl plugins/MyPlugin06/t/00-compile.t 1..5 ok 1 - MyPlugin05 plugin loaded correctry ok 2 - require MyPlugin05::L10N; ok 3 - require MyPlugin05::L10N::ja; ok 4 - require MyPlugin05::L10N::en_us; ok 5 - require MyPlugin05::Tags;
$ perl plugins/MyPlugin06/t/01-tags.t 1..7 ok 1 - 'blog-name' template found ok 2 - Test blog loaded ok 3 - Test entry loaded ok 4 - perl test 1 ok 5 - perl test 2 ok 6 - perl test 3 ok 7 - ok - php test 1 ok - php test 2 ok - php test 3
$ prove plugins/MyPlugin06/t/*.t plugins/MyPlugin06/t/00-compile.t .. ok plugins/MyPlugin06/t/01-tags.t ..... ok All tests successful. Files=2, Tests=12, 44 wallclock secs ( 0.07 usr 0.18 sys + 17.69 cusr 8.18 csys = 26.12 CPU) Result: PASS
ãã¹ãã§ã®ç¢ºèªã¯çµäºããŸãããå®éã«ç®¡çç»é¢ããããã°èšäºã¢ãŒã«ã€ãã®"<div id=âalphe-innerâ>âã®äžã«ãâ<p><MTCategoryBreadcrumbs><MTCategoryBreadcrumbTab></MTCategoryBreadcrumbs></p>"ã¿ã°ãèšå ¥ããã¹ã¿ãã£ãã¯ã®å Žåã¯åæ§ç¯åŸããã€ãããã¯ã§ã¯ãã®ãŸãŸåããã°èšäºã«ãã³ãããªã¹ããæžã蟌ãŸããŸãã
- èšå ¥äŸ
ïŒåç¥ïŒ <div id="alpha"> <div id="alpha-inner"> <p><MTCategoryBreadcrumbs><MTCategoryBreadcrumbTab></MTCategoryBreadcrumbs></p> ïŒåŸç¥ïŒ
- åºåäŸ
éäžæ¹è¡ãããŠããŸãããå®éã«ã¯ïŒè¡ã§ãã ïŒåç¥ïŒ <div id="alpha"> <div id="alpha-inner"> <p>[ <a href="http://narnia.na/test5/">Top</a> ] < [ foo ] < [ <a href="http://narnia.na/test5/foo/subfoo/index.html">subfoo</a> ]</p> ïŒåŸç¥ïŒ
ä»åã®ãã€ã³ãã¯ãã©ããã£ãŠåŠçãã«ãŒãããããããã©ããã£ãŠã³ã³ããã¹ã䜿ã£ãŠãããã¯ã¿ã°ã®å åŽã«æ å ±ãæž¡ãããã«ãããŸããçŽæçãªã®ã¯ãã¯ãPerlçã§ã¯ãªãã§ããããïŒ
PHPçã¯å°ãã ãããŒãã«ãé«ãã§ããããèªåã§ãã©ã°ã€ã³ãæžããšãã«ã¯æ¯éãã£ã¬ã³ãžããŠã¿ãŠãã ããã
ãŸããå®çšã«èããããã«ãã¬ã€ã¢ãŠããèªç±ã«å€æŽã§ããããCSSãšã®é£ä¿ãåããªã©ã®å®è£ ãç·Žç¿ã«ãªãã®ã§è©ŠããŠã¿ãŠãã ããã
- ãã©ã°ã€ã³éçºã®ããã®ãã¡ãŒã¹ãã¹ããã
- ã¬ãžã¹ããªãYAMLã«ã€ããŠ
- ç°å¢å€æ°ã«ã€ããŠ
- ãã©ã°ã€ã³ã®ããŒã«ã©ã€ãŒãŒã·ã§ã³ã«ã€ããŠ
- ãã¹ãããªãã³ã§ã®ãã©ã°ã€ã³ã®éçºã«ã€ããŠ
- ã°ããŒãã«ã»ã¢ãã£ãã¡ã€ã¢ãã©ã°ã€ã³ã®éçºã«ã€ããŠ
- ãã¡ã³ã¯ã·ã§ã³ã¿ã° ãã©ã°ã€ã³ã®éçºã«ã€ããŠ
- ãããã¯ã¿ã° ãã©ã°ã€ã³ã®éçºã«ã€ããŠ
- ã³ã³ãã£ã·ã§ãã«ã¿ã° ãã©ã°ã€ã³ã®éçºã«ã€ããŠ
- ãã©ã°ã€ã³ã®ãããã°
- ãã©ã°ã€ã³ã®èšå®æ¹æ³
- ã³ãŒã«ããã¯ãšããã¯ãã€ã³ã
- ã¹ã±ãžã¥ãŒã«ã¿ã¹ã¯ã®éçº
- MTãªããžã§ã¯ãã®å©ç𿹿³
- ç¬èªãªããžã§ã¯ãã®äœæ
- æ°èŠã¢ããªã±ãŒã·ã§ã³ã®äœæ
- Transformerãã©ã°ã€ã³ã®éçº
- 管çç»é¢ã®ã¡ãã¥ãŒä¿®æ£
- ãªã¹ãã¢ã¯ã·ã§ã³ã®è¿œå
- åäœã¢ãŒãã®è¿œå ãšã¢ãŒãã«ãŠã£ã³ããŠã®è¡šç€º
- å€éšWeb APIãšã®é£æº
- æš©éãšããŒã«