|
1 | 1 | <?php
|
2 | 2 | namespace fecshop\app\appfront\modules;
|
3 | 3 | use Yii;
|
| 4 | +use fec\helpers\CConfig; |
4 | 5 | use fec\controllers\FecController;
|
5 | 6 | use yii\base\InvalidValueException;
|
6 | 7 | class AppfrontController extends FecController
|
7 | 8 | {
|
8 |
| - protected $_currentLayoutFile = 'main.php'; |
9 |
| - protected $_themeDir = '@fecshop/app/appfront/theme/base/default'; |
10 | 9 |
|
11 |
| - public function beforeAction($action){ |
12 |
| - if(parent::beforeAction($action)){ |
13 |
| - Yii::$app->page->theme->fecshopThemeDir = Yii::getAlias($this->_themeDir); |
14 |
| - return true; |
| 10 | + /** |
| 11 | + * init theme component property : $fecshopThemeDir and $layoutFile |
| 12 | + * $fecshopThemeDir is appfront base theme directory. |
| 13 | + * layoutFile is current layout relative path. |
| 14 | + */ |
| 15 | + public function init(){ |
| 16 | + if(!Yii::$app->page->theme->fecshopThemeDir){ |
| 17 | + Yii::$app->page->theme->fecshopThemeDir = Yii::getAlias(CConfig::param('appfrontBaseTheme')); |
| 18 | + } |
| 19 | + if(!Yii::$app->page->theme->layoutFile){ |
| 20 | + Yii::$app->page->theme->layoutFile = CConfig::param('appfrontBaseLayoutName'); |
15 | 21 | }
|
16 | 22 | }
|
17 | 23 |
|
18 |
| - public function render($view, $params = []){ |
19 |
| - $viewFile = ''; |
20 |
| - $relativeFile = $this->module->id.'/'.$this->id.'/'.$view.'.php'; |
21 |
| - $absoluteDir = Yii::$app->page->theme->getThemeDirArr(); |
22 |
| - foreach($absoluteDir as $dir){ |
23 |
| - if($dir){ |
24 |
| - $file = $dir.'/'.$relativeFile; |
25 |
| - if(file_exists($file)){ |
26 |
| - $viewFile = $file; |
27 |
| - break; |
28 |
| - } |
29 |
| - } |
30 |
| - } |
31 |
| - if(!$viewFile){ |
32 |
| - $notExistFile = []; |
33 |
| - foreach($absoluteDir as $dir){ |
34 |
| - if($dir){ |
35 |
| - $file = $dir.'/'.$relativeFile; |
36 |
| - $notExistFile[] = $file; |
37 |
| - } |
38 |
| - } |
39 |
| - throw new InvalidValueException('view file is not exist in'.implode(',',$notExistFile)); |
40 |
| - } |
41 |
| - $content = $this->getView()->renderFile($viewFile, $params, $this); |
| 24 | + /** |
| 25 | + * @property $view|String , (only) view file name ,by this module id, this controller id , generate view relative path. |
| 26 | + * @property $params|Array, |
| 27 | + * 1.get exist view file from mutil theme by theme protity. |
| 28 | + * 2.get content by yii view compontent function renderFile() , |
| 29 | + */ |
| 30 | + public function render($view, $params = []){ |
| 31 | + $viewFile = Yii::$app->page->theme->getViewFile($view); |
| 32 | + $content = Yii::$app->view->renderFile($viewFile, $params, $this); |
42 | 33 | return $this->renderContent($content);
|
43 | 34 | }
|
44 | 35 |
|
45 |
| - |
| 36 | + /** |
| 37 | + * Get current layoutFile absolute path from mutil theme dir by protity |
| 38 | + */ |
46 | 39 | public function findLayoutFile($view){
|
47 | 40 | $layoutFile = '';
|
48 |
| - $relativeFile = '/layouts/'.$this->_currentLayoutFile; |
| 41 | + $relativeFile = 'layouts/'.Yii::$app->page->theme->layoutFile; |
49 | 42 | $absoluteDir = Yii::$app->page->theme->getThemeDirArr();
|
50 | 43 | foreach($absoluteDir as $dir){
|
51 | 44 | if($dir){
|
52 |
| - $file = $dir.$relativeFile; |
| 45 | + $file = $dir.'/'.$relativeFile; |
53 | 46 | if(file_exists($file)){
|
54 | 47 | $layoutFile = $file;
|
55 | 48 | return $layoutFile;
|
|
0 commit comments