【发布时间】:2013-10-07 12:52:47
【问题描述】:
希望你们一切都好。我有一个问题,我使用了一个扩展,即 select2,它在下拉列表中显示所有产品的名称,它对我来说很好用。在我的数据库中,每种产品都有单独的价格。所以,我想在下拉列表的下一个显示所有选定产品价格的总和。因此,我使用 ajax 将产品 ID 发送到控制器以查找产品价格。不幸的是,我无法汇总所有产品价格,因为当我添加新产品时,以前的产品 ID 会发生变化,然后价格也会发生变化。但是我想在选择产品时将产品的价格保存在一个变量中。
表格代码:
<div class="row">
<?php echo $form->labelEx($model,'item_list'); ?>
<?php
$data = CHtml::listData(Products::model()->findAll(),'id', 'name');
echo Select2::activeMultiSelect(
$model, 'item_list', $data, array(
'required' => 'required',
'style' => 'width: 270px;',
'placeholder' => 'Add Product',
'select2Options' => array(),
'ajax' => array('type'=>'POST',
'url'=>$this->createUrl('totalOrderPrice'), //url to call.
'update'=>'#price', //selector to update
'data'=>array('item_list'=>'js:this.value'),
),
)
);
?>
<?php echo $form->error($model,'item_list'); ?>
</div>
控制器代码:
...
...
public $prices;
...
...
public function actionTotalOrderPrice(){
$data = Products::model()->findByPk(array('id'=>$_POST['item_list']));
$this->prices += $data->prices;
echo CHtml::tag('input', array( 'type'=>'text' , 'name'=>'Order[price]' , 'value' => $this->prices));
}
我花了很多时间来解决这个问题,但无论如何都解决不了。请帮助某人。
提前致谢, 希穆尔
【问题讨论】:
-
产品价格何时变动?
-
我会在创建下拉列表时添加一个数据属性,例如
<option data-price="34" >Product xyz</option>,并使用该属性,每次添加新产品时都无需获取总价:) -
@sakhunzai 的回答很可能也是我实施它的方式。另一种方法是在你的ajax中使用
update,而不是在你的ajax中使用success,并在javascript中添加逻辑来读取当前值,减去以前的成本(如果这是对下拉菜单的更改而不是新选择),添加新成本,并更新 div 。 . . . -
@ernie ,我无法理解
I can't sum all of product price because when I add new product then previous Id of product gets change then price also gets change这句话。为什么添加新产品时产品 ID 会发生变化? -
@sakhunzai 感谢您对我的帖子发表评论。当我选择一个新产品时,ajax 将该产品 id 发送到控制器的方法,该方法使用该 id 从数据库中找到该产品的价格。在这里,我将选择多个产品并将所有产品价格相加并显示在下拉列表下方。但我做不到。