Yii копилка советов
Просто набор советов, чтобы подглядеть
1.Создайте абстрактный класс и от него наследуйте свои модели. При новой генерации код не будет потерян
\protected\components\PgActiveRecord.php
2. Используйте повторяющийся код
\protected\modules\admin\models\Department.php
\views\layouts\myrender.php
4. Простой селект одного элемента
6.Получение $_GET
Yii::app()->request->getQuery('template')
7. Последний id по sequence
$id_analiz = Yii::app()->getComponent('db')->getLastInsertID('a_analiz_create_id_seq1');
1.Создайте абстрактный класс и от него наследуйте свои модели. При новой генерации код не будет потерян
\protected\components\PgActiveRecord.php
<?php /** * Class PgActiveRecord * * Базовый класс ActiveRecord для таблиц, хранящихся в PostgreSQL * Вычисляет идентификаторы сущностей после сохранения */ class PgActiveRecord extends CActiveRecord { protected $_sequence = null; public function sequence() { return $this->_sequence; } protected function afterSave() { // если основной ключ не составной // и основной ключ ещё не определён // и в этом классе указана последовательность для вычисления основного ключа if (!is_array($this->primaryKey) && is_null($this->primaryKey) && $this->sequence()) { // вычислить название компоненты для коннекта к базе данных $dbComponent = 'db'; $tableName = $this->tableName(); if (false!==strpos($tableName, '.')) { list($dbComponent, ) = explode('.', $tableName); } // извлечь последнее значение последовательности $this->primaryKey = Yii::app()->getComponent($dbComponent)->getLastInsertID($this->sequence()); } return parent::afterSave(); } }
2. Используйте повторяющийся код
\protected\modules\admin\models\Department.php
public static function recursDep($id) { $criteria = new CDbCriteria; /*Рекурсивно выбираем потомков*/ $connection = Yii::app()->db; $sql = " WITH RECURSIVE temp1 ( id,id_parent,name,PATH, LEVEL, myname , type, hidden) AS ( SELECT T1.id,T1.id_parent, T1.name, CAST (T1.id AS VARCHAR (50)) as PATH, 1 , CAST (T1.name AS VARCHAR (255)) as myname, t1.type as type, t1.hidden as hidden FROM vgok_site.t_department T1 WHERE T1.id = $id and t1.hidden = 0 union select T2.id, T2.id_parent, T2.name, CAST ( temp1.PATH ||'->'|| T2.id AS VARCHAR(50)) ,LEVEL + 1 , CAST ((repeat(' _ ', LEVEL+1)||T2.name) AS VARCHAR(255)), t2.type, t2.hidden FROM vgok_site.t_department T2 INNER JOIN temp1 ON( temp1.id= T2.id_parent and t2.hidden = 0)) select * from temp1 ORDER BY PATH desc LIMIT 100 "; $dataReader = $connection->createCommand($sql)->query(); $rows = $dataReader->readAll(); for($i = 0, $cnt = count($rows); $i < $cnt; $i++) //формируем столбцы { if ($rows[$i]['id'] != $id) $opts[$rows[$i]['id']] = $rows[$i]['name']; } return $opts; }\protected\modules\analiz\views\recalculation\admin.php
array(
'name' => 'level_id',
'type' => 'raw',
'value' => '($data->level_id) ? $data->lvl->name : ""',
'class' => 'bootstrap.widgets.TbEditableColumn',
'headerHtmlOptions' => array('style' => 'text-align:center'),
'editable' => array(
'type' => 'select',
'url' => $this->createUrl('editable'),
'source' => Department::recursDep(5),
'params' => array('YII_CSRF_TOKEN' => Yii::app()->request->csrfToken),
)
),
3. Можно изменить шаблон для отображения страницы без шапки и футера\views\layouts\myrender.php
<?php $this->beginContent('//layouts/mymain'); ?> <div class="span-23"> <div id="content"> <?php echo $content; ?> </div><!-- content --> </div> <?php $this->endContent(); ?>
4. Простой селект одного элемента
$max = Yii::app()->db->createCommand() ->select('max(id) as max') ->from('a_analiz_create') ->queryScalar();Нескольких элементов
$znS = Yii::app()->db->createCommand() ->select('*') ->from('vgok_site.a_constant') ->where("level_id = $id") ->queryAll();
5. Ajax button
<div class="form-actions"> <?php $this->widget('bootstrap.widgets.TbButton', array( 'buttonType' => 'button', 'icon' => 'fa fa-print', 'type' => 'primary', 'label' => 'Экспорт', 'id' => 'btn', 'htmlOptions' => array('onclick' => 'send();', 'disabled' => 'disabled'), )); ?> </div> <?php $this->endWidget(); ?> <script type="text/javascript"> function send() { var data = $("#plan-form").serialize(); $.ajax({ type: 'POST', url: '<?php echo Yii::app()->createAbsoluteUrl("product/tagData/req"); ?>', data: data, success: function (data) { $('#excel').html(data); // alert(data); }, error: function (data) { // if error occured alert("Error occured.please try again"); alert(data); }, dataType: 'html' }); } </script>
6.Получение $_GET
Yii::app()->request->getQuery('template')
7. Последний id по sequence
$id_analiz = Yii::app()->getComponent('db')->getLastInsertID('a_analiz_create_id_seq1');
Комментарии
Отправить комментарий