Yii cgridview de Search formunu özelleştirme

Yii admin viewlerinde otomatik olarak arama yapabilmemiz için bir kısım sunmakta. Fakat ilişki tablo yapılarında id ye göre arama yapmak durumunda kalıyoruz. Örneğin

markalar                    cihazlar

id    deger                 id   marka  adı

2      hp                       1        2         yazıcı

Şeklinde bir tablo yapısında cihazlar arayüzünde arama yaparken markaya göre filtreleme için 2 değerini kullanmamız gerekecek HP bize herhangi bir sonuç döndürmeyecektir. Bunu düzenlemek için crudla oluşturduğumuz durumda aşağıdakine benzer bir arama yapısı varsayılan olarak gelecektir.

view/aaa/admin.php

<?php
Yii::app()->clientScript->registerScript(‘search’, ”
$(‘.search-button’).click(function(){
$(‘.search-form’).toggle();
return false;
});
$(‘.search-form form’).submit(function(){
$(‘#envanter-cihazbilgi-grid’).yiiGridView(‘update’, {
data: $(this).serialize()
});
return false;
});
“);
?>
<h1>Bilişim Cihazları Yönetimi</h1>
<?php echo CHtml::link(‘Gelişmiş Arama’,’#’,array(‘class’=>’search-button’)); ?>
<div class=”search-form” style=”display:none”>
<?php $this->renderPartial(‘_search’,array(
‘model’=>$model,
)); ?>
</div><!– search-form –>

view/aaa/_search.php

<script type=”text/javascript” src=”/js/select2/select2.js”></script>
<script type=”text/javascript” src=”/js/select2/select2.min.js”></script>
<link rel=”stylesheet” type=”text/css” href=”/js/select2/select2.css”>
<script type=”text/javascript”>
$(document).ready(function() {
$(“#EnvanterCihazbilgi_markalarid”).select2({placeholder:’Marka Seçiniz..’,});
$(“#EnvanterCihazbilgi_okullarid”).select2({placeholder:’Okul Seçiniz..’,});
});
</script>
<div class=”wide form”>
<?php $form=$this->beginWidget(‘CActiveForm’, array(
‘action’=>Yii::app()->createUrl($this->route),
‘method’=>’get’,
)); ?>
<div class=”row”>
<?php echo $form->label($model,’markalarid’); ?>
<?php echo $form->dropDownList($model,’markalarid’, CHtml::listData(EnvanterMarkalar::model()->findAll(array()), ‘id’, ‘marka’),array(‘prompt’=>’Bir marka seçiniz.’));?>
<?php // echo $form->textField($model,’markalarid’); ?>
</div>
<div class=”row”>
<?php echo $form->label($model,’okullarid’); ?>
<?php echo $form->dropDownList($model,’okullarid’, CHtml::listData(EnvanterOkullar::model()->findAll(array()), ‘id’, ‘bina’),array(‘prompt’=>’Bir okul seçiniz.’));?>
<?php //echo $form->textField($model,’okullarid’); ?>
</div>
<div class=”row”>
<?php echo $form->label($model,’ip’); ?>
<?php echo $form->textField($model,’ip’,array(‘size’=>60,’maxlength’=>255)); ?>
</div>
<div class=”row buttons”>
<?php echo CHtml::submitButton(‘Search’); ?>
</div>
<?php $this->endWidget(); ?>
</div><!– search-form –>

Yukarıdaki _search.php kodlarında renkli yazılan yereleri incelediğimizde yukarıdaki kısım dropdownlist in select2 özelliği kazanması için eklenmiş ve alttaki kısımlarda markalarid değeri yerine dropdownlistten marka adına göre seçebilmemizi sağlamak için eklenmiştir. Bunlardan sonra id yazmak yerine dropdownlistten markayı seçmemiz arama yapmamız için yeterli olacaktır.

Ekran Alıntısı2 Ekran Alıntısı1 Ekran Alıntısı