我试图将一个字段添加到结帐页面,以便在处理订单时请求电话号码。
我的checkout.tpl我添加了
<label for"telephone">Phone Number</label><input type="text" name="telephone" value="<?php echo $telephone; ?>" required="required" />
checkout.php控制器中的
$this->data['telephone'] = $this->customer->getTelephone();
默认情况下,它会在配置文件中显示可用的电话号码,并为用户提供更改的机会。
但我遇到的问题是当我使用新的电话号码处理订单时,按顺序保存旧号码。
当我打印$this->request->post['telephone']
中的值
未定义索引:电话
即使输入字段保存值。有人可以告诉我这里我做错了什么吗?
答案 0 :(得分:1)
因为您所制作的字段永远不会发布到checkout.php
。
在结帐页面看到一切都是由ajax调用发生的。当您处于初始结帐页面时,它会获取其中一个tpl(payement_address.tpl
,guest_shipping.tpl
等)的内容,具体取决于用户选择的选项,例如register account
或{{1}如果用户已登录
现在,在通过ajax加载这些相应的tpl后,其中的字段将通过ajax发布到各自的控制器。控制器位于guest checkout
因此,您不希望在catalog/controller/checkout
中随机添加字段,而是在checkout.tpl
然后将shipping_address.tpl
添加到shipping_address控制器的$this->session->data['telephone'] = $this->request->post['telephone']
注意public function validate()
有条件,所以在事情之后加上相应的几分钟(不要在SO:P中提出问题)
然后最后您需要将此电话添加到if(existing address) else if (new address)
控制器
替换
confirm.php
带
$data['telephone'] = $this->customer->getTelephone();
和
$data['telephone'] = $this->session->data['telephone'];
到
$data['telephone'] = $this->session->data['guest']['telephone'];
这应该是全部。我可能错过了一些东西,但这是你自己学习东西的全部目的
PS 从下次尝试一点点努力,你必须通过查看tpl文件知道发布请求永远不会转到$data['telephone'] = $this->session->data['telephone'];
控制器而只是向控制器文件中添加一个变量是不够的您还必须在数据即将保存在数据库中的地方进行更改