Geeklog実験室 Geeklogのテストや改良のためのサイトです    

2010-09-08 00:01
 記事を友人にメールする 印刷用画面 

ナビゲーションメニューでログインしていない場合は非表示にする(カスタムメニュー編)

Geeklogは仕様でログインしているときのメニューとしていないときのメニューを選択して表示できません。そのためそういう動作をさせようとすると本体の改造が必要になります。以下にその手順を説明します。

標準の状態だと「ログイン/ログアウト」と記事リスト、サイトマップに相当します。これらをログインしている状態のときのみ表示したい場合の改造です。

lib-common.phpを編集します。function COM_renderMenu( &$header, $plugin_menu )内部にある601行目あたりにある
    if( in_array( 'custom', $_CONF['menu_elements'] ))
    {
        $custom_entries = array();
        if(!$anon){
        if( function_exists( 'CUSTOM_menuEntries' ))
        {
            $custom_entries = CUSTOM_menuEntries();        }
        if( sizeof( $custom_entries ) == 0 )
        {
            $key = array_search( 'custom', $_CONF['menu_elements'] );
            unset( $_CONF['menu_elements'][$key] );
        }
        }
    }

赤字部分が追加項目です。これでログインしていない場合は表示されなくなります。この方法だと個別にON/OFFできないので注意してください。

 記事を友人にメールする 印刷用画面 

ナビゲーションメニューでログインしていない場合は非表示にする(プラグイン編)

Geeklogは仕様でログインしているときのメニューとしていないときのメニューを選択して表示できません。そのためそういう動作をさせようとすると本体の改造が必要になります。以下にその手順を説明します。

こちらはログインが必要かどうかに関わらずプラグインのメニューをログインしていない場合に非表示にしてしまう方法です。

標準で提供されるメニューと同じくfunction COM_renderMenu( &$header, $plugin_menu )、lib-common.phpの692行目あたりにあるcase 'plugins':内部を編集します
                    if( !$anon ){
                    if( $last_entry && ( $i == $num_plugins ))
                    {
                        $header->parse( 'menu_elements', 'menuitem_last',
                                        true );
                    }
                    else
                    {
                        $header->parse( 'menu_elements', 'menuitem', true );
                    }
                    $menuCounter++;
                    }
赤字が付け足した箇所。これでログインしていないとプラグインのメニューは「ナビゲーションメニュー」には現れなくなります。ただ、この場合ナビゲーションメニューには表示されなくなりますがブロックメニューまで抑制することはできません。
 記事を友人にメールする 印刷用画面 

ナビゲーションメニューでログインが必要な項目を非表示にする

ログインが必要な作業についてのナビゲーションメニューは通常表示されたままでクリックするとログインが必要とのメッセージを促すようになっていますが、これをそもそも非表示にするという設定がありません。
これを非表示にするにはちょっとした改造が必要です。

lib-common.phpの中のfunction COM_renderMenu( &$header, $plugin_menu )という関数を見てみましょう。この最後のあたりで

        if( !empty( $url ) && !empty( $label ))
        {

            if( $last_entry )
            {
                $header->parse( 'menu_elements', 'menuitem_last', true );
            }
            else
            {
                $header->parse( 'menu_elements', 'menuitem', true );
            }
            $menuCounter++;

            if( $allowed )
            {
                if( $last_entry )
                {
                    $header->parse( 'allowed_menu_elements', 'menuitem_last',
                                    true );
                }
                else
                {
                    $header->parse( 'allowed_menu_elements', 'menuitem', true );
                }
                $allowedCounter++;
            }
        }

このような判定を行っています。赤字の$allowedが未ログインでも使えるかどうかという値を判定してセットしているのですが、この赤字の2行を緑字の後に移動させるとメニュー生成そのものが成されなくなり表示しないようにすることが可能です。
ただ、これはGeeklog標準で供給されるメニューにおいてのみ有効でプラグインやCUSTOM_menuEntriesには適用されません。そちらについては別の記事として紹介したいと思います。