рдпрд╣ рдкрдж рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд░реБрдЪрд┐рдХрд░ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╛рдИрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдкреНрд░рд╛рдердорд┐рдХ рд╕реЗ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрддрд░ рддрдХ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдЬреЛ рд╣реЙрд▓реАрд╡реЗрдЯ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдлреНрд░реЗрдо рдХреВрд▓рд░ рд╣реИред
рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдВ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ CGridView рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд▓рдЪреАрд▓рд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ, рдЖрдк рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд┐рд▓реНрдЯрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, CJuiDatePicker рдЬреИрд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдгрдкреЛрд╕реНрдЯ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ Yii рдлреНрд░реЗрдорд╡рд░реНрдХ 1.1.12 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ MySQL рдХреЛ DBMS рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рд╣реЛрдВрдЧреЗред
рдЕрдЪреНрдЫрд╛, рдЪрд▓реЛ рд╢реБрд░реВ рдХрд░реЗрдВ?рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмреНрд▓реЙрдЧ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреЛрд╕реНрдЯ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рдЗрди рдкреЛрд╕реНрдЯреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ, рдкреЛрд╕реНрдЯреЛрдВ рдкрд░ рдЯреИрдЧ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд╕рдмрд╕реЗ рдЖрдо рдкреНрд▓реЗрдЯ рд╣реЛрдЧреАред
CREATE TABLE IF NOT EXISTS `tbl_comment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` text COLLATE utf8_unicode_ci NOT NULL, `status` int(11) NOT NULL, `create_time` int(11) DEFAULT NULL, `author` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `url` varchar(128) COLLATE utf8_unicode_ci DEFAULT NULL, `post_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `FK_comment_post` (`post_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; CREATE TABLE IF NOT EXISTS `tbl_post` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `content` text COLLATE utf8_unicode_ci NOT NULL, `status` int(11) NOT NULL, `create_time` datetime NOT NULL, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `author_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `FK_post_author` (`author_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1; CREATE TABLE IF NOT EXISTS `tbl_posts_tags` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_post` int(11) NOT NULL, `id_tag` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `tbl_tag` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `frequency` int(11) DEFAULT '1', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `tbl_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `first_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `last_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `father_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `password` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `salt` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `email` varchar(128) COLLATE utf8_unicode_ci NOT NULL, `profile` text COLLATE utf8_unicode_ci, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ;
рд╣рдо рдкреЛрд╕реНрдЯ рд▓реЗрдмрд▓ рдкрд░ CgridView рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореБрдЦреНрдп рдЗрдХрд╛рдИ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЗрдХрд╛рдЗрдпрд╛рдВ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВред
рдкреЛрд╕реНрдЯ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛
public function relations(){ return array(
рд╣рдо рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд▓рдЧрднрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ
public function actionAdmin(){ $model=new Post('search'); if(isset($_GET['Post'])){ $model->setAttributes($_GET['Post'], false); $model->id_tag = isset($_GET['Post']['id_tag']) ? $_GET['Post']['id_tag'] : ''; } $this->render('admin',array( 'model'=>$model, )); }
рдЯреИрдЧ рдореЙрдбрд▓ рдореЗрдВ, рд╣рдо рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдПрдХ рдкреНрд▓реЗрдЯ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
public function getForFilter(){ return CHtml::listData( self::model()->findAll(array( 'select' => array('id', 'name') )), 'id', 'name' ); }
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдореЗрдВ рдкреВрд░реНрдг рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ
public function getFullFio(){ return $this->last_name.' '.$this->first_name.' '.$this->father_name; }
рд╣рдореЗрдВ рд▓реЗрдЦ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдЯреИрдЧ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
public function getTagsToString(){ $t = CHtml::listData( $this->tags, 'id', 'name' ); return implode(',', $t); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдХреЗрд╡рд▓ рдкреЛрд╕реНрдЯ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ CGridView рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реИред
MANY_MANY рд░рд┐рд▓реЗрд╢рдирд▓ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреЛрд╕реНрдЯ рдореЙрдбрд▓ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ
public $id_tag = '';
рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреЛрд╕реНрдЯ :: рдЦреЛрдЬ () рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ -
public function search($defaultCriteria = null){ $criteria = $defaultCriteria != null ? $defaultCriteria : new CDbCriteria;
рд▓реЗрдмрд▓ рдореЗрдВ рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдкрдВрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдЬрд╛рджреБрдИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдкреЛрд╕реНрдЯ :: getTagsToString ()
... array( 'name'=>'id_tag', 'value'=>'$data->tagsToString', 'filter'=>Tag::model()->forFilter, ), ...
рдЗрд╕реА рддрд░рд╣, рд╣рдо рдкреВрд░реНрдг рдирд╛рдо рдХреА рдореИрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рдж
... array( 'name'=>'author_id', 'value'=>'isset($data->author) ? $data->author->fullFio : ""' ), ...
рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк, рд╣рдо рдлрд┐рд▓реНрдЯрд░ рдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ CJuiDatePicker рд╡рд┐рдЬреЗрдЯ рдЬрдХрдбрд╝рдирд╛
рдРрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдХреЙрд▓рдо рдЬреЛрдбрд╝реЗрдВред
... array( 'name' => 'create_time', 'type' => 'raw', 'htmlOptions' => array('align' => 'center', 'style' => 'width: 123px;'), 'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', array( 'model' => $model, 'id' => 'create_time', 'attribute' => 'create_time', 'htmlOptions' => array('style' => 'width: 80px;'), 'options' => array( 'dateFormat' => 'yy-mm-dd', 'changeYear' => true ), ), true) ), ...
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреА рдкреНрд▓реЗрдЯ ajaxUpdate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рддреЛ рдЦрдЬреВрд░ рдХреЗ рд╕рд╛рде рдлрд╝рд┐рд▓реНрдЯрд░ ajax рдХреЗ рд╕рд╛рде рдкреНрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ afterAjaxUpdate рдИрд╡реЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХреИрд▓реЗрдВрдбрд░ рдХреЛ рдкреБрди: рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
... 'afterAjaxUpdate' => 'function(){ jQuery("#create_date").datepicker({ dateFormat: "yy-mm-dd", changeYear:true }); }', ...
рдЯреИрдмрд▓реЗрдЯ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рднреА рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рд╣рдореЗрдВ рдХрд┐рд╕реА рдмрдЯрди рдХреЗ рд╕рд╛рде рдЫрд╡рд┐ рдХреЛ рдмрджрд▓рдиреЗ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдорд╛рдирдХ рдмрдЯрди рдХреЗ рд▓рд┐рдП рд╣рдо рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ -
{button_name} ButtonImageUrl
{рдмрдЯрди_рдирд╛рдо} рдмрдЯрдирд▓реЗрдм
{рдмрдЯрди_рдирд╛рдо} рдмрдЯрди
{button_name} ButtonUrl
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдЕрджреНрдпрддрди рдмрдЯрди рдХреЗ рд╕рд╛рде рдмрдЯрди рдЫрд╡рд┐ рдмрджрд▓реЗрдВ
... array( 'class'=>'CButtonColumn', 'updateButtonImageUrl' => Yii::app()->baseUrl.'/images/configure.gif' ), ...
рдпрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдЯрди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
... array( 'class' => 'ext.myButtonColumn', 'template'=> '{on} {off} ', 'buttons' => array( 'off' => array( 'label' => '', 'imageUrl' => Yii::app()->baseUrl.'/images/cancel.gif', 'visible' => '$data->active == 0', 'url' => 'Yii::app()->createAbsoluteUrl("post/on")', ), 'on' => array( 'label' => '', 'imageUrl' => Yii::app()->baseUrl.'/images/flag.gif', 'visible' => '$data->active == 1', 'url' => 'Yii::app()->createAbsoluteUrl("post/off")', ), ), ) ...
рдЕрдВрдд рдореЗрдВ
рдореИрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдЖрдкрдХреЗ CGridView рдХреЗ рдЙрдиреНрдирдпрди рдореЗрдВ рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВрдЧреЗ
рдЖрдкрдХреЛ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирджрдВрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд╛рдирдХ рджреГрд╢реНрдп рдЫрд┐рдкрд╛рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмрдЯрди рд╣рдЯрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рд╡рд░реНрдгрдорд╛рд▓рд╛ рдЕрдВрдХрди
рдЯреИрдмрд▓реЗрдЯ рдХреЛ рдЯреНрд░реА рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛
рд╕реНрд░реЛрдд , рдмреЗрд╕ рдбрдВрдк рдЕрдВрджрд░ред