シナリオ:国を示す Twitter ブートストラップ サムネイル グリッドのビューがあります。ユーザーが 1 つの画像をクリックすると、その国に関連する都市が同じグリッド (画面) に表示されるはずです。
技術:最初に dataProvider に国を入力します。次に、国 ID を含む ajax リクエストをコントローラーに送信する必要があります。コントローラーは、その国に関連する都市をデータベースにクエリし、新しい dataProvider をビューに送信して更新します。新しいデータを持つ同じサムネイル dataProvider。
質問:どうすればいいですか?
これが私のコードです:
サムネイル宣言付きのビュー (ビューの名前: _detail)
<?php
$this->widget('bootstrap.widgets.TbThumbnails', array(
'id' => 'detailThumbnails',
'dataProvider' => $dataprov,
'template' => "{items}\n{pager}",
'itemView' => '_thumb',
));
?>
サムネイル「itemView」プロパティで呼び出されるビュー (ビューの名前: _thumb)
<?php
require_once '_detail.php';
?>
<li class="span3">
<a href="#" class="<?php echo "thumbnail".$data['id'] ?>" rel="tooltip" data-title=" <?php echo "Clicar.."; ?>">
<img src="<?php echo Yii::app()->getBaseUrl() . $data['photo'] ?>" alt="">
<a href=
"
<?php
echo $className;
echo $this->createUrl(get_class($data).'/view', array('id' => $data['id']));
?>
"
>
<?php
echo $data['name'].$data['id'];
?>
</a>
<?php
Yii::app()->clientScript->registerScript('thumbClick'.$data['id'],'
$(".thumbnail'.$data['id'].'").click(function(){
var request = $.ajax({
data: {
id : '.$data['id'].'
},
type: "post",
url:"'.Yii::app()->createAbsoluteUrl("tripDetail/getCities").'",
error: function(response, error)
{
alert("Error: " + response + " : " + error);
},
});
$(".thumbnail'.$data['id'].'").ajaxSuccess(function() {
$.fn.yiiListView.update("detailThumbnails");
});
});
');
?>
</a>
</li>
成功した場合、_detail という名前のビューにある同じ dataProvider を更新する必要があるため、require_once. 私がやろうとしているのは、コントローラー(以下)からのデータをjsonで渡し、ここでデコードすることです。しかし、json 応答から新しいデータ プロバイダーを構築する方法がわかりません。また、エンコードが適切に行われたかどうかもわかりません。それは...ですか????
コントローラ (一部の機能のみ)
public function actionCreate()
{
$session = new CHttpSession;
$session->open();
if(isset($_SESSION['mySession']))
{
$data = $_SESSION['mySession'];
if ($data)
{
if(!isset($_GET['ajax']))
{
$dataprov = new CActiveDataProvider("Country");
$this->render('create',
array(
'dat'=>$data,
'dataprov'=>$dataprov
)
);
}
}
}
}
public function actionGetCities()
{
if(isset($_POST['id']))
{
$cityId = $_POST['id'];
$dataProvider = $this->getCitiesFromDb($cityId);
echo $this->renderPartial('_detail',array('dataprov'=> $dataProvider),true,true);
}
}
public function getCitiesFromDb($cityId)
{
$criteria = new CDbCriteria;
$criteria->select = "*";
$criteria->condition = "b4_Country_id = " . $cityId;
$dataProv = new CActiveDataProvider('City',
array('criteria'=>$criteria));
return $dataProv;
}
これが正しい方法でない場合は、お知らせください