Ажакс обновление частей лейаута.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Закрыто
lordius
Сообщения: 25
Зарегистрирован: 2013.01.15, 15:25

Ажакс обновление частей лейаута.

Сообщение lordius »

Всем привет, в общем немного не понимаю как лучше сделать такое, есть контролер в котором формируется список товаров, как лучше это добро вывести на лейаут, у меня просто определеный блок будет однаковый на сайте везде, и нужно чтобы при наведение на него выводился список, сейчас делаю плохо, посылаю джейквери ажакс запрос, получаю джейсон, парсю его и формирую нужный блок, но хочу что бы посылал ажакс запрос, контролер рендерил вюшку, и эта вюшка отображалась в блоке на главном лейаут.

Код: Выделить всё

public function actionAjaxList(){
            if(Yii::app()->request->isAjaxRequest)
                {
                 $goodsCart =  Yii::app()->shoppingCart->getPositions();
                 //var_dump($goodsCart);exit();
                 $items=array();
                 foreach ($goodsCart as $key => $value){
                     //var_dump($value);exit();
                     $item=array(
                         'id' => $value->attributes['index'],
                         'name' => $value->attributes['name'],
                         'img' => $value->attributes['image1'],
                         'artno' => $value->attributes['artno'],
                         'category' => $value->imgPath,
                         'subcategory' => $value->attributes['category'],
                     );
                     $items[]=$item;
                 }
                echo CJSON::encode($items);
            }
        } 

Код: Выделить всё

 $('.item-b2.card').on({
        mouseenter: function(){
          $(this).attr('class','item-b2 card active');
          var drop_list='<div class="card-drop"><div class="top-drop"></div><div class="main-drop"></div><div class="bottom-drop"></div></div>';
          $(this).append(drop_list);
          $.ajax({
            type: "POST",
            url: 'cart/ajaxList',
            data: '',
            success: function (message) {
               // alert(message);
                var obj = jQuery.parseJSON(message);
                console.log(obj);
                for(var i=0;i<data.length;i++){
                    var element='<div class="element-cart-drop">\n\
                               <div class="element-cart-drop-img"><img src="'+data.img+'" width="70" height="70"/></div>\n\
                               <div class="element-cart-drop-desk"></div>\n\
                               <div class="element-cart-drop-del"></div>\n\
                           </div>';
                   $('.card-drop .main-drop').append(element);
               }
            }
         });
          //$('.card-drop .main-drop').html();
          //console.log('start');
        },
        mouseleave: function(){
          $(this).attr('class','item-b2 card');
          $('.card-drop').remove();
          //console.log('end');
        }
      });  // desc 
lordius
Сообщения: 25
Зарегистрирован: 2013.01.15, 15:25

Re: Ажакс обновление частей лейаута.

Сообщение lordius »

В общем пока решил так, может есть лучшее решение, не против буду если кто подскажет, я так понимаю что ответ джейсон тоже идет рендер вюшки
public function actionAjaxList(){
if(Yii::app()->request->isAjaxRequest)
{
$goodsCart = Yii::app()->shoppingCart->getPositions();
//var_dump($goodsCart);exit();
$this->renderPartial('listAjax',array(
'goods'=>$goodsCart,
)
);
}
}
а во вюхе делаю необходимый дизайн и вывод.Дальше в джс

$(function() {
$('.item-b2.card').on({
mouseenter: function(){
var container=$(this);
container.attr('class','item-b2 card active');
$.ajax({
type: "POST",
url: 'cart/ajaxList',
data: '',
success: function (message) {
// alert(message);
//console.log(message);
container.append(message);
}
});
},
mouseleave: function(){
$(this).attr('class','item-b2 card');
$('.card-drop').remove();
//console.log('end');
}
}); // descendant selector
});
AlEg
Сообщения: 61
Зарегистрирован: 2012.01.17, 04:46

Re: Ажакс обновление частей лейаута.

Сообщение AlEg »

А зачем в JSON? Формируйте готовый HTML, тогда

Код: Выделить всё

$(function() {
  $('.item-b2.card').on({
    mouseenter: function(){
      $('#container').load('cart/ajaxList');
    }
  });
});
 
В контроллере:

Код: Выделить всё

$out = '<ol>';
foreach ($goodsCart as $key => $value){
 $out .= "<li>Имя: ${value->attributes['name']}, категория: ${value->attributes['category']}</li>";
}
$out .= '</ol>';
echo $out;
Yii::app()->end();
lordius
Сообщения: 25
Зарегистрирован: 2013.01.15, 15:25

Re: Ажакс обновление частей лейаута.

Сообщение lordius »

Спасибо, так и сделал, правда код чуть другой, но идея таже :)
Закрыто