问题:我想在CMS上为每种内容类型($categoryId
)加载自定义头文件。例如,如果网址是" /?action = archive& categoryId = 1",我希望它包含我的" header_medicine.html"文件。
我绝对是一个PHP菜鸟,但我已经尝试尊重这个论坛,并使用 this post about conditional code based on url上的提示解决了我的问题,但是存档页面仍然从我的'否则'条件。
以下是代码:
<?php $archive_url = parse_url($_SERVER['REQUEST_URI']);
if ($archive_url['path'] == "/?action=archive&categoryId=1")
include "header_medicine.html";
elseif ($archive_url['path'] == "/?action=archive&categoryId=2")
include "header_science.html";
elseif ($archive_url['path'] == "/?action=archive&categoryId=3")
include "header_other.html";
else
include "header.html";
?>
感谢您考虑我的问题!
更新:解决方案
对于任何感兴趣的人,这里是我上面发布的代码问题的工作解决方案(使用简化的文件系统语法)。我没有使用@Michael在下面的代码中推荐的isset函数。感谢所有提出建议的人,我现在距离掌握一些关于php的线索还有一步之遥。
<?php switch ($_GET['categoryId']) {
case 1:
include "header_medicine.html";
break;
case 2:
include "header_science.html";
break;
case 3:
include "header_other.html";
break;
default:
include "header.html";
}
?>
答案 0 :(得分:1)
你需要花很长时间来解决PHP中实际上非常简单的问题。您只需通过the $_GET[]
superglobal array查看$_GET['categoryId']
的内容。 parse_url()
及其表兄parse_str()
将解析正确的解析网址,在您的情况下,您希望查看的部分是$archive_url['query']
,但这一切都是不必要的 - 信息你需要的是$_GET
。
if (isset($_GET['categoryId']) {
// If this also depends on action=archive, use
// if (isset($_GET['categoryId']) && isset($_GET['action']) && $_GET['action'] == 'archive')
switch($_GET['categoryId']) {
case 1:
include('/header_medicine.html');
break;
case 2:
include('/header_science.html');
break;
case 3:
include('/header_other.html');
break;
default:
include('templates/include/header.html');
}
}
现在,我发现你真的想要包含像/header_science.html
这样的文件是多么可疑。 include()
调用文件系统路径,因此除非您的文档根目录也是服务器文件根路径/
,否则这些路径可能不是正确的包含路径。
您可能正在寻找类似
的内容include($_SERVER['DOCUMENT_ROOT'] . '/header_science.html');
答案 1 :(得分:1)
您可以通过$_GET
,$_POST
和others访问PHP中的参数。因此,$_GET['action']
会提供操作类型存档,$_GET['categoryId']
会提供1。
所以你可以这样做:
<?php
switch ($_GET['categoryId']) {
case "1":
include "/header_science.html";
break;
case "2":
include "/header_other.html";
break;
default:
include "templates/include/header.html";
}
?>
http://php.net/manual/en/control-structures.switch.php
您的示例代码无效,因为$archive_url['path']
只会为您提供路径/
。从php手册看一下这个例子:
http://php.net/manual/en/function.parse-url.php
<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>
以上示例将输出:
Array
(
[scheme] => http
[host] => hostname
[user] => username
[pass] => password
[path] => /path
[query] => arg=value
[fragment] => anchor
)
答案 2 :(得分:0)
您可以从数据库中动态获取包含路径吗? 通过post / get传递文件位置不安全。
答案 3 :(得分:-1)
使用$ _GET数组(OR $ _REQUEST),它包含在url中传递的所有参数:
例如:
page.php?aaa=1&bbb=hello
你有:
$_GET['aaa']
和
$_GET['bbb']
包含其相对值