在页面php中加载文章

时间:2017-10-10 14:35:05

标签: javascript php jquery html

如何实现这一目标:

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 {
  ...
}

但它不...... 我怎么能实现这个目标呢?

2 个答案:

答案 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如何运作?

$_GETsuper 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,那么该页面将正常运行,并且网站将正常重新加载。
您无需做任何额外的工作。