根据js脚本输出更改产品价格

时间:2014-04-19 07:37:02

标签: javascript php opencart shopping-cart

我有OpenCart 1.5.6。在产品页面中,javascript count.js附加到文本区域

counter = function() {
    var value = $('#bob').val();
    if (value.length == 0) {
        $('#wordCount').html(o);
        return;
    }
var wordCount = value.split(/\s+/)
                     .filter(function(v){ return v.length>2 })
                     .length;
    $('#wordCount').html(wordCount);
};
$(document).ready(function() {
    $('#count').click(counter);
    $('#bob').change(counter);
    $('#bob').keydown(counter);
    $('#bob').keypress(counter);
    $('#bob').keyup(counter);
    $('#bob').blur(counter);
    $('#bob').focus(counter);
});

我希望价格根据输出动态变化。所以例如我希望价格成为

price = price * wordcount;

因此价格会根据输入文本框的单词数量而变化

有人可以帮助我这样做。我的PHP知识很少,我不确定在哪里,在哪个文件中,我能做到这一点,以及如何。

1 个答案:

答案 0 :(得分:1)

我认为你需要为此学习一些PHP。

首先,您的文本区域(bob,我推测)应该设置为类型为“Textarea”的产品的选项。然后将产品的价格设置为每个单词的价格。

在catalog / controller / product / product.php中,您需要添加以下代码:

$this->data['word_price'] = $this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'));

在您的product.tpl中,确保显示价格的位置由<span id="product_price">xxx</span>

封装

然后在您的javascript函数counter()开头

var word_price = <?php echo (float)$word_price; ?>;

(虽然你需要先将你的函数从count.js中取出并放在<script>标签内的product.tpl中)

在功能计数器()

的末尾
$('#product_price').val(word_price * wordCount);

这将使其显示在产品详细信息页面上。

您还需要在/system/engine/cart.php中进行更改,以便在将其添加到购物车时再次计算价格。 (您不希望浏览器告诉您的系统价格是多少!)

在以下getProducts()声明的函数if中..

elseif ($option_query->row['type'] == 'text' || $option_query->row['type'] == 'textarea' || $option_query->row['type'] == 'file' || $option_query->row['type'] == 'date' || $option_query->row['type'] == 'datetime' || $option_query->row['type'] == 'time') {

删除textarea的检查。

然后在elseif之后添加另一个:

elseif ($option_query->row['type'] == 'textarea') {

    $word_count = $this->countWords($option_value);

countWords()是一个私有函数,你必须在这个cart.php文件中添加,但你似乎已经掌握了它已经在你的javascript中了)

    $product_price = $word_count * $product_query->row['price'];

$option_data[] = array(
    'product_option_id'       => $product_option_id,
    'product_option_value_id' => '',
    'option_id'               => $option_query->row['option_id'],
    'option_value_id'         => '',
    'name'                    => $option_query->row['name'],
    'option_value'            => $option_value,
    'type'                    => $option_query->row['type'],
    'quantity'                => '',
    'subtract'                => '',
    'price'                   => '',
    'price_prefix'            => '',
    'points'                  => '',
    'points_prefix'           => '',                                
    'weight'                  => '',
    'weight_prefix'           => ''
);
}                           

然后在你看到的整个循环下面

$price = $product_query->row['price'];

替换为:

if (isset($product_price)) 
    $price = $product_price;
else
    $price = $product_query->row['price'];

显然代码需要清理,我根本没有测试过(例如它会触发所有textarea选项),但这就是我接近它的方法。虽然如果你说你的PHP知识很少,我不确定它是否有很大的帮助。