我有一个动态链接,可根据发票ID提取发票明细。
<a href='<?php echo $_SERVER['PHP_SELF']; ?>/retrieve?class=InvoiceLineItems&id=<?php echo $invoice['invoice_id']; ?>'><?php echo $invoice['invoice_number']; ?></a> <?php echo $invoice['customer_name'] ?> <?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
答案 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']
。