2012-06-29 21 views
0

我有一个动态链接,它根据发票ID提取发票明细。php:动态链接将内容追加到现有页面而不是打开新页面

<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:'发现声明中追加的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

错误210
+0

您能否提供更多的代码,特别是您的switch语句之前的哪些输出? –

+0

我的解决方案解决了您的问题吗? –

+0

@SHAKIRSHABBIR我不知道,但。我整个星期都不在办公室。一旦我回到它,我会让你知道。感谢您的跟进。 –

回答

0

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

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

+0

我打电话给invoice.php。它的内容被附加到invoiceList.php中,它在应用程序的开始处显示。在include之后调用exit()不起作用。 –

0

1)因为,你正在使用超级全球 * $ _ SERVER [ 'PHP_SELF'] *,该 锚永远指向同一个页面。

2)现在,我想,你叫功能在 页面这反过来,你打的链接后,追加 “视图/ invoice.php”到年底检索()页面,因此您可以在 末尾看到附加内容。

现在,你想去打开新网页的链接,有两种方式

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

或者

2)你你正在做的事情,但包括在 锚标记目标=“空白”

+0

第一部分,您对这两个帐户都是正确的。我认为使用PHP_SELF将允许我替换现有的内容,但似乎没有。至于重定向,两者都没有按预期工作。没有它,自己的行为是一样的。 _blank弹出一个新窗口,然后显示与以前相同的内容。 –

+0

好的,明白了你的意思。看到我的下一个答案。我正在写Plz。 –

+0

第一部分的第二部分,我错过了。我不会在页面末尾调用检索。如上所述,该函数驻留在模型中,而不是视图。所以,我在这个问题上没有取得任何进展。感谢您的尝试。 –

0

为了获得链接,打开新鲜内容,具体操作如下:

1)添加JavaScript页面。在HTML头中添加 下列行:

<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 id="newContent"> 
<?php retrieve($class,$id); ?> 
</div> 

这将完成是:

  • 当你cl ick链接,它会调用JavaScript并隐藏所有现有页面内容的div,其中的内容为id =“mainContent”
  • 当您的函数检索()将被调用时,它将包含'view/invoice.php',它将显示您的新内容。
  • 您的旧内容已隐藏javascript javascript致电。

我希望这可以解决您的查询。

+0

感谢您的帮助。但是,您的解决方案无法解决问题。我的视图并不知道InvoiceLineItems的函数retrieve()是什么。所以,它不能像你所说的那样被调用。我所有的模型只能从控制器调用。 –

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; 

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