[ASK] newbie mohon dibantu, menampilkan data berdasarkan abjad

Halo agan2, mohon dibantu. saya baru ni belajar Yii. Mau coba menampilkan data berdasarkan abjad. A-Z, 0-9 begitu.

misalnya : hxxp://localhost/font/index.php?r=font/list&q=a. Gimana ya gan?? mohon dibantu ya… trima kasih ^^

Model :




public function listing()

	{

		$count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM font WHERE fname LIKE "%'.$_GET['q'].'%"')->queryScalar();

		$sql='SELECT * FROM font WHERE fname LIKE "%'.$_GET['q'].'%"';

                $dataProvider1=new CSqlDataProvider($sql,array(

                                   'totalItemCount'=>$count,

			           'keyField' => 'fid',

                                   'pagination'=>array(

                                   'pageSize'=>5,

                ),

                ));

		return $dataProvider1;

	}



Controller :




public function actionList()

	{

		$dataProvider1=Font::model()->listing();

		$this->render('list',array('dataProvider'=>$dataProvider1,));

	}



View :




foreach($dataProvider->getData() as $i=>$ii)

{

?>

<div class="padbox">

        <h3>

        <?php echo CHtml::link(CHtml::encode($ii['fname']), array('view', 'id'=>$ii['fid'])); ?>

        </h3>

        <div class="font-thumb-a">

        <?php echo CHtml::link(CHtml::image(('../'.Yii::app()->request->baseUrl.'/images/'.$ii['ffilename'].'.png')), array('view', 'id'=>$ii['fid'])); ?>

        </div>

        <div class="font-meta">Uploaded by: <?php //echo CHtml::encode($data->fuplname); ?> | 

        Created by: <?php echo// CHtml::encode($data->fcrtname); ?> | 

        @ Dec 29, 2011 | 2 Hits</div>

</div>

<?php

}

?>



Kira-kira ada kekeliruan di mana ya gan? mohon dibantu ya… Terima kasih sebelumnya ^^

coba query sql nya ditambahkan ORDER BY field_buat_indek ASC

btw kenapa ndak pakai AR bos, untuk ngambil datanya…

kalau pake AR kan lebih enak tuh…

dan di viewnya juga itu kan datanya udah dataprovider, lebih bagus lagi pakai widget CListView

http://www.yiiframework.com/doc/api/1.1/CListView

kira2 jadinya begini:

Model




public function listing()

{

    $criteria = new CDbCriteria;

    $criteria->addSearchCondition('fname', $_GET['q']);

    $criteria->order = 'fname';


    return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

               ));


}




lalu di viewnya manfaatkan CListView, karena nanti UI paginasinya juga kan sudah built in dari widgetnya, lebih enak mengaturnya…

View:




$this->widget('zii.widgets.CListView', array(

    'dataProvider'=>$dataProvider,

    'itemView'=>'_item',   // file render partial untuk tiap item row nya

    'sortableAttributes'=>array('fname',),

));




lalu untuk _item buatkan file _item.php

_item.php




<div class="padbox">

        <h3>

        <?php echo CHtml::link(CHtml::encode($data->fname), array('view', 'id'=>$data->fid)); ?>

        </h3>

        <div class="font-thumb-a">

        <?php echo CHtml::link(CHtml::image(('../'.Yii::app()->request->baseUrl.'/images/'.$data->ffilename.'.png')), array('view', 'id'=>$data->fid)); ?>

        </div>

        <div class="font-meta">Uploaded by: <?php //echo CHtml::encode($data->fuplname); ?> | 

        Created by: <?php echo// CHtml::encode($data->fcrtname); ?> | 

        @ Dec 29, 2011 | 2 Hits</div>

</div>



bro Xtremagix, trims banget untuk penjelasannya…:) udah bisa.Akhirnya saya pake beginian bro :

Controller :




public function actionIndex()

	{

		

		if (isset($_GET['q']))	{

			if ($_GET['q'] == "9") {

				$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM font WHERE fname RLIKE "^[0-9]"')->queryScalar();

				$sql='SELECT * FROM font WHERE fname RLIKE "^[0-9]"';	

			}

			else {

				//Select * From Table Where (Fields not like '%[0-9]%') and (Fields not like '%[a-z]%')

			$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM font WHERE fname LIKE "'.$_GET['q'].'%"')->queryScalar();

			$sql='SELECT * FROM font WHERE fname LIKE "'.$_GET['q'].'%"';	

				

			}

			

			

			$dataProvider=new CSqlDataProvider($sql,array(

			'keyField' => 'fid',

			'totalItemCount'=>$count,

			'pagination'=>array('pageSize'=>5),

			));

			$this->render('index',array(

				'dataProvider'=>$dataProvider,

			));

		}

		else {

			$dataProvider=new CActiveDataProvider('Font');

			$this->render('index',array(

			'dataProvider'=>$dataProvider,

			));

		}

		

		

	}



Trus, viewnya :




<strong><?php echo CHtml::link(CHtml::encode('A'), array('font/index', 'q'=>'a')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('B'), array('font/index', 'q'=>'b')); ?></strong> &nbsp; 

      <strong><?php echo CHtml::link(CHtml::encode('C'), array('font/index', 'q'=>'c')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('D'), array('font/index', 'q'=>'d')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('E'), array('font/index', 'q'=>'e')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('F'), array('font/index', 'q'=>'f')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('G'), array('font/index', 'q'=>'g')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('H'), array('font/index', 'q'=>'h')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('I'), array('font/index', 'q'=>'i')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('J'), array('font/index', 'q'=>'j')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('K'), array('font/index', 'q'=>'k')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('L'), array('font/index', 'q'=>'l')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('M'), array('font/index', 'q'=>'m')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('N'), array('font/index', 'q'=>'n')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('O'), array('font/index', 'q'=>'o')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('P'), array('font/index', 'q'=>'p')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('Q'), array('font/index', 'q'=>'q')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('R'), array('font/index', 'q'=>'r')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('S'), array('font/index', 'q'=>'s')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('T'), array('font/index', 'q'=>'t')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('U'), array('font/index', 'q'=>'u')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('V'), array('font/index', 'q'=>'v')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('W'), array('font/index', 'q'=>'w')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('X'), array('font/index', 'q'=>'x')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('Y'), array('font/index', 'q'=>'y')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('Z'), array('font/index', 'q'=>'z')); ?></strong> &nbsp;

      <strong><?php echo CHtml::link(CHtml::encode('0-9'), array('font/index', 'q'=>'9')); ?></strong> &nbsp;



Udah… :) thx ya brooo… ^_^

tapi cara yang kayak gini ga efektif, terlalu panjang kodenya, mungkin bisa dibuat yang lebih efisien lagi kayaknya…!