Example #1
0
 /**
  * @param \yii\db\ActiveRecord $model
  * @param string $defaultView
  * @return string
  */
 public function computeViewFile($model, $defaultView = '')
 {
     if (Yii::$app->response->view_id !== null) {
         $view = \app\models\View::getViewById(Yii::$app->response->view_id);
         if (!is_null($view)) {
             if ($view === 'default') {
                 $view = ViewObject::getViewByModel($model->parent);
             }
             return $view === null ? $defaultView : $view;
         }
     }
     if (is_null($model)) {
         return $defaultView;
     }
     do {
         $view = ViewObject::getViewByModel($model);
         if (is_null($view) || $view == 'default') {
             $view = ViewObject::getViewByModel($model->parent, true);
         }
         if (!is_null($view)) {
             return $view === 'default' ? $defaultView : $view;
         }
         $model = $model->parent;
     } while (!is_null($model));
     return $defaultView;
 }
Example #2
0
 /**
  * Поиск представления по модели
  *
  * @param Object $model
  * @return string|null Возвращает имя файла или null, если ничего не найдено
  */
 public static function getViewByModel($model = null)
 {
     if (null === $model || !is_object($model)) {
         return null;
     }
     if (null === ($object = Object::getForClass($model::className()))) {
         return null;
     }
     $cacheKey = "View:Object:ModelId" . $object->id . ":" . $model->id;
     $viewObject = Yii::$app->cache->get($cacheKey);
     if ($viewObject === false) {
         $viewObject = static::find()->where(['object_id' => $object->id, 'object_model_id' => $model->id])->one();
     }
     if ($viewObject !== null) {
         Yii::$app->cache->set($cacheKey, $viewObject, 86400, new TagDependency(['tags' => [\devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($viewObject, $viewObject->id), \devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($object, $object->id), \devgroup\TagDependencyHelper\ActiveRecordHelper::getObjectTag($model, $model->id)]]));
         return View::getViewById($viewObject->view_id);
     } else {
         return null;
     }
 }