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



我正在为HTML模板处理一组标记。其中两个("{SYS_MENU}"one_answers"{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模板中使用引用。我在w3schools上看到了一个例子,它让人觉得你只需在HTML中键入一个PHP脚本就可以解决它。除了将一堆文本随机回显到页面中之外,它什么也没做。然后我发现了另一个引文,它说你必须用.HTACESS条目激活PHP,然后它才能直接在HTML中工作。但这也没有达成协议。

我知道将数组中的"{SYS_MENU}"one_answers"{SUB_MENU}"值更改为=>"会产生我想要的结果(即,使菜单按钮消失)。所以我的下一个想法是创建一个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(),
);

但这似乎一点效果都没有。应用程序不会崩溃,但无论您是登录还是注销,按钮都是静态的。

我的问题是:我缺少什么?我看得出来这是可能的。但我已经尝试了一天半,似乎只是在围绕解决方案跳舞。非常感谢您的想法。

这里的问题是您正在调用return。对于这样的全局包含文件,没有上下文可返回,因此应用程序终止。你想要做的只是分配变量。

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

最新更新