织梦php 引入其它文件,解决{dede:include filename=''/}引入其他目录文件未找

目前最好用的一款PHPCMS《dedecms》,相信很多同学都在学习使用。期间也遇到了很多问题,比如我们今天要解决的是:一个标签{dede:include filename=''/}。

织梦模板include插入非模板目录文件,也就是你要使用这个标签来调用插入非templets目录的文件的时候,刷新前台页面会出现“无法在这个位置找到”错误。要解决这个问题,我们首先要找到关键所在。

我们以dede V55_UTF8为例:我们找到,这个标签的函数在:dede安装根目录/include/dedetag.class.PHP。接下来阅读代码:

/**

*  引入文件

*

* @access    public

* @param     string  $filename  文件名

* @param     string  $ismake  是否需要编译

* @return    string

*/

function IncludeFile($filename, $ismake='no')

{

global $cfg_df_style;

$restr = '';

if($filename=='')

{

return '';

}

if( file_exists(DEDEROOT."/templets/".$filename) )    //默认的根目录为DEDEROOT."/templets/"

{

$okfile = DEDEROOT."/templets/".$filename;

}

else if(file_exists(DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename) )  //默认根目录为default下的路径即:DEDEROOT."/templets/default/"

{

$okfile = DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename;

}

else

{

return "无法在这个位置找到: $filename";

}

//编译

if($ismake!="no")

{

require_once(DEDEINC."/channelunit.func.php");

$dtp = new DedeTagParse();

$dtp->LoadTemplet($okfile);

MakeOneTag($dtp,$this->refObj);

$restr = $dtp->GetResult();

}

else

{

$fp = @fopen($okfile,"r");

while($line=fgets($fp,1024)) $restr.=$line;

fclose($fp);

}

return $restr;

}

好了,我们发现ede:include 判断两种路径:一种是以templets/下的路径;一种是系统默认模板的路径default。因此,你要调用插入非templets目录文件是不行哒。

好,接下来是重点,我们怎么去改:

查dede include标签手册 include 引入一个文件,形式为:{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录

其实根本不是这个样子的,如果你要引用一个其它目录的东西如:{dede:include filename="/haixiait/template/default/inc_head.htm"/}

那么就会返回为空字符串,很显然,并没有对文件进行引用.下面经过改造就可以引用各个目录的文件了.

同样找到文件目录为:dede安装根目录/include/dedetag.class.PHP​,(很简单,下面加粗红色字体为修改部分)!粘贴这样一个判断就可以了。

//引入文件

function IncludeFile($filename,$ismake='no')

{

global $cfg_df_style;

$restr = '';

if($filename=='')

{

return '';

}

if( file_exists(DEDEROOT."/templets/".$filename) )

{

$okfile = DEDEROOT."/templets/".$filename;

}

else if(file_exists(DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename) )

{

$okfile = DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename;

}

else if(file_exists(DEDEROOT.$filename) )

{

$okfile = DEDEROOT.$filename;

}

else

{

return "无法在这个位置找到: $filename";

}

//编译

if($ismake!="no")

{

require_once(DEDEINC."/channelunit.func.php");

$dtp = new DedeTagParse();

$dtp->LoadTemplet($okfile);

MakeOneTag($dtp,$this->refObj);

$restr = $dtp->GetResult();

}

else

{

$fp = @fopen($okfile,"r");

while($line=fgets($fp,1024)) $restr.=$line;

fclose($fp);

}

return $restr;

}

​然后在,其中复制粘贴红色加粗部分就可以实现全站调用了喔。怎么样,你实现了吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值