我有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知识很少,我不确定在哪里,在哪个文件中,我能做到这一点,以及如何。
答案 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知识很少,我不确定它是否有很大的帮助。