簡體   English   中英

在頁面php中加載文章

[英]load article inside a page php

如何做到這一點:

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');
    }

由於我還需要在不重新加載頁面的情況下更新網址,因此我使用以下腳本:

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

在此頁面中,我想將my-article.php加載到content-manager.php的主要div中

我認為添加?article =變量可以使用與上述相同的系統來工作:

$article = $_GET['article'];
if(!empty($article)){
  $article .= '.php';
  include($article);
}
else {
  ...
}

但這不是...我怎么能做到這一點?

為什么不只是將文章添加為查詢參數?

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攻擊

編輯:與回聲,最好是抱歉

我本身尚未回答您的問題,但這是您正在尋找的代碼類型:

<?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是一個超級全局變量-意味着可以從任何地方訪問它。

它是通過URL參數傳遞到當前腳本的變量的關聯數組。
這些是在URL中的問號( ? )之后指定的。 要指定多個參數,必須在每個參數之間使用&字符。
必須在URL的末尾指定$_GET

http://www.example.com/thisPage.php?page=a
http://www.example.com/thisPage.php?page=a&theme=light

第一個URL將產生一個帶有一個元素的$_GET ,該元素可以通過以下方式訪問: $_GET["page"]並返回一個字符a的字符串。
第二個將產生:

$_GET["page"]; // returns "a"
$_GET["theme"]; // returns "light"

請注意,為每個參數創建了一個新的鍵值對。

我在SO Documentation上對超全局變量進行了全面的解釋,但此后不推薦使用。 撕碎我的辛苦:P

顯示不同的內容

從上面我的回答中可以看到。 您可以使用簡單的if語句檢查值是什么。

首先,確保$_GET isset然后檢查值。
我將數組的值轉換為小寫,因為"A""a"

您鏈接的示例確實使事情變得過於復雜 老實說,並不需要所有的正則表達式,它也依賴於JavaScript,這不一定是一個好主意。
在頂部的示例中,用戶體驗之間沒有區別,因為PHP是服務器端的,因此所有內容都經過處理然后提供給用戶。

更進一步

使用此功能,您可以執行額外的步驟,並擁有一個事件偵聽器,並將其與AJAX結合在一起。

更改我的初始示例,您可以執行以下操作。
我使用了jQuery庫,因為它易於實現。

<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,則該頁面將正常運行,並且將正常重新加載該網站。
無需您做任何額外的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM