| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 | <?php/** * FecShop file. * * @link http://www.fecshop.com/ * @copyright Copyright (c) 2016 FecShop Software LLC * @license http://www.fecshop.com/license/ */namespace fec\helpers;use Yii;use yii\base\View;use yii\base\InvalidConfigException;/** * @author Terry Zhao <2358269014@qq.com> * @since 1.0 */class CView{		# 功能块:	# 本功能的作用是通过一个类文件,和一个view 文件,生成一个html块,而且在这个html中还可以嵌套其他的块	# 这样设计的好处:譬如在前端,我们在很多url中都会有一些公用的侧栏块,我们很希望我们的块可以通过配置的方式很容易的加入到侧栏	# 譬如电商网站侧栏的:客户的浏览记录,我们在多个页面都想加入这个功能,我们就可以很方便的做加入。		# 默认的方法,功能块的提供数据的默认方法。可以在配置中配置method方法自定义。	const DATA_METHOD = 'getLastData';		/*  你可以在view 文件中通过下面的方式使用		<?php			use fec\helpers\CView;			$config = [				# 必填				'class' => 'fec\block\TestMenu',				'view'  => '@fec/views/testmenu/index.php',				# 下面为选填				'method'=> 'getLastData',				'terry1'=> 'My1',				'terry2'=> 'My2',			];			echo CView::getChildHtml($config)			?>	*/    public static function getChildHtml($config)    {		if( !isset($config['view']) || empty($config['view'])		){			throw new InvalidConfigException('view and class must exist in array config!');		}		if( !isset($config['class']) || empty($config['class']))			return Yii::$app->view->render($config['view'], []);		$method = self::DATA_METHOD;		if(isset($config['method']) && !empty($config['method'])){			$method = $config['method'];			unset($config['method']);		}		$view = $config['view'];		unset($config['view']);		$ob = Yii::createObject($config);		$params = $ob->$method();		return Yii::$app->view->render($view, $params);		    }	# 通过配置	/*	1.add config param to modules params or application params.	params.php	[		'params' => [			'block' =>[				'menu' =>[					# 必填					'class' => 'fec\block\TestMenu',					'view'  => '@fec/views/testmenu/index.php',					# 下面为选填					'method'=> 'getLastData',					'terry1'=> 'My1',					'terry2'=> 'My2',				],			]		]	]	2.	use fec\helpers\CView;	CView::getConfigChildHtml('menu');	*/	public static function getConfigChildHtml($configKey){		$config = [];		# get config from module param 		if($module = Yii::$app->controller->module){			$module_config = CModule::param("block");			if(isset($module_config[$configKey])){				$config = $module_config[$configKey];			}		}		# if module config param is empty or not exist,		# get config from application		if(empty($config)){			$app_config = CConfig::param("block");			if(isset($app_config[$configKey])){				$config = $app_config[$configKey];			}		}				if(!isset($config['view']) || empty($config['view'])		){			throw new InvalidConfigException('view and class must exist in array config!');		}else{			return self::getChildHtml($config);		}			}} 
 |