2

我在 opencart 中发布变量时遇到了一些问题。我要做的是从结帐/登录页面上的文本字段中获取两个变量,称为名称和地址。我希望在单击继续按钮时存储输入这两个字段的值,然后将其发送到结帐/访客页面,我想在其中回显这些变量。这是我所做的:

这是我的 checkout.tpl 文件,我试图将名称和地址变量发送到结帐/访客页面,特别是接收方法:

$('#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 控制器文件中,我收到发布的变量,并将它们存储在名为名称和地址的 2 个变量中:

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

然后在 guest.tpl 文件中,我将它们回显:

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

当我加载访客页面时,我收到以下错误消息:注意:未定义变量:第 13 行 C:\xampp\htdocs\catalog\view\theme\default\template\checkout\guest.tpl 中的名称 注意:未定义变量: 第 14 行 C:\xampp\htdocs\catalog\view\theme\default\template\checkout\guest.tpl 中的地址。

如果有人能告诉我如何使这段代码工作,我将不胜感激。据我所知,变量要么没有被发送到正确的位置,要么我没有在 guest.php 页面上正确访问它们。

4

1 回答 1

5

首先 - 我不明白你为什么要发布一些nameaddresscheckout/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 回答