バージョン: 0.4.2
作成者: Yoshinori Tahara - dengen
公開日: 2009.1.9
ライセンス: GPL
概要:
- CustomMenu Editor プラグインは,メインメニュー(ヘッダーメニュー)の設定を管理画面で簡単に行えるようにするものです。
- 厳密に言うと、本プラグインはカスタムメニューエントリーを扱うものなのですが、メインメニューの全てのエントリーをカスタムメニューエントリーに統一することにより、快適なメニュー編集が可能になります。
機能:
- メインメニューの登録、修正、並べ替え、削除などの編集が管理画面で行えます。
- 多言語切り替え機能に対応しています。
- PHPモードにより、メニューに動的な変化を付けることができます。
- Geeklog標準のメニューエントリーがあらかじめ登録済みであり、また、各種プラグインにより登録されるメニューエントリーを自動的に収集します。
- 多階層メニューを設置できます。
条件:
- このプラグインは,Geeklog 1.4.1 および 1.5.0 用です。それ以外のバージョンでは動作確認を行っていません。
この説明のセクション:
インストールには,手動でプラグイン用のディレクトリを作成し,適切なディレクトリへファイルをコピーする必要があります。
以下の説明で,
- <geeklog_dir> は,システムの config.php が存在するディレクトリ
- <public_html> は,lib-common.php が存在するディレクトリ
- <admin> は,管理者用ファイルが存在するディレクトリ(普通は,<public_html>/admin/ )
を表しています。
Step 0 - データベースのバックアップ
- CustomMenu Editor プラグインはテーブルを追加するので,管理者メニューの「DBのバックアップ」や phpMyAdmin
を使用して,事前に Geeklog のデータベースをバックアップしておきます。
Step 1 - アーカイブの展開
- CustomMenu Editor プラグインのアーカイブを <geeklog_dir>/plugins ディレクトリに展開します。custommenu という名前のディレクトリができます。
Step 2 - 必要なディレクトリの作成
- <public_html> ディレクトリの下に custommenu という名前のディレクトリを作ります。
- <admin>/plugins/ ディレクトリの下にも custommenu という名前のディレクトリを作ります。
Step 3 - 必要なファイルのコピー
- <geeklog_dir>/plugins/custommenu/ ディレクトリに移動します。
- admin ディレクトリの内容を,Step 2 で作成した <admin>/plugins/custommenu/ ディレクトリにコピーします。
- public_html ディレクトリの内容を,Step 2 で作成した <public_html>/custommenu/ ディレクトリにコピーします。
Step 4 - Geeklog 本体の config.php の編集
- (参考) Geeklogのメニューエントリーには、'home', 'contribute', 'search', 'stats', 'directory', 'prefs', 'plugins', 'custom'の8種類があります。
- (参考) このうち、'custom' はカスタムメニューエントリーの集合であり、CUSTOM_menuEntries 関数が返すエントリー群を束ねたものです。
- このセクションでは、メニューエントリーを 'custom' だけ有効にし、その他の7種類のエントリーを無効にしてしまいます。
- あなたがコンフィギュレーションエディタプラグインを使用している場合は、これを使ってメニューエントリーを「カスタム」だけ残し、その他のチェックボックスをオフにしてください。
- あなたがコンフィギュレーションエディタプラグインを使用していない場合は、<geeklog_dir>/config.phpをテキストエディタで開き、変数 $_CONF['menu_elements'] を次のように変更して下さい。
$_CONF['menu_elements'] = array(
'custom'
);
Step 5 - lib-custom.php の編集
- (参考) Geeklog 日本語版では、<geeklog_dir>/system/lib-custom.php からカスタムメニューエントリーを司る custom_menuentries.php をインクルードしています。
- (参考) さらに custom_menuentries.php にはカスタムメニューエントリーを定義する CUSTOM_menuEntries 関数が含まれています。
- 本プラグインでは、独自にCUSTOM_menuEntries 関数を定義していますので、lib-custom.php のインクルード指令を無効にしてやります。
- <geeklog_dir>/system/lib-custom.php をテキストエディタで開き、次のようにコメントアウトしてください。(既にコメントアウトされている場合は変更不要です)
//require_once( 'custom/custom_menuentries.php' );
Step 6 - プラグインエディタでインストールの実行
- Root ユーザとしてログインし,プラグインエディタから custommenu のインストールを実行します。
- 失敗した場合には,エラーログ( error.log )を調べます。
- これで,CustomMenu Editor プラグインはインストールされました。
- 投稿管理メニューまたはサイドバーのメニューから、「カスタムメニュー」をクリックすると、カスタムメニューリストが表示されるでしょう。
Step 7 - テンプレートの配置(表示レイアウトの最適化)
- CustomMenu Editor プラグインのテンプレートは professional テーマをターゲットにして最適化しています。
- professional テーマや professional テーマから派生したテーマを使用している場合は次を読まなくても良いでしょう。
- ProfessionalCSS テーマや ProfessionalCSS テーマから派生したテーマを使用している場合は、ディレクトリ<geeklog-dir>/plugins/custommenu/layout/ProfessionalCSS/custommenuを、ディレクトリ<public_html>/layout/<テーマ名>/の下へコピーしてください。
Goto Top
Step 0 - データベースのバックアップ
- CustomMenu Editor プラグインはアンインストール時に,CustomMenu Editor プラグインが使用していたテーブルを破棄するので,管理者メニューの「DBのバックアップ」や
phpMyAdmin を使用して,事前に Geeklog のデータベースをバックアップしておくことをお勧めします。
Step 1 - プラグインエディタでアンインストールの実行
- プラグインエディタから,custommenu をアンインストールします。このとき,CustomMenu Editor
プラグインが使用していたテーブルは破棄され,その中に記録されていたデータも削除されます。
Step 2 - Geeklog 本体の config.php を元にもどす
- <geeklog_dir>/config.phpをテキストエディタで開き、変数 $_CONF['menu_elements'] を元にもどしてください。ちなみにGeeklog日本語版の初期値は次のようになっています。
$_CONF['menu_elements'] = array(
'home', // ホーム へのリンク
'contribute', // 記事の新規作成へのリンク
'calendar', // カレンダ表示へのリンク
'search', // 検索オプションへのリンク
'stats', // ステータス情報
'directory', // 記事の一覧
'prefs', // アカウント情報
'plugins' // プラグイン {plg_menu_elements} 変数と同じ.
// 'custom' // CUSTOM_menuEntries 関数の返す文字列を表示.
//(詳細はlib-custom.php参照)
);
Step 3 - lib-custom.php を元にもどす
- 1)の Step 5 で行った修正を元に戻します。
Step 4 - ディレクトリの削除
- インストールの過程で作成した3つのディレクトリ( <geeklog-dir>/plugins/custommenu/ ,<public_html>/custommenu/
,<admin>/plugins/custommenu/ )を削除します。
Goto Top
本プラグインではメニューアイテムを3種類のモードで使い分けることが可能です。各モードの説明を次に示します。
| モード |
説明 |
難易度 |
柔軟性 |
| 固定 |
タイトル文字列を固定するモードです。 併せて「タイトル(固定)」を入力します。 |
簡単 |
低 |
| 可変 |
Geeklogの多言語切り替え機能に応じてタイトルを可変にするモードです。 併せて「タイトル(可変)」を入力します。
「タイトル(可変)」には言語ファイル内で定義されている配列変数を指定します。
例えば、$MY_WORD['label'] をタイトルにする場合は MY_WORD['label'] を記入します。 |
やや難しい |
中 |
| PHP |
多言語切り替え機能に応じてタイトルを可変にするモードです。 併せて「PHP関数名」を入力します。
「PHP関数名」にはメニューアイテムの情報を返り値として返す関数の関数名を指定します。
この関数は関数名に接頭辞「phpmenuitem_」を付けて定義して下さい。
関数の定義は system/lib-custom.php で行うのが適当でしょう。
サンプルとして、plugins/custommenu/functions.php に 次の関数を定義しています。
| サンプル関数名 |
メニュータイトル |
説明 |
| phpmenuitem_contribute |
記事投稿 |
話題に応じてURLを変化させる例です。 |
| phpmenuitem_login |
ログイン(ログアウト) |
ユーザがログインしているかどうかに応じて、タイトルとURLを変化させる例です。 |
|
難しい |
高 |
Goto Top
バージョン0.2.3より多言語切り替え機能への対応を強化しました。
バージョン0.2.2以前のバージョンでは、多言語切り替えのために「可変モード」を用意していましたが、メニューアイテムの表示を切り替えることはできるものの、リンク先まで切り替えることはできませんでした。(そこまでやるにはPHPモードを活用する必要がありました。)
バージョン0.2.3からはGeeklog1.5.1から追加された「ブロックの多言語切り替え機能」と同様の機能をサポートします。
「ブロックの多言語切り替え機能」の詳細については以下のWikiを参照してください。
一例として、英語と日本語を切り替える場合の使用方法を示します。
- カスタムメニュー管理画面で言語数+1つ(つまり合計3つ)で1セットのメニューアイテムを作成します。
- そして「メニューアイテムID」を、例えば次のように設定します。
about
about_en
about_ja
- ここで添字"_en"を付加したものは英語モードで、添字"_ja"を付加したものは日本語モードで用いるアイテムにします。
- そして、それぞれの「有効」オプションを次のように設定します。
about 有効
about_en 無効
about_ja 無効
- 「タイトル(固定)」や「URL」はそれぞれの言語に応じて、表示させたいリンク先のURLを指定します。(「モード」が「固定」の場合)
- これで完了です。言語モードを切り替えてみてください。
- メニューアイテム"about"の情報が、システムの言語モードに応じて、メニューアイテム"about_en"やメニューアイテム"about_ja"の情報でオーバーライドされる仕組みです。システムの多言語モードがオフの時には、メニューアイテム"about"の情報がそのまま使われます。
Goto Top
バージョン0.3.0よりURLの照合機能を追加しました。
URLの照合機能とは、Geeklogサイトの表示中のページのURLをメニューアイテムごとに照合し、マッチしたメニューアイテムのスタイルを変化させるものです。
例えば、リンクのページを開いているときに、リンクのメニューアイテムを反転させて表示させることが可能となります。
ただし、別途、システムの一部(lib-common.php)とテーマの一部を変更する必要があります。
一例として、リンクのメニューアイテムを反転させる方法を示します。ここでは、professionalテーマを用います。
- カスタムメニューの管理画面で「リンク」を編集します。
- 項目「URL照合文字列」へ"/links/"を入力し、更新ボタンをクリックします。カスタムメニューエディタでの作業はこれだけです。
これは、「表示ページのURLに"/links/"が含まれていたときに、メニューアイテム「リンク」のスタイルを変化させる。」という意味の設定です。
- なお、「正規表現」を有効にすると、PHPがサポートしている正規表現で照合することができます。照合の条件が複雑な場合に使用することを想定した機能であり、使用する場面は少ないでしょう。照合にはpreg_match関数を使用しています。
正規表現の詳細については http://jp.php.net/manual/ja/regexp.reference.php を参照してください。
- lib-common.phpの変更は実質2行追加するだけの簡単なものであり、副作用もありません。同梱の/bonus/lib-common.phpの623行目および681行目を参考にしてください。Geeklog1.5.1用ですので該当バージョンをお使いの方はそのまま使用されてもよいでしょう。
- テーマの変更は、menuitem.thtml、menuitem_last.thtml、style.css の3つのファイルを対象とします。
/bonus/layout/professonal 内のファイルを参照してください。
<li>タグに class="{menuitem_selected}" が追加されていることに注目してください。
- style.cssは1031行目から1033行目の3行を加えるだけです。(サンプルなので単純に背景色を変えただけ)
- これで完了です。メニューアイテム「リンク」をクリックして効果を確認してみてください。
テーマをさらに変更してハイセンスなメインメニューを構築してください。
Goto Top
バージョン0.4.0より多階層メニューや画像を使ったメニューに対応した独自メニューレンダラを搭載しました。
比較的大規模なサイトに多くみられるプルダウンメニューなどを実装可能なHTMLを出力できるようになりました。
Geeklog標準のメニューレンダラが出力するヘッダーメニュー部のHTMLは次のようなものです。
<div class="header-navigation-container">
<ul>
<li class="menuitem"><a href="index1.php">text1</a></li>
<li class="menuitem"><a href="index2.php">text2</a></li>
<li class="menuitem"><a href="index3.php">text3</a></li>
:
:
:
<li class="menuitem last"><a href="indexx.php">textx</a></li>
</ul>
</div>
これに対して、今回搭載した独自メニューレンダラでは、次のような入れ子構造のHTMLを出力することができます。
<div class="header-navigation-container">
<ul>
<li id="menu_id1" class="menuitem"><a href="index1.php">text1</a></li>
<li id="menu_id2" class="menuitem"><a href="index2.php">text2</a>
<ul>
<li id="submenu_id1" class="menuitem"><a href="index_s1.php">text1</a></li>
<li id="submenu_id2" class="menuitem"><a href="index_s2.php">text2</a></li>
<li id="submenu_id3" class="menuitem"><a href="index_s3.php">text3</a></li>
:
:
:
<li id="submenu_idx" class="menuitem"><a href="index_sx.php">textx</a></li>
</ul>
</li>
<li id="menu_id3" class="menuitem"><a href="index3.php">text3</a></li>
:
:
:
<li id="menu_idx" class="menuitem last"><a href="indexx.php">textx</a></li>
</ul>
</div>
また、メニューアイテムごとに次のテンプレート変数をサポートします。
| テンプレート変数名 |
説明 |
| menuitem_url |
メニューアイテムのリンク先URL |
| menuitem_text |
メニューアイテムのタイトル |
| menuitem_id |
メニューアイテムのID |
| menuitem_class |
メニューアイテムのクラス名 (例:'last') |
| class_property |
メニューアイテムのクラスプロパティ (例:'class="last"') |
| menuitem_icon_url |
メニューアイテムのアイコンとして用いる画像のURL |
多階層メニューを試すには、次の操作を行って下さい。
- /bonus/lib-common.phpの657行~666行のように、lib-common.phpを修正する必要があります。
- コンフィギュレーション -> カスタムメニュー -> メニューレンダラ を「階層メニュー対応」に設定します。
- /bonus/layout/テーマ名 のファイル群を、テーマディレクトリにコピーします。(professional と ProfessionalCSS のみ対応)
この操作で、各テーマの menuitem.thtml, menuitem_last.thtml, style.css, custom.css を上書きしますので、事前のバックアップをお忘れなく。
- 「メニューアイテムの編集」で「親アイテムID」を使って階層を設定します。
- 階層メニューの起点になるメニューアイテムのクラス名に 'drop' や 'fly' を設定してみて下さい。(アローアイコンが出現します)
- 子階層メニューの最初のアイテム、孫階層メニューの最初のアイテム、親階層メニューの最後のアイテムのクラス名に 'enclose' を設定して下さい。
画像を使ったメニューを試すには、テンプレート変数 menuitem_icon_url を使って、/layout/テーマ名/custommenu 内の menuitem.thtml, menuitem_drop.thtml を修正します。加えて、CSSを使ってレイアウトを調整してください。
Goto Top
本作品で、削除および矢印アイコンとして使用している delete.png, arrow-dn.png, arrow-up.pngは Joseph North さんの著作物です。
ライセンスは次のリンクをご覧ください。
Sweetie Icon Set
----------------
Author: Joseph North
Email: sublick@gmail.com
License: Creative Commons Attribution-ShareAlike 2.0
Year: 2005
Goto Top
| バージョン |
公開日 |
説明 |
| 0.4.2 |
2009.1.9 |
修正 掲示板プラグイン(forum)と併用した場合に、掲示板の「最新の投稿」が表示されなくなる問題に対応しました。
|
| 0.4.1 |
2009.1.4 |
追加 PHPモードで、ID、クラス名、子メニューエントリの配列を設定できるようにしました。
修正 メニューアイテムの編集におけるバリデーションを強化しました。
修正 0.4.0以降へのバージョンアップが正常に行えない問題に対応しました。
修正 メニューアイテムIDの変更に伴い親アイテムIDが更新されない問題に対応しました。
修正 テンプレートとCSSを一部修正しました。
修正 説明書(readme_jp.thml, readme_jp_1.5.html)を充実させました。
|
| 0.4.0 |
2008.12.24 |
追加 多階層メニューや画像を使ったメニューに対応する独自のメニューレンダラを搭載しました。
修正 同梱の/layoutディレクトリの内容が古くなっていた問題を解消しました。
|
| 0.3.0 |
2008.12.13 |
追加 URLの照合機能を追加しました。
|
| 0.2.3 |
2008.12.9 |
追加 インストール・アンインストール時に必要なコンフィギュレーションの設定を、自動的に行うようにしました。(Geeklog1.5以降で使用する場合のみ有効)
追加 多言語切り替え機能への対応を強化しました。
|
| 0.2.2 |
2008.9.26 |
修正 インクルード対策を実施しました。
|
| 0.2.1 |
2008.9.15 |
修正 CSRF対策のミスを修正しました。
|
| 0.2.0 |
2008.9.3 |
追加 Geeklog1.5で動作するようにしました。
追加 メニューアイテムの編集項目:URLで、サイトURLに置換されるタグ'[site_url]'が使えるようになりました。
修正 アンインストールしたプラグインのメニューアイテムが削除できない問題を修正しました。
修正 標準テンプレートをProfessionalCSS用のものからprofessional用のものへ変更しました。
|
| 0.1.0 |
2008.5.12 |
初期バージョン |
Goto Top