protected function getModels() { $models = array(); $files = scandir(Yii::getPathOfAlias('application.models')); foreach ($files as $file) { if ($file[0] !== '.' && CFileHelper::getExtension($file) === 'php') { $fileClassName = substr($file, 0, strpos($file, '.')); if (class_exists($fileClassName) && is_subclass_of($fileClassName, 'GiiyActiveRecord')) { $fileClass = new ReflectionClass($fileClassName); if (!$fileClass->isAbstract() && !is_array(GiiyActiveRecord::model($fileClassName)->getPrimaryKey())) { $models[] = $fileClassName; } } } } foreach (Yii::app()->getModules() as $module => $moduleConf) { if (Yii::getPathOfAlias($module . '.models')) { $files = scandir(Yii::getPathOfAlias($module . '.models')); foreach ($files as $file) { if ($file[0] !== '.' && CFileHelper::getExtension($file) === 'php') { $fileClassName = substr($file, 0, strpos($file, '.')); if (class_exists($fileClassName) && is_subclass_of($fileClassName, 'GiiyActiveRecord')) { $fileClass = new ReflectionClass($fileClassName); if (!$fileClass->isAbstract() && !is_array(GiiyActiveRecord::model($fileClassName)->getPrimaryKey())) { $models[] = $fileClassName; } } } } } } return $models; }
public function relationForm($relationName) { $relations = $this->model->relations(); if (!isset($relations[$relationName])) { throw new CException('whrong relation attribute name'); } $relation = $relations[$relationName]; $relationModel = $relation[1]; $isMultiple = $relation[0] == CActiveRecord::HAS_MANY || $relation[0] == CActiveRecord::MANY_MANY; $isFileBased = GiiyActiveRecord::model($relationModel) instanceof IFileBased; if ($this->fromModel == $relationModel) { return ''; } $value = join(',', $this->model->getRelationIds($relationName)); $widget = $this->createWidget('TbSelect2', array('form' => $this, 'model' => $this->model, 'attribute' => $relationName, 'htmlOptions' => array('value' => $value, 'relationName' => $relationName, 'isMultiple' => $isMultiple, 'label' => '<a name="' . $relationName . '"></a>' . $this->model->getAttributeLabel($relationName) . ' <button name="add" class="btn btn-success btn-mini" onclick="addForm($(this).parent().next(),\'' . $relationModel . '\');return false;" >+</button>'), 'asDropDownList' => false, 'options' => array('width' => '755px', 'multiple' => true, 'placeholder' => 'Выберите ' . $this->model->getAttributeLabel($relationName), 'minimumInputLength' => 1, 'ajax' => array('url' => '/' . strtolower($relationModel), 'dataType' => 'json', 'type' => 'POST', 'data' => 'js: function(term,page) { return {q: term}; }', 'results' => 'js: function(data,page) { return {results: data}; }'), 'formatSelection' => $isFileBased ? 'js:formatSelectionUpload' : 'js:formatSelectionForm', 'formatResult' => 'js:formatResult', 'initSelection' => 'js:initSelection'))); if ($isFileBased) { Yii::app()->bootstrap->registerAssetJs('fileupload/jquery.fileupload.js'); } Yii::app()->clientScript->registerScript('initModelData', ' var modelData = Array(); ', CClientScript::POS_HEAD); Yii::app()->clientScript->registerScript($relationName . 'ModelData', ' modelData["' . $relationName . '"] = ' . json_encode($this->model->getRelationNames($relationName, true)) . '; ', CClientScript::POS_HEAD); Yii::app()->clientScript->registerScript('ModelData', ' modelData["_modelName"] = "' . get_class($this->model) . '"; ', CClientScript::POS_HEAD); return $this->renderWidget($widget); }
<? /** * The following variables are available in this template: * - $this: the BootCrudCode object */ ?> <? $model = GiiyActiveRecord::model($this->modelClass); echo "<?\n"; $label=$this->pluralize($this->class2name($this->modelClass)); echo "\$this->breadcrumbs=array( '$label'=>array('index'), 'Manage', );\n"; ?> $this->menu=array( array('label'=>'List <?php echo $this->modelClass; ?> ','url'=>array('index')), array('label'=>'Create <?php echo $this->modelClass; ?> ','url'=>array('create')), ); Yii::app()->clientScript->registerScript('search', " $('.search-button').click(function(){ $('.search-form').toggle(); return false;
public static function model($className = __CLASS__) { return parent::model($className); }
protected function _prepareModel(GiiyActiveRecord $model) { $values = $_POST[get_class($model)]; foreach($values as $name => $value) { if ( isset($model->relations()[$name]) && ($model->relations()[$name][0] == CActiveRecord::HAS_MANY || $model->relations()[$name][0] == CActiveRecord::MANY_MANY ) ) { $ids = $value?$value:array(); $pks = is_array($ids)?$ids:explode(',',$ids); if (!is_array(GiiyActiveRecord::model($model->relations()[$name][1])->getTableSchema()->primaryKey)) { $models = array(); foreach (GiiyActiveRecord::model($model->relations()[$name][1])->findAllByPk($pks) as $res) $models[$res->getPrimaryKey()] = $res; $sortedModels = array(); foreach ($pks as $pk) $sortedModels[] = $models[$pk]; $model->$name = $sortedModels; } else $model->$name = $pks; } elseif (isset($model->relations()[$name])) { $relModel = CActiveRecord::model($model->relations()[$name][1]) ->findByPk($value); $model->$name = $relModel?$relModel:null; } elseif ($model->hasAttribute($name) || isset($model->$name) || method_exists($model,'set'.ucfirst($name))) { $model->$name = $value; } } return $model; }