讨论一下描述有点困难的问题

ziluopao 发布于 2016/03/27 10:41
阅读 198
收藏 0
PHP

这是一个框架,其中在TPL(模板驱动类)中,有一个方法是向模板抛出变量


/**
	 * 抛出变量
	 *
	 * @param mixed $output
	 * @param  void
	 */
	public static function output($output,$input=''){
		self::getInstance();
		
		self::$output_value[$output] = $input;
               
                
	}    



/**
	 * 实例化
	 *
	 * @return obj
	 */
	public static function getInstance(){
		if (self::$instance === null || !(self::$instance instanceof Tpl)){
			self::$instance = new Tpl();
		}
		return self::$instance;     }    

然后在showpage方法中就可以用了


public static function showpage($page_name='',$layout='',$time=2000){
            
		if (!defined('TPL_NAME')) define('TPL_NAME','default');
		self::getInstance();//这句话是不是多写了?
			if (!empty(self::$tpl_dir)){
				$tpl_dir = self::$tpl_dir.DS;
                         //echo $tpl_dir.'99999999';
			}
			//默认是带有布局文件
			if (empty($layout)){
				$layout = 'layout'.DS.self::$layout_file.'.php';
                             
			}else {
				$layout = 'layout'.DS.$layout.'.php';
                        
			}
                        
			$layout_file = BASE_PATH.'/templates/'.TPL_NAME.DS.$layout;
                        
			$tpl_file = BASE_PATH.'/templates/'.TPL_NAME.DS.$tpl_dir.$page_name.'.php';
                   
			if (file_exists($tpl_file)){
				//对模板变量进行赋值
                               
				$output = self::$output_value;
				//页头
				$output['html_title'] = $output['html_title']!='' ? $output['html_title'] :$GLOBALS['setting_config']['site_name'];
				$output['seo_keywords'] = $output['seo_keywords']!='' ? $output['seo_keywords'] :$GLOBALS['setting_config']['site_name'];
				$output['seo_description'] = $output['seo_description']!='' ? $output['seo_description'] :$GLOBALS['setting_config']['site_name'];
				$output['ref_url'] = getReferer();
                        
				Language::read('common');
				$lang = Language::getLangContent();

				@header("Content-type: text/html; charset=".CHARSET);
				//判断是否使用布局方式输出模板,如果是,那么包含布局文件,并且在布局文件中包含模板文件
				if ($layout != ''){
                                    
					if (file_exists($layout_file)){
						include_once($layout_file);
                                               
					}else {
						$error = 'Tpl ERROR:'.'templates'.DS.$layout.' is not exists';
						throw_exception($error);
					}
				}else {
                                    
					include_once($tpl_file);
                                        
				}
			}else {
				$error = 'Tpl ERROR:'.'templates'.DS.$tpl_dir.$page_name.'.php'.' is not exists';
				throw_exception($error);
                                
			}
                        
	}    





有了这三个方法后,在此框架的view上,就可以往模板中写,形如红色部分(数组)的写法了,确实挺方便的,但是它的道理我一直没有搞明白,


<div class="addcart-goods-num"><?php echo $output['cart_goods_num'];?></div>


其中不明白的地方是

output方法中是怎样解析成数组提供给view层用的呢。

因为不解析成$output['cart_goods_num']这种样式,view模板中就不能这么写。而我不理解的地方就在此,它是如何解析的呢?

比如我看了一下业务层的写法是这样的

$group_list = $model_groupbuy->getGroupbuyCommendedList(4);
Tpl::output('group_list', $group_list);
我在看到两段后理解是这样的,$group_list是一个数组 group_list是一个下标做为output方法的参数代进来,由output的方法可知

self::$output_value['group_list'] = $group_list;    

可是这样的话,就只有一个下标了,但是$group_list一看就是sql出来的一个数组,一个下标怎么能表示一大堆呢?可能有些人说,它是二维数组!就是二维数组也无法再分析,虽然showpage层中有

$output = self::$output_value;
对于output方法的值的重新设置,但也不能重新再解析这一维数组而让其变为二维数组啊!




加载中
0
ziluopao
ziluopao
我突然大悟,原来我的二维数组没有搞明白
返回顶部
顶部