php:动态链接将内容附加到现有页面而不是打开新页面

时间:2012-06-29 16:23:24

标签: php html

我有一个动态链接,可根据发票ID提取发票明细。

<a href='<?php echo $_SERVER['PHP_SELF']; ?>/retrieve?class=InvoiceLineItems&amp;id=<?php echo $invoice['invoice_id']; ?>'><?php echo $invoice['invoice_number']; ?></a>&nbsp;<?php echo $invoice['customer_name'] ?>&nbsp;<?php echo $invoice['invoice_date'] ?>

它调用此函数

public function retrieve($class,
        $id = NULL)
{
    switch ($class) {
        case 'Invoice':
            $invoices = $this->invoice->getInvoices();
            include 'view/invoiceList.php';
            break;
        case 'InvoiceLineItems':
            $partnerInfo = $this->partnerInfo->getPartnerInfo($id);
            $invoiceLineItems = $this->invoiceLineItems->getInvoiceLineItems($id);
            include 'view/invoice.php';
            break;
    }
}

但是,case 'InvoiceLineItems:'中的include语句会将invoice.php的内容附加到现有页面的底部,而不是完全替换它。我尝试过将目标添加到主播中,但这并不起作用。如何获取打开新页面的链接?

UPDATE:基于@sixeightzero建议,这里是对retrieve()的调用;

        if (isset($_REQUEST['id'])) {

            //          A request ID value indicates arrival here through link.
            $this->retrieve('InvoiceLineItems',
                    $_REQUEST['id']);
        }

另外,我尝试使用标题重定向。

ob_start();
header('Location: /view/invoice.php', 302);
ob_end_flush();
exit();

重定向,但我无法访问

中的数组变量
$invoiceLineItems = $this->invoiceLineItems->getInvoiceLineItems($id);

所以,我得到像

这样的错误

Notice: Undefined variable: partnerInfo in C:\xampp\htdocs\bp\view\invoice.php on line 25

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\bp\view\invoice.php on line 25

4 个答案:

答案 0 :(得分:0)

put exit();在函数结束时调用它后停止执行代码。

或者更好的是仍然使用invoice.php来显示发票而不是当前页面。

答案 1 :(得分:0)

  

1)因为你正在使用超级全局 * $ _ SERVER ['PHP_SELF'] *,   锚将始终指向同一页面。

     

2)现在,我假设您在结束时调用函数 retrieve()   在您点击链接后依次添加的页面   'view / invoice.php'到页面,所以你看到了附加的内容   端。

现在,您希望获取打开新页面的链接,有两种方式

  

1)您将页面重定向到页面视图/ invoice.php 并在那里   在锚标记中调用函数retrieve并包含target =“self”

     

     

2)你做你正在做的事情但是包括target =“blank”   锚标记。

答案 2 :(得分:0)

为了获取以新内容打开的链接,请执行以下操作:

  

1) 将javascript添加到页面 。在Html Head部分添加   以下几行:

<script type="text/javascript">
function hideMainContentDiv(){
 document.getElementById("mainContent").setAttribute("style", "display:none");
}
</script>
     

2) 将onclick属性添加到锚标记 ,如下所示:

<a onclick="hideMainContentDiv()">
     

3)现在, 将页面内容包含在 中并提供给它   id =“mainContent”as:

<div id="mainContent"> <!-- All your content --> </div>
     

4)在您封入内容的页面末尾, 添加   另一个div并将您的函数调用 as:

<div id="newContent">
<?php retrieve($class,$id); ?>
</div>

这将做什么

  
      
  • 当您点击该链接时,它会调用javascript并隐藏 id =“mainContent”中div的所有现有页面内容。
  •   
  • 当您的函数retrieve()被调用时,它将包含'view / invoice.php',它将显示您的新内容。
  •   
  • 您的旧内容已被javascript 调用隐藏。
  •   

我希望这可以解决您的疑问。

答案 3 :(得分:0)

答案结果是会议。

        case 'InvoiceLineItems':
            $partnerInfo = $this->partnerInfo->getPartnerInfo($id);
            $invoiceLineItems = $this->invoiceLineItems->getInvoiceLineItems($id);
            $_SESSION['partnerInfo'] = $partnerInfo;
            $_SESSION['invoiceLineItems'] = $invoiceLineItems;

            ob_start();
            header('Location: /view/invoice.php');
            ob_end_flush();
            exit();
            break;

我将数组数据添加到控制器中的两个会话变量中。然后,在视图中,我将相应的变量名称 - $partnerInfo$invoiceLineItems - 替换为其会话等效项$_SESSION['partnerInfo']$_SESSION['invoiceLineItems']