0

我有一个动态链接,它根据发票 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;
    }
}

但是,在现有页面的底部找到的 include 语句case 'InvoiceLineItems:'将内容附加invoice.php到现有页面的底部,而不是完全替换它。我尝试将目标添加到锚点,但没有奏效。如何获取打开新页面的链接?

更新:根据@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

4 回答 4

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" 指定为:

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

4)在页面末尾,当您包含您的内容时,添加另一个 div 并将您的函数调用调用为:

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

这将做的是:

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

我希望这能解决您的疑问。

于 2012-06-29T18:29:50.063 回答
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'].

于 2012-07-11T15:46:33.177 回答
0

放出口();在函数结束后停止执行代码。

或者最好还是使用 invoice.php 来显示发票而不是当前页面。

于 2012-06-29T16:26:38.693 回答
0

1) 由于您使用的是超级全局*$_SERVER['PHP_SELF']*,因此锚点将始终指向同一页面。

2) 现在,我假设您在页面末尾调用函数 retrieve(),然后在您点击链接后,将“view/invoice.php”附加到页面,因此您可以在结尾。

现在,您想获取打开新页面的链接,有两种方法

1)您将页面重定向到页面view/invoice.php,然后 调用函数retrieve并将target =“self”包含在锚标记中。

或者

2)您做您正在做的事情,但在锚标记中包含 target="blank" 。

于 2012-06-29T16:56:00.227 回答