2013-05-28 47 views
1

使用Ajax這是我第一次張貼....更新值Yii中

我正在使用Yii-助推器的購物網站,但目前我難倒!基本上我試圖實現的是,當用戶將產品添加到購物車時,模式會顯示一條確認消息,然後更新購物車的div以反映新的總計。

真的很簡單,innit?我花了整整一天的時間試圖讓它工作。任何幫助你可以提供將不勝感激。

哦是的...還有一件事,導航欄中的下拉菜單在幾乎任何類型的AJAX動作(加載模態等)後都停止工作。我猜它是由於某處衝突造成的,但我完全迷失在Jquery/Ajax中。

感謝您的回覆。這是我的代碼:

StoreController:

// action allowing a product to be added to the shopping cart 
public function actionAddToCart($id) 
{ 
    //fetch item 
    $item = Item::model()->findByPk($id); 

    //if item is in cart 
    if(Yii::app()->shoppingCart->contains($id)) 
    { 
     //Yii::app()->clientScript->scriptMap['jquery.js'] = true; 
     //$this->renderPartial('_addToCart',array('data'=>$data),false,true);   
     echo CJSON::encode(
      array(
       //'total'=>'Your Cart (N'.number_format(Yii::app()->shoppingCart->getCost()).')', 
       'addCart'=>$this->renderPartial('_inCart',array('item'=>$item),true), 
      ) 
     ); 
     //CHtml::ajax(); 
    } 
    else 
    { 
     Yii::app()->shoppingCart->put($item); 
     //Yii::app()->clientScript->scriptMap['jquery.js'] = true; 
     //$this->renderPartial('_addToCart',array('data'=>$data),false,true); 
     //$this->renderPartial('_addToCart',array('item'=>$item),false,true); 
     echo CJSON::encode(
      array(
       'total'=>'Your Cart (N'.number_format(Yii::app()->shoppingCart->getCost()).')', 
       'addCart'=>$this->renderPartial('_addToCart',array('item'=>$item),true), 
      ) 
     ); 
    } 
} 

_display(partialview示出的產物)

<div style="float: left; display: inline; margin-right: 30px; margin-top: 20px;"> 
<img style="border: 1px solid black;" src="<?php echo Yii::app()->baseUrl; ?>/images/products/thumbs/<?php echo $data->image; ?>" /> 
<div style="font-size: 14px; margin-top: 3px;"> 
Name: <?php echo CHtml::ajaxLink($data->name, array("view", "id"=>$data->id), array('update'=>'#viewdetailsDiv',)); //array(), array('data-toggle'=>'modal','data-target'=>"#".$data->id)); ?><br/> 
Category: <?=$data->category->category?><br/> 
Gender: <?=$data->gender?><br/> 
Price: <?php echo "N".number_format($data->price);?><br/> 
<?php //echo CHtml::ajaxLink("Add to Cart", array("addtocart", "id"=>$data->id), array('update'=>'#addtocartDiv',)); ?> 
<?php echo CHtml::ajaxLink("Add to Cart", array("addtocart", "id"=>$data->id), array('type'=>'POST', 'dataType'=>'json', 
    'success'=>'function(data){ 
     $("#Cart").html(data.total);    
     }' 
    ) 
); ?> 
</div> 

下面是用於容納所述視圖的代碼模態

<?php $this->beginWidget('bootstrap.widgets.TbModal', array('id'=>'myModal', 'autoOpen'=>true, 'htmlOptions'=>array('style'=>'margin-top: 2px;'))); ?> 

<div class="modal-header"> 
    <a class="close" data-dismiss="modal">&times;</a> 
    <h4>Your Cart has been updated</h4> 
</div> 

<div class="modal-body"> 
    <p>The item, <strong><?php echo $item->name; ?></strong> (<?php echo $item->category->category; ?>), has been added to your shopping cart.</p> 
</div> 

    <div class="modal-footer"> 
    <?php $this->widget('bootstrap.widgets.TbButton', array(
     'type'=>'primary', 
     'label'=>'Close', 
     'url'=>'#', 
     'htmlOptions'=>array('data-dismiss'=>'modal'), 
    )); ?> 
</div> 

<?php $this->endWidget(); ?> 
+0

那麼你是如何試圖做到這一點實現呢?您需要一個使用renderPartial('_ shopping_cart',$ data,true,false)的控制器操作,並在更新數據時使用一些JavaScript來提取數據。看看這裏:http://www.yiiframework.com/wiki/49/update-content-in-ajax-with-renderpartial/ – JPR

+0

你能告訴我們一些代碼嗎? – Ezze

+0

感謝您的關注。我只是添加了代碼。發生什麼事是當我點擊ajaxLink時,它更新#Cart div,但它不顯示模式。 @Ezze –

回答

0

我不能告訴你完美的解決方案,但可以給你一個關於Yii的建議,可以解決你的問題。 始終加載第一個請求中使用的所有jquery或js文件。不要在任何ajax請求中再次加載任何js文件,這會帶來很多問題。

你可以簡單的方式

if(Yii::app()->request->isAjaxRequest){ 
    Yii::app()->clientScript->scriptMap['jquery.js'] = true; 
}