Надеюсь, что у вас все хорошо. У меня проблема: я использую расширение i.e. select2, которое показывает имя всех продуктов в раскрывающемся списке, и это отлично работает для меня. В моей базе данных каждый продукт имеет индивидуальную цену. Итак, я хочу показать сумму цены всех выбранных продуктов в следующем раскрывающемся списке. Итак, я использовал ajax для отправки идентификатора продукта контроллеру, чтобы найти цену продукта. К сожалению, я не могу суммировать всю цену продукта, потому что когда я добавляю новый продукт, тогда предыдущий идентификатор продукта получает изменения, тогда цена также меняется. Но я хочу держать цену продуктов в переменной при выборе продукта.Как сохранить значения вызова ajax в переменной
форма код:
<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));
}
Я потратил много времени, чтобы решить эту проблему, но так или иначе не мог. Пожалуйста, помогите кому-нибудь.
Спасибо заранее, Shimul
Когда цена продукта меняется? – sakhunzai
Я бы добавил атрибут данных, например '' при создании выпадающего списка и использовать этот атрибут, не нужно получать общую сумму при каждом добавлении нового продукта :) – sakhunzai
@ sakhunzai's Ответ, скорее всего, будет и моим. Альтернативой является вместо использования 'update' в вашем ajax, используйте' success' с функцией обратного вызова и добавьте логику в javascript для чтения текущего значения, вычтите предыдущую стоимость (если это было изменение в раскрывающемся списке, а не в новый выбор), добавьте новую стоимость и обновите div. , , , – ernie