Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改OpenCart产品页面上的原始价格?_Php_Jquery_Mysql_Session_Opencart - Fatal编程技术网

Php 如何更改OpenCart产品页面上的原始价格?

Php 如何更改OpenCart产品页面上的原始价格?,php,jquery,mysql,session,opencart,Php,Jquery,Mysql,Session,Opencart,不使用管理面板。我希望能够在产品页面上更改OpenCart中项目的价格 基本上,我有一个名为Bespoke/Custom:的选项,它是一个文本字段。如果客户在这里输入任何内容,我希望能够通过jQuery更改价格,然后我希望新的隐藏字段中的价格覆盖此客户订单的购物车价格 可能吗?是否有允许客户输入自己价格的扩展,然后我可以隐藏此字段并通过jQuery等进行更新 这是对其他一些帖子的参考,也是关于这个模型链接的,它显示了oop的主要功能在哪里,但是它的功能非常广泛,它们的好的,为您指出了正确的方向,

不使用管理面板。我希望能够在产品页面上更改OpenCart中项目的价格


基本上,我有一个名为
Bespoke/Custom:
的选项,它是一个文本字段。如果客户在这里输入任何内容,我希望能够通过jQuery更改价格,然后我希望新的隐藏字段中的价格覆盖此客户订单的购物车价格

可能吗?是否有允许客户输入自己价格的扩展,然后我可以隐藏此字段并通过jQuery等进行更新


这是对其他一些帖子的参考,也是关于这个模型链接的,它显示了oop的主要功能在哪里,但是它的功能非常广泛,它们的

好的,为您指出了正确的方向,我将这样做:

1。隐藏输入渲染
如您所知,在
目录/view/theme/default/template/product/product.php
中,存在将产品添加到购物车的AJAX请求:

如果查看
数据
参数,您将看到
产品信息
div中的所有输入、选择、文本区域等都被填充并发布到PHP

因此,我将使用自定义价格值将隐藏的输入呈现到
中。product info
div根本不需要修改AJAX请求。
假设该输入的名称为
自定义价格

2。
结账/购物车/添加

打开
catalog/controller/checkout/cart.php
并搜索
add
方法。在这里,所有的魔术都应该完成。在这部分代码之后:

            if (isset($this->request->post['option'])) {
                $option = array_filter($this->request->post['option']);
            } else {
                $option = array();  
            }
我想补充一点:

            if(isset($this->request->post['custom_price']) && $this->isCustomPriceValid($this->request->post['custom_price'])) {
                $custom_price = $this->request->post['custom_price'];
            } else {
                $custom_price = false;
            }
执行
isCustomPriceValid()
方法以满足您的需求…并前进到此处的最后一次编辑-更改此行:

$this->cart->add($this->request->post['product_id'], $quantity, $option);
致:

3。购物车
现在打开这个文件:
system/library/cart.php
,然后再次搜索
add
方法。您必须将该方法的定义更改为:

public function add($product_id, $qty = 1, $option = array(), $custom_price = false) {
在此方法中最后一行代码之前,添加另一行:
(此代码因OP的评论而被编辑)

就在add之后

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $price = $this->session->data['cart']['custom_price'][$key];
}
现在,价格应该被自定义价格覆盖。进一步检查产品的价格是否稍后设置为:

$this->data[$key] = array(
    // ...
    'price'           => ($price + $option_price),
    // ...              
);
因此,如果您想用自定义价格覆盖整个价格,请在该数组之后添加该条件,如下所示(而不是在
$price=…;
之后):

应该是这样。我没有测试代码,它可能会工作,也可能不会有轻微的修改。我当时在与OC 1.5.5.1合作。这只会给你指出正确的方向(同时相信终点不会太远)

享受吧

-“这只会给你指出正确的方向(同时相信终点不会太远)。通过@shadyyx”

感谢@shadyyx-展示了正确的方法。。。我设法让它工作,这是如何:

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['cart']['custom_price'][$key];
} 
应该是:

if(isset($this->session->data['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['custom_price'][$key];
}

再次感谢您,我希望有人会觉得这很有用。

如果我没有弄错您的意思,您想让用户插入自己的价格,并将其用于计算和结账过程吗?然后,我建议您仔细查看签出过程(手动遵循代码或使用例如XDebug和Netbeans),了解何时以及如何加载价格,以便您可以覆盖该逻辑并使用自定义价格(如果提供)。我建议将重点放在
添加到购物车
部分,因为产品及其数据(选项、价格)存储在会话中-因此在将产品添加到购物车之前,应该为产品设置自定义价格。我在页面上有一个隐藏字段,其中包含“销售”自定义价格。基本上,当他们添加或更改页面时,这个隐藏字段值会用新的价格更新。当他们按add to checkout时,它应该只是正常地签出并添加到购物车中。“正常地签出并添加到购物车中”的意思是在原价不变的情况下?或者原始价格应该与隐藏输入的价格一起更改?如果你想改变产品的价格,它将与一个隐藏输入一起出售,那么我将非常乐意在该商店购物;-)我希望能够改变隐藏输入的价格。隐藏的输入值是安全的,这是我们需要设置的。。你能给我一些建议吗。感谢您的建议,然后您将检查从隐藏输入设置的值是否是应该设置的值?我相信我不必提及,例如FireBug,我可以更改隐藏输入的值,因此价格可以设置为仅1美元。。。正如我在第一条评论中所提到的,当所有数据(和价格)都存储在一个会话中时,遍历将产品设置到购物车中的过程,这就是你应该为产品注入自定义价格值的点。所有细节+1,但它不起作用。我会很感激如果你能真正测试和建立这个也有兴趣在我的网站商业安装-或作为一个模块,但能够通过核心添加它-请!到目前为止非常感谢,但我的价格没有体现出来@m1由于我们编辑了所有应该设置自定义价格的逻辑并将其添加到会话中,所以无论何时调用方法
system/library/cart.php::getProducts()
(或者换句话说,您通常会看到它像
$this->cart->getProducts()
)-会话中已自定义价格的所有产品都将返回。这个网站,虽然你经常会发现它是这样的,但并不是一直提供现成的解决方案——有时候答案只会把你推到正确的方向。这也是你自学的最好方法。什么对你不起作用?价格不起作用。新的价格会被带入购物车页面,但在购物车页面上不会
if(isset($this->session->data['cart']['custom_price'][$key])) {
    $price = $this->session->data['cart']['custom_price'][$key];
}
$this->data[$key] = array(
    // ...
    'price'           => ($price + $option_price),
    // ...              
);
if(isset($this->session->data['cart']['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['cart']['custom_price'][$key];
}
if(isset($this->session->data['cart']['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['cart']['custom_price'][$key];
} 
if(isset($this->session->data['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['custom_price'][$key];
}