2

opencart 内で変数を投稿するのに問題があります。私がやろうとしているのは、名前と住所と呼ばれる、チェックアウト/ログイン ページのテキスト フィールドから 2 つの変数を取得することです。これらの 2 つのフィールドに入力された値は、続行ボタンがクリックされたときに保存され、チェックアウト/ゲスト ページに送信され、そこでこれらの変数をエコーアウトしたいと考えています。これが私がやったことです:

これが私のcheckout.tplファイルです。ここでは、名前とアドレスの変数をチェックアウト/ゲストページ、特にreceiveメソッドに送信しようとしています:

$('#button-account').live('click', function() {
  var name = $('#name').val();
  var address = $('#address').val();
  $.post('index.php?route=checkout/guest/receive', { name: name, address: address});

});

次に、guest.php コントローラー ファイルで、ポストされた変数を受け取り、name と address という 2 つの変数に格納します。

public function receive() {
$name = $this->request->post['name'];
$address = $this->request->post['address'];
}

次に、guest.tpl ファイルで、それらをエコーアウトします。

<?php
echo $name;
echo $address;
?>

ゲスト ページをロードすると、次のエラー メッセージが表示されます: Notice: Undefined variable: name in C:\xampp\htdocs\catalog\view\theme\default\template\checkout\guest.tpl on line 13 Notice: Undefined variable : 14 行目の C:\xampp\htdocs\catalog\view\theme\default\template\checkout\guest.tpl のアドレス。

誰かがこのコードを機能させる方法を教えてくれたら、とても感謝しています。私が知る限り、変数が正しい場所に送信されていないか、guest.php ページで変数に正しくアクセスしていません。

4

1 に答える 1

5

まず第一に、あなたがそれらを追加しない限り、デフォルトではそのようなフィールドがないので、なぜあなたがいくつかnameとページaddressから投稿したいのか分かりません。checkout/login

とにかくそのような場合、私はこのように進めます-receive()あなたがするようにAJAXを介してメソッドに投稿します。ここでは、変数をセッションに保存します。

public function receive() {
    $this->session->data['guest_name'] = $this->request->post['name'];
    $this->session->data['guest_address'] = $this->request->post['address'];
}

次に、catalog/controller/checkout/guest.phpメソッドindexでそのセッション変数を確認し、設定されている場合は$this->data、テンプレートに表示するために値を配列に格納します。

if(isset($this->session->data['guest_name'])) { // it is enough to check only for one variable and only if it is set
    $this->data['guest_name'] = $this->session->data['guest_name'];
    $this->data['guest_address'] = $this->session->data['guest_address'];
}

その後、これらの値をテンプレートにエコーするだけです(まだ存在するかどうかを確認します)。

<?php if(isset($guest_name)) { ?>
<div><?php echo $guest_name . ' - ' . $guest_address; ?></div>
<?php } ?>

undefined variable今、あなたは通知を避けながら行われるべきです...

于 2012-12-17T09:45:56.600 に答える