fecshop模板中$parentThis变量是在哪里定义的,有什么用途?

文档问题 · hetao · 于 5年前 发布 · 1856 次阅读

fecshop模板中$parentThis变量是在哪里定义的,有什么用途?

共收到 5 条回复
Fecmall#15年前 1 个赞

首先,你先了解一下fecshop的模板原理:http://www.fecshop.com/doc/fecshop-guide/instructions/cn-1.0/guide-fecshop_theme.html

下面以代码例子讲解一下这个$parentThis,在讲解之前,先从这样做的目的开始说起

1.首先,想说的是,对于mvc结构,在yii2框架中,视图部分是由layout 和具体的view文件组成,也就是两个文件, layout文件没有问题,非常简洁,代码不会很多,而对于view部分,html代码量还是非常大的,譬如产品页面的样式全部写到一个view文件里面,还是很庞大的,因此将view文件打碎成多个文件,这样会更好一些

2.另外,会存在某些块公用的调用,譬如头部和尾部,或者产品页面和分类页面都可以显示一个tab栏目,也就是各个页面的公用块,如果将这些公用快做成一个独立的方式,通过某个函数调取就可以顺利的引入,这样就会非常的方便,就像工厂生产出来,哪里用就哪里调用

3.对于一个独立块,麻雀虽小,五脏俱全,就像一个完整页面一样,需要动态计算数据,也需要展示view部分,因此,这个部分是由2部分组成,数据提供部分和视图部分, 对于这个,可以参看一下:fecshop小部件 ,fecshop小部件,是一种预定义的方式,主要用于头部和尾部等公用的部分,并自带cache缓存功能,详细的参看上面的文档

4.当然,也有一种,是不需要在配置文件中预定义,而是在使用的时候直接引入即可,下面找一个例子讲解,

4.1打开文件:https://github.com/fecshop/yii2_fecshop/blob/master/app/appfront/theme/base/front/catalog/product/index.php

可以看到价格部分的调用,32行

<div class="price_info">
<?php # 价格部分
	$priceView = [
		'view'	=> 'catalog/product/index/price.php'
	];
	$priceParam = [
		'price_info' => $price_info,
	];
?>
<?= Yii::$service->page->widget->render($priceView,$priceParam); ?>

</div>

上面的$priceView,代表是配置部分,上面只配置了view部分,没有class文件配置,说明不需要动态数据部分, 对于存在class的例子可以查看该文件的61行

下来来看Yii::$service->page->widget->render($priceView,$priceParam); ,也就是文件:https://github.com/fecshop/yii2_fecshop/blob/master/services/page/Widget.php ,查看方法 protected function actionRender($configKey, $parentThis = '')

对于上面代码调用传递的参数 $priceParam,被上面的函数的$parentThis接收, 你会发现这个参数在后面并没有被使用,而是在各个子函数中传递,最终被函数 protected function actionRenderContentHtml($configKey, $config, $parentThis = ''), 接收,在代码99行处可以看到

if ($parentThis) {
	$params['parentThis'] = $parentThis;
}
 return Yii::$app->view->renderFile($viewFile, $params);

这里,你应该就明白了,将前面传递的 $priceParam作为 $params['parentThis'] , 对于方法Yii::$app->view->renderFile($viewFile, $params),这个是yii2的方法,和controller里面结尾处的render类似,也就是把数据里面每个数据,作为一个变量,在view中可以直接使用, 因此,对于

$priceParam = [
		'price_info' => $price_info,
	];

就可以在view中使用 $parentThis['price_info'],也就是上面传递的值

可能你对Yii2不熟悉,对于Yii::$app->view->renderFile($viewFile, $params)不了解,这个我之前整理了一个文章: yii2 通过 render , views页面生成显示html的原理

Fecmall#25年前 1 个赞

进行了一系列的整理,加入了文档:fecshop 模板view文件前台

可以直接参看这个文档

hetao#35年前 0 个赞

我昨天看源代码也弄明白这个问题了,答主速度很快,这么快就加入到官方文档中了

Fecmall#45年前 0 个赞

@hetao [#3楼](#comment3) fecshop的源码,比较的扁平化,多读读源码,很容易理解的。

尽量的完善文档的内容,以及论坛帖子的内容,后面fecshop用的人多了,帖子内容多了, 大家可以搜索帖子解决问题,互相回帖解决问题, 就不需要我这样每天盯着了,目前只能我自己来回帖以及沉淀文档。

hetao#55年前 0 个赞

我用熟练了帮答主回答问题,完善框架

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics