株式会社RYUS 様のサイトには、素晴らしいネタが沢山あります。
そのなかで、今回 テーマにメインメニューを表示するための ryus_mainmenu プラグイン の記事を参考に、当サイトのテーマにも smarty を使って、通常のメインメニューを用いずに任意の場所に表示させてみました。
フッターの少し上にメインメニューとサブメニューを表示させて、上のタブメニューの下に 「パンくず」を表示、その下に必要に応じてサブメニューを表示するように設定してみました。
最近、やっとテーマの中での分岐を覚えてきましたので、少し楽しくなってきました。
ところで、当サイトのテーマ 「mistgreen00」については、上部のタブメニューは画像とCSSを使ったもので、テーマに生書きしているものです。悪しからず。
構築メモ
1 ryusSmartyPluginsEx.class.php を、XOOPS_ROOT_PATH/preload/ ディレクトリにおく。
2 そうすると、XOOPS_TRUST_PATH/libs/smartyplugins/ ディレクトリに置いたSmarty プラグインも認識される
3 あとの、Smarty プラグインは、smartyplugins ディレクトリに放り込む。
(function.ryus_mainmenu.php 、 function.xoops_block.php)
以下、自分用の参考として上記リンク先サイトの記事をコピペさせていただきます。
このサイトでは、legacy 付属のメインメニューブロックを使わずに、テーマのヘッダ部分にメインメニューを表示しています。
theme.html に直接リンクを書いても良いのですが、モジュールを追加したり、並び順を変えたいと思うたびに theme.html を編集し直すのも面倒です。
そこで、メインメニューの項目をテンプレート変数にアサインするプラグインを作成しました。
ファイルを解凍したら、Smarty プラグインディレクトリに配置してください。
ryusSmartyPluginEx (preloadに入れる)を利用して、XOOPS_TRUST_PATH 側に配置するのがおすすめです。使い方ですが、まず theme.html のあたまで、メインメニュー項目をアサインします。
<{ryus_mainmenu}>
デフォルトでは、$ryus_mainmenu にアサインされますが、assign パラメータを追加すれば、別の変数に割り当てることも可能です。
たとえば、$foo に割り当てたければ、下記のように記述します。<{ryus_mainmenu assign=foo}>
つづいて、メインメニューを表示したい箇所で次のように記述します。
<{foreach from=$ryus_mainmenu.modules item=module}>
<a href="<{$xoops_url}>/modules/<{$module.directory}>/"><{$module.name}></a><{/foreach}>
$ryus_mainmenu.modules にメインメニューの各項目が配列で入ってますので、foreach で回して、$module.directory でモジュールのディレクトリ名、$module.name でモジュール名を取り出せます。
現在表示中のモジュールのサブメニューは、下記のように記述すると表示できます。
<{foreach item=sublink from=$ryus_mainmenu.sublinks}>
<a href="<{$sublink.url}>"><{$sublink.name}></a><{/foreach}>
サブメニューは $ryus_mainmenu.sublinks に配列ではいっていますので、sublinks を foreach で回して、$sublink.url でサブメニューの URL、$sublink.name でサブメニュー名を表示できます。