ThinkPHP6无法动态include的解决办法

98 篇文章 2 订阅

目标

不改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文件的方法吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rudon滨海渔村

花的越多,赚得越多...

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值