Yii Framework Forum: ajax - ładowanie zawartości - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

ajax - ładowanie zawartości Rate Topic: -----

#1 User is offline   Deimos 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 27-July 10

Posted 07 August 2010 - 07:30 AM

Chciałem za pomocą Html::ajaxLink załadować zawartość (moduły) do odpowiednich widoków. Wzorowałem się na metodzie renderPartial ( http://www.yiiframew...oc/cookbook/49/ ). Jednak Linki tworzę nie w widoku tylko w kontrolerze ponieważ są to elementy JTreeView także tworzone dynamicznie przez ajaxa.

Metody kontrolera wyglądają nastepująco:
Metoda ajaxFillTree
public function actionAjaxFillTreeJednostki(){
		if (!Yii::app()->request->isAjaxRequest) {
            exit();
        }
        $parentId = 0;
        if (isset($_GET['root'])) {
            $parentId = (int) $_GET['root'];
        }
        
        $children = Jednostki::model()->findAllByAttributes(array('rodzic'=>$parentId));
        
        for($i=0;$i<sizeof($children);$i++){
        	$data[$i]['text'] = CHtml::ajaxLink(
        							$children[$i]->nazwa,
        							CController::createUrl('sis/UpdateAjax'),
        							array(  'update' => '#data',
        									'type'=>'GET',
        									'data'=>array('id'=>$children[$i]->id),
        								)
        							);
        	$maDzieci = Jednostki::model()->findByAttributes(array('rodzic'=>$children[$i]->id));
        	if(isset($maDzieci)){
        		$data[$i]['hasChildren']=true;
        		
        	}
        	else{
        		$data[$i]['hasChildren']=false;
        	}
        	$data[$i]['id']=$children[$i]->id;
        }
        
        echo CTreeView::saveDataAsJson($data);
            
        exit();
        
	}


Metoda odpowiedzialna za renderowanie zawartosci
public function actionUpdateAjax()
    {
        $data = array();
        $id = $_GET['id'];
        $data['info']='to jest ajax, id: '.$id;
        
        $data['dInformacje'] = Jednostki::model()->findByPk($id);
		
        $this->renderPartial('_ajaxContent', $data, false, true);
    }
	
}


i widoki renderownej zawarosci
wyswietl.php
<div id="data">
	<?php echo $this->renderPartial('_ajaxContent',array(
				'info'=>$info,
				'dInformacje'=>$dInformacje,
			)); 
	?>
</div>


ajaxContent.php
<div id="informacje_glowne">
<?php echo $info;?>
<?php  echo "<br />".$dInformacje->nazwa?>

</div><!-- informacje_glowne -->


Po kliknięciu w wygenerowane linki (w drzewie) nic się nie renderuje. Dlaczego?
0

#2 User is offline   gadd33 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 15-April 09
  • Location:Opole / Poland

Posted 08 August 2010 - 04:27 AM

Jeśli dane do TreeView wczytywane są ajax'em tak jak w twoim przypadku to ajaxLink nie zadziała, gdyż obsługa zdarzenia kliknięcia w ten link (polecenie jQuery) nie zostanie wyrenderowana.
Jedno z rozwiązań - musiał być w widoku "wyswietl.php" ręcznie dodać obsługę w jQuery czyli coś takiego:

<?php

Yii::app()->clientScript->registerScript("jQuery('#treeview a').live(
		'click',function(){
			jQuery.ajax({
				'type':'GET',
				'url':jQuery(this).attr('href'),
				'cache':false,
				'success':function(html){jQuery('#data').html(html);}
			});
			return false;
		});");

?>


Do tego CHtml::ajaxLink powinieneś zmienić na zwykły CHtml::link z odpowiednim URLem zawierającym również parametr. Selektor #treeview powinien odpowiadać ID elementu w którym są wszystkie linki z drzewka. Powodzenia.
0

#3 User is offline   Deimos 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 18
  • Joined: 27-July 10

Posted 09 August 2010 - 10:48 AM

Dzięki wielkie, poradziłem sobie wcześniej poprzez statyczne wygenerowanie drzewa (bez pomocy ajaxa), wtedy linki działały.
Twoje rozwiązanie wydaje się bardzo sensowne. Pewnie wykorzystam w przyszłości.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users