目标
不改TP框架源代码!不改TP框架源代码!不改TP框架源代码!
页面A? --? ?http://tp6.com/home/index/index 页面B? --? ?http://tp6.com/home/index/bbb - 另外自行加载bbb.css(在common/htmlHead.html) 页面C? --? ?http://tp6.com/home/index/ccc - 另外自行加载ccc.css (在common/htmlHead.html) 三个页面,都是会:
{include file='common/htmlHead.html'}
各自的内容
{include file='common/htmlFoot.html'}
怎么办呢?
最简单的办法是,每个方法里面各自定义html代码
View::assign('moreCss', '<link?href="xx.css"?rel="stylesheet"?/>'); 或者空字符串;
再在common/htmlHead.html直接输出变量值,{$moreCss},ok!
关键是,不是动态include!不过瘾!下面是动态include方法
TP6动态include文件
【控制器】
<?php
declare (strict_types = 1);
namespace app\home\controller;
use think\facade\View;
class Index
{
public function index()
{
$this->setMoreCss('common/moreCss/empty');
return View::fetch('index');
}
public function bbb () {
$this->setMoreCss('common/moreCss/bbb');
return View::fetch('bbb');
}
public function ccc () {
$this->setMoreCss('common/moreCss/ccc');
return View::fetch('ccc');
}
public function setMoreCss ($path) {
View::assign('moreCss', $path);
}
}
【模板分布】
/ app / home / view / common / htmlHead.html / app / home / view / common / htmlFoot.html / app / home / view / common / moreCss / empty.html (空文件) / app / home / view / common / moreCss / bbb.html (内有bbb页面专用的css文件link标签) / app / home / view / common / moreCss / ccc.html (内有ccc页面专用的css文件link标签) / app / home / view / index / index.html? (include了htmlHead + 自身内容 + htmlFoot) / app / home / view / index / bbb.html? ? ?(include了htmlHead + 自身内容 + htmlFoot) / app / home / view / index / ccc.html? ? ?(include了htmlHead + 自身内容 + htmlFoot)
【代码】
common / htmlHead.html
<html>
<head>
<meta charset="utf-8" />
<title>...</title>
{include file="$moreCss"}
</head>
<body>
common / moreCss / bbb.html
<link href="styleB.css" rel="stylesheet" />
<link href="fontFamily.css" rel="stylesheet" />
重点是:{include file="$moreCss"} 变量可控模板路径。
写在后面
以前试过在view里面根据“变量$moreCss有定义的话,就include”,结果不行,代码如下:
????{present?name="moreCSS"} --- 判断是否变量已定义
????{notempty?name="moreCSS"} --- 判断变量是否为空
???? {include?file="$moreCss"} ---- 这个include直接不受present和notempty控制!!!
????{/notempty}
????{/present}
结果报错,include路径不能为空(因为index方法里面没有assign,也不想另外弄个空的html视图),所以还是用TP6动态include文件的方法吧。
?
|