0

HTML テンプレートのトークンの配列を使用しています。そのうちの 2 つ ('{SYS_MENU}' と '{SUB_MENU}') は、Web アプリケーションのコントロール ボタンを生成するために使用されます。現在、ユーザーの資格情報が検証される前にボタンがログインページに表示されます。ユーザーがログインしてメインメニューに到達するまでボタンが非表示になるようにコードを変更する必要があります。誰かがブラウザに http: アドレスを入力してログイン ページに到達すると、システムは MySQL セッション テーブルで USER_ID = 0 のセッションを開始します。 ログイン後、USER_ID は、最初の登録時に割り当てられた番号に変更されます (例: USER_ID = 54)、およびセッションの最後にログアウトした後、0 に戻ります。

元の配列は次のとおりです。

$template_vars = array(

    '{LANG_DIR}' => $lang_text_dir,
    '{TITLE}' => theme_page_title($section),
    '{CHARSET}' => $charset,
    '{META}' => $meta,
    '{GAL_NAME}' => $CONFIG['gallery_name'],
    '{GAL_DESCRIPTION}' => $CONFIG['gallery_description'],
    '{SYS_MENU}' => theme_main_menu('sys_menu'),
    '{SUB_MENU}' => theme_main_menu('sub_menu'),
    '{ADMIN_MENU}' => theme_admin_mode_menu(),
    '{CUSTOM_HEADER}' => $custom_header,
    '{JAVASCRIPT}' => theme_javascript_head(),
    '{MESSAGE_BLOCK}' => theme_display_message_block(),
);

私が最初にしたことは、HTML テンプレートで参照を直接操作することでした。PHP スクリプトを HTML に入力するだけで解決できるように見える w3schools の例を見ました。それは、大量のテキストをランダムにページにエコーする以外には何もしませんでした. その後、HTML で直接動作する前に、.HTACCESS エントリを使用して PHP をアクティブにする必要があるという別の引用を見つけました。しかし、それで取引が成立することもありませんでした。

配列内の '{SYS_MENU}' と '{SUB_MENU}' の値を => "" に変更すると、必要な結果が得られることがわかっています (つまり、メニュー ボタンが非表示になります)。そこで、次のように、状況に応じて 2 つのバージョンの配列を返す IF ステートメントを作成することを考えました。

if(USER_ID != 0)

{

return  $template_vars = //FIRST VERSION OF ARRAY WITH FULL VALUES//

}

else 

{

return $template_vars = //SECOND VERSION OF ARRAY WITH ONLY => ""//

}

しかし、アプリケーションのロードがエラー フィードバックなしで白い画面で終了するだけでした。

私の最近の試みは、Stack Overflow でここで読んだものから来ました。IF ステートメントを配列に入れることができないことは知っています。しかし、このリンクの記事には回避策が記載されています。

配列宣言内の if ステートメント ...それは可能ですか?

そこで、配列を次のように書き直しました。

template_vars = array(

    '{LANG_DIR}' => $lang_text_dir,
    '{TITLE}' => theme_page_title($section),
    '{CHARSET}' => $charset,
    '{META}' => $meta,
    '{GAL_NAME}' => $CONFIG['gallery_name'],
    '{GAL_DESCRIPTION}' => $CONFIG['gallery_description'],
    '{SYS_MENU}' => ('USER_ID != 0' ? theme_main_menu('sys_menu') : ""),
    '{SUB_MENU}' => ('USER_ID != 0' ? theme_main_menu('sub_menu') : ""),
    '{ADMIN_MENU}' => theme_admin_mode_menu(),
    '{CUSTOM_HEADER}' => $custom_header,
    '{JAVASCRIPT}' => theme_javascript_head(),
    '{MESSAGE_BLOCK}' => theme_display_message_block(),
);

しかし、それはまったく効果がないようです。アプリケーションはクラッシュしませんが、ログインしているかログアウトしているかにかかわらず、ボタンは静的です。

私の質問は次のとおりです。何が欠けていますか? これが可能であることがわかります。しかし、私は1日半物事を試してきましたが、解決策の周りで踊っているようです. あなたの考えは大歓迎です。

4

1 に答える 1

1

ここでの問題は、return を呼び出していることです。このようなグローバル インクルード ファイルでは、戻るコンテキストがないため、アプリケーションが終了します。あなたがしたいことは、変数を割り当てることです。

if(USER_ID != 0)
{
   $template_vars = //FIRST VERSION OF ARRAY WITH FULL VALUES//
}
else 
{
   $template_vars = //SECOND VERSION OF ARRAY WITH ONLY => ""//
}   
于 2013-07-23T21:07:20.040 に答える