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

exit(); を置きます。関数の最後で、呼び出し後にコードの実行を停止します。

または、現在のページではなく、invoice.php を使用して請求書を表示することをお勧めします。

于 2012-06-29T16:26:38.693 に答える
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;

コントローラーの 2 つのセッション変数に配列データを追加しました。次に、ビューで、対応する変数名 --$partnerInfoおよび$invoiceLineItems-- をセッションの同等の$_SESSION['partnerInfo']およびに置き換えました$_SESSION['invoiceLineItems']

于 2012-07-11T15:46:33.177 に答える
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 を追加し、次のように関数 retrieve を呼び出します

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

これが行うことは次のとおりです。

  • リンクをクリックすると、javascript が呼び出され、id="mainContent"を持つ div 内のすべての既存のページ コンテンツが非表示になります。
  • 関数 retrieve()が呼び出されると、新しいコンテンツを表示する「view/invoice.php」が含まれます。
  • 古いコンテンツは、 javascript呼び出しによって既に非表示になっています。

これで質問が解決することを願っています。

于 2012-06-29T18:29:50.063 に答える
0

1)スーパーグローバル*$_SERVER['PHP_SELF']* を使用しているため、アンカーは常に同じページに誘導されます。

2) ここで、ページの最後で関数 retrieve()を呼び出すと仮定します。この関数は、リンクをクリックした後、「view/invoice.php」をページに追加します。したがって、追加されたコンテンツが終わり。

新しいページを開くためのリンクを取得するには、次の 2 つの方法があります。

1)ページをページ view/invoice.php にリダイレクトし、そこで関数 retrieve を 呼び出して、アンカー タグに target="self" を含めます。

または

2)実行していることを実行しますが、アンカー タグに target="blank"を含めます。

于 2012-06-29T16:56:00.227 に答える