设为首页收藏本站关注微信<<< 抵制 IE6 人人有责 >>>
搜索
热搜: 活动 交友 discuz
查看: 2829|回复: 1
打印 上一主题 下一主题

[dedecms] 无法在这个位置找到: {dede:include filename="(

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-5 22:40:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
织梦模板include插入非模板目录文件出现“无法在这个位置找到”错误的解决办法

以下是dede V55_UTF8

查dede include标签手册

(3) include 引入一个文件,形式为:
  1. {dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}
复制代码



对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录

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




那么就会返回为空字符串,很显然,并没有对文件进行引用.下面经过改造就可以引用各个目录的文件了.(很简单,下面加粗蓝色字体为修改部分)

文件目录为:dede安装根目录/include/dedetag.class.php 查找
  1. //引入文件
  2. function IncludeFile($filename,$ismake='no')
  3. {
  4.   global $cfg_df_style;
  5.   $restr = '';
  6.   if($filename=='')
  7.   {
  8.    return '';
  9.   }
  10.   if( file_exists(DEDEROOT."/templets/".$filename) )
  11.   {
  12.    $okfile = DEDEROOT."/templets/".$filename;
  13.   }
  14.   else if(file_exists(DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename) )
  15.   {
  16.    $okfile = DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename;
  17.   }
  18.   else
  19.   {
  20.    return "无法在这个位置找到: $filename";
  21.   }

  22.   //编译
  23.   if($ismake!="no")
  24.   {
  25.    require_once(DEDEINC."/channelunit.func.php");
  26.    $dtp = new DedeTagParse();
  27.    $dtp->LoadTemplet($okfile);
  28.    MakeOneTag($dtp,$this->refObj);
  29.    $restr = $dtp->GetResult();
  30.   }
  31.   else
  32.   {
  33.    $fp = @fopen($okfile,"r");
  34.    while($line=fgets($fp,1024)) $restr.=$line;
  35.    fclose($fp);
  36.   }
  37.   return $restr;
  38. }
复制代码

在:
  1. else
  2. {
  3. return "无法在这个位置找到: $filename";
  4. }
复制代码

之前加上:

  1. else if(file_exists(DEDEROOT.$filename) )
  2.   {
  3.    $okfile = DEDEROOT.$filename;
  4.   }
复制代码

最后结果为:
  1. //引入文件
  2. function IncludeFile($filename,$ismake='no')
  3. {
  4.   global $cfg_df_style;
  5.   $restr = '';
  6.   if($filename=='')
  7.   {
  8.    return '';
  9.   }
  10.   if( file_exists(DEDEROOT."/templets/".$filename) )
  11.   {
  12.    $okfile = DEDEROOT."/templets/".$filename;
  13.   }
  14.   else if(file_exists(DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename) )
  15.   {
  16.    $okfile = DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename;
  17.   }
  18.   else if(file_exists(DEDEROOT.$filename) )
  19.   {
  20.    $okfile = DEDEROOT.$filename;
  21.   }
  22.   else
  23.   {
  24.    return "无法在这个位置找到: $filename";
  25.   }

  26.   //编译
  27.   if($ismake!="no")
  28.   {
  29.    require_once(DEDEINC."/channelunit.func.php");
  30.    $dtp = new DedeTagParse();
  31.    $dtp->LoadTemplet($okfile);
  32.    MakeOneTag($dtp,$this->refObj);
  33.    $restr = $dtp->GetResult();
  34.   }
  35.   else
  36.   {
  37.    $fp = @fopen($okfile,"r");
  38.    while($line=fgets($fp,1024)) $restr.=$line;
  39.    fclose($fp);
  40.   }
  41.   return $restr;
  42. }
复制代码





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享淘帖
回复

使用道具 举报

沙发
 楼主| 发表于 2014-3-5 22:41:48 | 只看该作者
首先看代码:文件目录为:

dede安装根目录/include/dedetag.class.php

  1.     /**
  2.      *  引入文件
  3.      *
  4.      * @access    public
  5.      * @param     string  $filename  文件名
  6.      * @param     string  $ismake  是否需要编译
  7.      * @return    string
  8.      */
  9.     function IncludeFile($filename, $ismake='no')
  10.     {
  11.         global $cfg_df_style;
  12.         $restr = '';
  13.         if($filename=='')
  14.         {
  15.             return '';
  16.         }
  17.         if( file_exists(DEDEROOT."/templets/".$filename) )<span style="white-space:pre">        </span>//默认的根目录为DEDEROOT."/templets/"
  18.         {
  19.             $okfile = DEDEROOT."/templets/".$filename;
  20.         }
  21.         else if(file_exists(DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename) )<span style="white-space:pre">        </span>//默认根目录为default下的路径即:DEDEROOT."/templets/default/"
  22.         {
  23.             $okfile = DEDEROOT.'/templets/'.$cfg_df_style.'/'.$filename;
  24.         }
  25.         else
  26.         {
  27.             return "无法在这个位置找到: $filename";
  28.         }

  29.         //编译
  30.         if($ismake!="no")
  31.         {
  32.             require_once(DEDEINC."/channelunit.func.php");
  33.             $dtp = new DedeTagParse();
  34.             $dtp->LoadTemplet($okfile);
  35.             MakeOneTag($dtp,$this->refObj);
  36.             $restr = $dtp->GetResult();
  37.         }
  38.         else
  39.         {
  40.             $fp = @fopen($okfile,"r");
  41.             while($line=fgets($fp,1024)) $restr.=$line;
  42.             fclose($fp);
  43.         }
  44.         return $restr;
  45.     }
  46. }
复制代码




由以上代码可以得知:dede:include 判断两种路径:一种是以templets/下的路径;一种是系统默认模板的路径default。
如果设置路径非这两种路径,就显示无法在这个位置找到这个文件:解决方式有两种:一种是在这里再添加一种判断;另外一种是根据文件的规定,写出符合文件规定的路径方式就可以解决。

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

QQ|手机版|Archiver|源于生活(个人生活娱乐工作的笔记)css3,html5,学习笔记    

GMT+8, 2024-11-27 12:34 , Processed in 0.093600 second(s), 22 queries .

Powered by Mr.Kevin-ying

© 2004-2015

快速回复 返回顶部 返回列表