0

我正在为 HTML 模板处理一组标记。其中两个('{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 模板中处理引用。我在 w3schools 上看到了一个示例,它看起来就像您可以将 PHP 脚本输入 HTML 并让它解析一样。除了将一堆文本随机回显到页面中之外,这并没有做任何事情。然后我发现另一个引文说你必须先使用 .HTACCESS 条目激活 PHP,然后它才能直接在 HTML 中工作。但这也没有完成交易。

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

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

我的问题是:我错过了什么?我可以看到这是可能的。但是我已经尝试了一天半的时间,似乎只是在围绕解决方案跳舞。您的想法将不胜感激。

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 回答