本站的导航菜单, 最早是用JavaScript来写的(Document.print), 这样做比较方便, 但是现在网页的安全问题层出不穷, 因此很多人都禁用了JavaScript, 而导致访问页面时, 导航菜单显未不出来, 因此通过修改一个一个的模板,将它改为静态的HTML. 今天突然想最近可能增加一个关于MyLOG的菜单项, 那不是又得将模板文件一个一个地修改? 很不太方便, 不如做一个插件了, 直接返回菜单的HTML代码就可以了, 这样以后只需要修改一次了.

    代码如下所示, 然后我修改模板, 将显示菜单的代码换为<$MTZHMenu$>, 再选择时机重建相关页面,

use MT::Template::Context;

MT::Template::Context->add_tag(ZHMenu => \&get_zhmenu_html );

sub get_zhmenu_html
{
  my $zh_menu_html = '<ul id="nav">'.
     ' <li><a href="/index.html">Home</a></li>'.
     ' <li><a href="/en">English</a></li>'.
     ' <li><a href="/blog.html">Weblog</a></li>'.
     ' <li><a href="/aul.html">AUL/MyDUL</a></li>'.
     ' <li><a href="/otop.html">Tools</a></li>'.
     ' <li><a href="/archives.html">Archive</a></li>'.
     ' <li><a href="/rss">RSS</a></li>'.
     ' <li><a href="/aboutme.html">About</a></li>'.
     '</ul>';

  scalar $zh_menu_html;
}

    对于这种没有任何文件访问操作的简单插件, 性能不是问题, 将会将更多的内容通过这种方式统一起来, 如广告代码, 如要取消广告, 只需要让插件函数返回空串就行.