织梦(dedecms)自定义字段上传图片调用出现{dede:img text='' ...}的解决方法

 DedeCMS   高蒙   阅读(5016)   评论(1)   2016-03-11 09:38:45    dedecms二次开发 织梦自定义字段上传图片问题 织梦出现{dede:img text='' ...}的解决方法 


今天在用织梦cms文章模型添加自定义图片字段的时候,在引用的时候出现下面的问题。

{dede:img text='' width='200' height='200'} /webroot/uploads/160310/1-1603101AF2938.jpg {/dede:img}

3.jpg

直接具体的解决方法->:点击这里

 下面是整个的分析过程,有兴趣可以仔细的阅读:

很明显,{dede:img text=''}这个并不是我们想要的,也不是我们想要上传的。

于是在网上找了很多解决{dede:img text='' width='200' height='200'}{/dede:img}的问题的答案,一艘都是差不多的,太过于勉强。

最终还是觉得自己动手去解决这个问题,下面就是整个解决{dede:img text='' width='200' height='200'}{/dede:img}的过程。

一、首先我们要分析,为什么会出现{dede:img text='' width='200' height='200'}{/dede:img}的问题。

    1)、在后台上传的时候,审查元素,发现表单里面并没有出现{dede:img text='' width='200' height='200'}{/dede:img}的前后缀。

    2)、那么我们就可以想到应该是在存入数据的时候,织梦系统中自动得我们加上的前后缀。

    3)、知道原因,那我们直接就去追踪代码吧。

二、得到分析的结果,那么我们查看代码吧。

1、数据表 dede_addonarticle

   1)、这张表是新建字段的附加表,在表里我们明显的可以看出,字段里面多出了{dede:img text='' width='200' height='200'}{/dede:img}的前后缀。

2.jpg

2、处理的文件 article_add.phpcustomfields.func.php

   1)、通过查找,在添加数据的时候,处理文件是 article_add.php

1.jpg

   代码:

 //分析处理附加表数据

    $inadd_f = $inadd_v = '';

    if(!empty($dede_addonfields))

    {

        $addonfields = explode(';',$dede_addonfields);

        if(is_array($addonfields))

        {

            foreach($addonfields as $v)

            {

                if($v=='') continue;

                $vs = explode(',',$v);

                if($vs[1]=='htmltext'||$vs[1]=='textdata')

                {

                    ${$vs[0]} = AnalyseHtmlBody(${$vs[0]},$description,$litpic,$keywords,$vs[1]);

                }

                else

                {

                    if(!isset(${$vs[0]})) ${$vs[0]} = '';

                    ${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$arcID);

                }

                $inadd_f .= ','.$vs[0];

                $inadd_v .= " ,'".${$vs[0]}."' ";

            }

        }

    }

 

    通过代码的验证,我们发现真正起作用的是下面这行代码。

${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$arcID);

    很显然,这里是调用了系统的 GetFieldValueA() 函数方法。

 

    2)、得到 GetFieldValueA() 函数,经过查找我们发现这个函数的位置是在下面文件里面。

    文件地址:dede/inc/inc_archives_functions.php

function GetFieldValueA($dvalue, $dtype, $aid=0, $job='add', $addvar='')

{

    return GetFieldValue($dvalue, $dtype, $aid, $job, $addvar, 'admin');

}

 

 

   3)、在上面的文件中函数 GetFieldValueA() 调用了 GetFieldValue() 的方法。那么我们继续往下走。

    具体的解决方法如下,按照教程修改即可:

   4)、通过查找我们得到 GetFieldValue() 的函数是在 include/customfields.func.php 文件里面。

    在文件中第287行的位置:

else if($dtype=='img' || $dtype=='imgfile')

    {

    此处省略...

            //远程图片

            $reimgs = '';

            if($GLOBALS['cfg_isUrlOpen'])

            {

                $reimgs = GetRemoteImage($iurl,$adminid);

                if(is_array($reimgs))

                {

                    if($dtype=='imgfile')

                    {

                        $imgurl = $reimgs[1];

                    }

                    else

                    {

                        $imgurl = "{dede:img text='' width='".$reimgs[1]."' height='".$reimgs[2]."'} ".$reimgs[0]." {/dede:img}";

                    }

                }

            }

            else

            {

                if($dtype=='imgfile')

                {

                    $imgurl = $iurl;

                }

                else

                {

                    $imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";

                }

            }

        }

        else if($iurl != '')

        {

            //站内图片

            $imgfile = $cfg_basedir.$iurl;

            if(is_file($imgfile))

            {

                $info = '';

                $imginfos = GetImageSize($imgfile,$info);

                if($dtype=="imgfile")

                {

                    $imgurl = $iurl;

                }

                else

                {

                    $imgurl = "{dede:img text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}";

                }

            }

        }

        return addslashes($imgurl);

    }

    看到没有上面的代码就是在数据入库的时候,自动的给我们自定义字段图片加上{dede:img text='' width='200' height='200'}{/dede:img}的前后缀。

   5)、将文件里面的{dede:img text='' width=''}{/dede:img}";相关的代码全部删除掉。

三、通过上面的处理,我们就可以顺利的解决织梦cms文章模型添加自定义图片字段,自动的加上{dede:img text='' width=''}{/dede:img}";前后缀的问题。




相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客