在项目中引入smarty(部分)

在中级项目shopcz中使用smarty。

思考:我们的smarty应该放在哪儿?
是application还是framework呢?
答案是:都可以。
不同的程序员会有不同的考虑。
如放到framework,把smarty作为框架的一个部分,thinkphp。
比如放到application中,将smarty作为第三方文件来引入,比如CI框架。

我们采取第二种,作为第三方的工具引入smarty。
在这里插入图片描述
将smarty解压到该目录之下。
在这里插入图片描述
注意保证文件夹层次的简洁性。将原来的libs更名为smarty。这里需要重点说一下,最新的版本smarty-3.1.33和smarty-3.1.32使用都出错了,我用的smarty-3.1.31
与此同时,需要创建对应的目录,如下:
在这里插入图片描述
修改indexController,如下:
在这里插入图片描述
然后在模板页面index.html中输出如下:
在这里插入图片描述
结果和原来一样。

如果我们需要在所有的控制器中使用smarty,我们的代码就显得有问题。

[需求]:商品详情页也需要使用smarty来输出。

需要将smarty的一些公共操作提取出来,放到 前台的BaseController 中。如下:
在这里插入图片描述
对应的其他控制器应该继承自该控制器
在这里插入图片描述
使用这种方式完成goodsController的编写。
在这里插入图片描述
对应的视图文件编写如下:
在这里插入图片描述
进一步,我们希望在商品详情页面,输出导航条内容。该怎么做?

简单分析一下,发现所有的页面(除了注册和登录)都有相同的导航条,可以使用同一个。这就涉及到模板包含机制。
2.模板包含
[需求]:把商品详情页中的头部信息也显示出来

第一步,将头部的信息,单独的保存为header.html。
在这里插入图片描述
注意,剪切的位置。
第二步,在模板页面中,使用include载入头部即可。(说明include file载入是以本文件为主,而不是以index.php的载入为主,要不然就是include file=CUR_VIEW_PATH.“header.html”)
在这里插入图片描述
效果很理想。
我们在商品详情页也使用这种方式,
需要将获取分类数据、分配数据提取到基础控制器中。
在这里插入图片描述
如此一来,我们的商品详情页面显示如下:
在这里插入图片描述
内容依然ok,只是盖住了我们的内容。需要处理一下。
需要分析我们的header.html,
在这里插入图片描述
在基础控制器中增加一个变量 index ,设置为false。然后在首页控制器覆盖即可,设置为true。在模板中判断即可。
在这里插入图片描述
在首页控制器覆盖之。
在这里插入图片描述
然后在header.html中判断即可,如下:
在这里插入图片描述
最终效果如下:
在这里插入图片描述 同理,底部的内容也可以这么实现。