基于用户ID相关常量返回不同的PHP数组值

时间:2013-07-23 20:46:40

标签: php html arrays constants token

我正在处理HTML模板的一系列令牌。其中两个('{SYS_MENU}'和'{SUB_MENU}')用于为Web应用程序生成控制按钮。现在,在验证用户凭证之前,按钮会显示在登录页面上,我需要更改代码,以便在用户登录并到达主菜单之前隐藏按钮。当有人在他们的浏览器中键入http:地址并到达登录页面时,系统会在USER会话表中为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模板中使用引用。我在w3schools上看到了一个例子,它让你看起来只需要将PHP脚本输入HTML并让它解决。除了将一堆文本随机地回到页面中之外,这没有做任何事情。然后我找到了另一个引用,表示你必须先使用.HTACCESS条目激活PHP,然后才能直接使用HTML。但这也没有达成协议。

我知道将数组中的'{SYS_MENU}'和'{SUB_MENU}'值更改为=> “”,产生我想要的结果(I.E.使菜单按钮消失)。所以我的下一个想法是我将创建一个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 statement within an array declaration ...is that possible?

所以我按如下方式重写了数组:

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 个答案:

答案 0 :(得分:1)

这里的问题是你要回来。使用像这样的全局包含文件,没有返回的上下文,因此应用程序终止。你想要做的只是分配变量。

if(USER_ID != 0)
{
   $template_vars = //FIRST VERSION OF ARRAY WITH FULL VALUES//
}
else 
{
   $template_vars = //SECOND VERSION OF ARRAY WITH ONLY => ""//
}