如何实现这一目标:
http://jennamolby.com/how-to-display-dynamic-content-on-a-page-using-url-parameters/
使用php?
让我说我有以下网址:
http://localhost:8888/index.php?page=pages-folder/works-folder/content-manager?article=my-article
到达那里我在pages-folder / works.php中有一个链接:
<a href="pages-folder/works-folder/content-manager?article=my-article"> link </a>
应该打开content-manager.php,其中div里面应该加载my-article.php
编辑:
我有一个索引文件,在其中加载到div.container我需要的所有页面,所以在这种情况下我的works.php文件使用以下方法加载到div.container:
<?php
$page = $_GET['page'];
if(!empty($page)){
$page .= '.php';
include($page);
}
else {
include('pages/home.php');
}
因为我还需要更新url而不重新加载页面我使用这个脚本:
function ChangeUrl(page, url) {
if (typeof (history.pushState) != "undefined") {
var obj = { Page: page, Url: url };
history.pushState(obj, obj.Page, obj.Url);
}
}
$('ul.menu li a').on('click', function(){
var page = $(this).attr('href');
var pageUrl = page.split("/");
pageUrl = pageUrl[1];
$('.container').load(page + '.php', function(){
//fadeout old content
//fadein new content
});
ChangeUrl('Page1', '?page=' + page);
return false;
})
一旦我将works.php加载到div.container中,我就有了上面提到的链接,它应该引导我:pages-folder / works-folder / content-manager.php
在这个页面中,我想在content-manager.php的主要div中加载my-article.php
我认为添加?article =变量可以使用与上面相同的系统:
$article = $_GET['article'];
if(!empty($article)){
$article .= '.php';
include($article);
}
else {
...
}
但它不...... 我怎么能实现这个目标呢?
答案 0 :(得分:0)
为什么不将文章添加为查询参数?
http://localhost:8888/index.php?page=pages-folder/works-folder/content-manager&article=my-article
并建立一个像这样的链接
<a href="pages-folder/works-folder/content-manager&article=<?php echo $_GET['article'] ?>"> link </a>
这只是一个了解你想做什么的例子,不要在生产中使用这种代码,他对CSRF攻击很脆弱
编辑:回复它更好抱歉
答案 1 :(得分:0)
我本身没有回答你的问题,但这是你正在寻找的那种代码:
<?php if (isset($_GET["page"]) && strtolower($_GET["page"]) == "1") { ?>
<p>You are on page one</p>
<a href="thisPage.php">Back</a>
<?php } elseif (isset($_GET["page"]) && strtolower($_GET["page"]) == "2") { ?>
<p>You are on page two</p>
<a href="thisPage.php">Back</a>
<?php } else { ?>
<p>You have not selected a page. Click one of the links:</p>
<a href="thisPage.php?page=1">Page one</a>
<a href="thisPage.php?page=2">Page two</a>
<?php } ?>
$_GET
如何运作? $_GET
是super global变量 - 意味着可以从任何地方访问它。
它是通过URL参数传递给当前脚本的关联变量数组
这些是在URL中的问号(?
)后指定的。要指定多个参数,必须在每个参数之间使用&符号(&
)
必须在其他所有内容后的URL末尾指定$_GET
。
http://www.example.com/thisPage.php?page=a
http://www.example.com/thisPage.php?page=a&theme=light
第一个网址将生成一个$_GET
,其中包含一个元素,可以访问:$_GET["page"]
并返回一个字符a
的字符串。
第二个将产生:
$_GET["page"]; // returns "a"
$_GET["theme"]; // returns "light"
请注意,对于每个参数,都会创建一个新的键值对。
我在SO文档上写了一篇关于超全局的综合解释,但后来被弃用了。请努力学习:P
从上面的答案可以看出。您可以使用简单的if语句来检查值是什么。
首先,确保$_GET
isset
,然后检查值
我已将数组的值转换为小写,因为"A"
与"a"
不同。
您链接到的示例确实使事情过于复杂。老实说,没有必要使用正则表达式,它也依赖于JavaScript,这不一定是个好主意 以我的示例位于顶部,用户体验没有区别,因为PHP是服务器端,因此所有内容都被制定出来然后提供给用户。
使用此功能,您可以执行额外步骤并拥有事件侦听器并将其与AJAX结合使用。
更改我的初始示例,您可以拥有以下内容 我使用jQuery library因为它更容易实现。
<div id="test">
<?php if (isset($_GET["page"]) && strtolower($_GET["page"]) == "1") { ?>
<p>You are on page one</p>
<a href="t.php">Back</a>
<?php } elseif (isset($_GET["page"]) && strtolower($_GET["page"]) == "2") { ?>
<p>You are on page two</p>
<a href="t.php">Back</a>
<?php } else { ?>
<p>You have not selected a page. Click one of the links:</p>
<a href="t.php?page=1">Page one</a>
<a href="t.php?page=2">Page two</a>
<?php } ?>
</div>
function myAJAX() {
$("a").on("click", function(e) {
e.preventDefault();
// get the clicked page number
if (this.href.indexOf("&") > -1) {
var d = this.href.substring(this.href.indexOf("page=") + "page=".length, this.href.indexOf("&"))
} else {
var d = this.href.substr(this.href.indexOf("page=") + "page=".length)
}
$.ajax({
method: "GET",
url: "t.php",
data: "page=" + d,
success: function(data, textStatus, jqXHR) {
// change the content of the #test div
$("#test").html($($.parseHTML(data)).filter("#test")[0]);
myAJAX();
}
});
});
}
myAJAX();
请注意,HTML没有包含在<div id="test">
中,这样JavaScript就可以找到该元素并在函数中更改它。
$("#test").html($($.parseHTML(data)).filter("#test")[0]);
是获取HTML并使用您尝试点击的页面中的数据进行更改的行。
我也在内部调用函数,以便重新附加锚链接。如果您删除此行,则页面将正常重定向。
这个实现的好处是,如果您的用户没有JavaScript,那么该页面将正常运行,并且网站将正常重新加载。
您无需做任何额外的工作。