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ãšã®é£æº
- æš©éãšããŒã«