dedecms 添加自定义图字段,调用时出错
1:发现问题
按照以往一样高兴的认为网站就绪了,谁知道出现一个小插曲。
使用dedecms 的站长们应该知道,当一个模型的字段的不能够满足我们项目的需求的时候就会自己创建一些字段,哈今天我就遇到了耶,在创建 图片字段的时候没有问题,数据库什么的一切正常,当我调取dede标签的时候使用刚创建的图片字段,发现数据调取来的是这样的,这个{dede:img} 是什么鬼?
我理想中的目标应该是这样的
2:解决问题
后来在网上查了一些资料然后去源码里面看发现 include/customfields.func.php
else if($dtype=='img' || $dtype=='imgfile')
{
// 匹配到 '/upload/userup' | '\upload\userup',可能windows和linux不能的目录风格,不做处理
<span style="white-space:pre"> </span>if(preg_match("#[\\|/]uploads[\\|/]userup#", $dvalue)) return $dvalue; // diy - 自定义模式(diy - do it yourself,我之前看过discuz,它里面有个专门的这种应用,很强大 )
if($admintype=='diy')
{
$iurl = MemberUploads($fieldname, '', 0, 'image', '', -1, -1, false);
return $iurl;
}
$iurl = stripslashes($dvalue);
if(trim($iurl)=='')
{
return '';
}
$iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
$imgurl = "{dede:img text='' width='' height=''} ".$iurl." {/dede:img}";
if(preg_match("/^http:\/\//i", $iurl) && $GLOBALS['cfg_isUrlOpen']) // 1>这里使用的是 '$GLOBALS'
{
//远程图片
$reimgs = '';
if($GLOBALS['cfg_isUrlOpen']) // 2>这里使用的也是 '$GLOBALS',同上面的纠正过来了
{
$reimgs = GetRemoteImage($iurl,$adminid);
if(is_array($reimgs))
{
if($dtype=='imgfile')
{
$imgurl = $reimgs[1]; // $reimgs[0] 应该才是 '图片地址',怀疑这里错误!!
}
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);
}
通过分析上面的代码,可以看出,img字段的处理,却是是程序中故意加的这种格式。{dede:img}标签中,同时也存储了后端php获取到的图片的宽、高尺寸,这应该是没有问题的。所以,我们不应该在源码中,改变这种形式,程序中有的地方可能就是这么使用的。
3:解决方案
打开 /include/extend.func.php 文件 添加以下函数( 这个文件就是系统预留的自定义函数接口文件)
// 获取 'img-图片' 附加字段图片地址
// 针对 '{dede:img text='' width='2534' height='1138'} /uploads/161027/1-16102G12Z1930.png {/dede:img}' 格式
function GetOneImgUrl($img,$ftype=1){
if($img <> ''){
$dtp = new DedeTagParse();
$dtp->LoadSource($img);
if(is_array($dtp->CTags)){
foreach($dtp->CTags as $ctag){
if($ctag->GetName()=='img'){
$width = $ctag->GetAtt('width');
$height = $ctag->GetAtt('height');
$imgurl = trim($ctag->GetInnerText());
$img = '';
if($imgurl != ''){
if($ftype==1){
$img .= $imgurl;
}
else{
$img .= '<img src="'.$imgurl.'" width="'.$width.'" height="'.$height.'" />';
}
} }
}
}
$dtp->Clear();
return $img;
}
}
前端调用方式
[field:自定义图片字段名 function="GetOneImgUrl(@me,显示类型)"/]
比如:我们的自定义图片字段名为 imgurl ,那么调用方式有以下两种:
引用
[field:imgurl function='GetOneImgUrl(@me,0)'/] <!--调用图片的信息,自动调用宽度和高度(已包含Html代码的<img />标签)-->
[field:imgurl function='GetOneImgUrl(@me,1)'/] <!--只调用图片地址,一般可用于背景图嵌套--> (一般使用这个)
dedecms 添加自定义图字段,调用时出错的更多相关文章
- phpcms_v9 多图字段 内容页,首页,分页自定义字段调用
phpcms_v9 多图字段 内容页,首页,分页自定义字段调用 说明:自定义多图字段名 shigongtu 1 内容页调用 {loop $shigongtu $r} <img src= ...
- dedecms新建内容模型“把数据保存到数据库附加表时出错‘xxx’出错”错误的原因分析和解决方案(转)
把数据保存到数据库附加表 `bc_addonarticle17` 时出错,请把相关信息提交给DedeCms官方.INSERT INTO `bc_addonarticle17`(aid,typeid,r ...
- VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决
VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...
- 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:
无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -000 ...
- 把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方。Duplicate entry
把数据保存到数据库附加表 `dede_addonarticle` 时出错,请把相关信息提交给DedeCms官方.Duplicate entry ’3′ for key ‘PRIMARY’ 你的主键是不 ...
- ajax调用WebMethed返回处理请求时出错
ajax post调用WebMethed报错,返回的信息如下: {“Message”:“处理请求时出错”,“StackTrace”:“”,“ExceptionType”:“”} 查了一下WebMeth ...
- VC++ MFC单文档应用程序SDI下调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错原因分析及解决办法:glewInit()初始化的错误
1.问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: OpenG ...
- Thrift 使用TNonblockingServer模型时调用PosixThreadFactory出错。
Thrift 使用TNonblockingServer模型时调用PosixThreadFactory出错. 我定位到shared_ptr<PosixThreadFactory> thr ...
- WCF服务调用超时错误:套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的。本地套接字超时是“00:05:30”(已解决)
问题: 线上正式环境调用WCF服务正常,但是每次使用本地测试环境调用WCF服务时长就是出现:套接字连接已中止.这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的.本地套接字超 ...
随机推荐
- vc++如何创建程序-函数的重载
重载构成的条件:函数的参数类型,参数个数不同,才能构成函数的重载 函数重载分为两种情况: 1 .(1)void output(); (2)int output(); 2 .(1)void output ...
- 小白学习Spark系列二:spark应用打包傻瓜式教程(IntelliJ+maven 和 pycharm+jar)
在做spark项目时,我们常常面临如何在本地将其打包,上传至装有spark服务器上运行的问题.下面是我在项目中尝试的两种方案,也踩了不少坑,两者相比,方案一比较简单,本博客提供的jar包适用于spar ...
- 树(2)-----leetcode(层、深度、节点)
1.树的类实现: class TreeNode(object): def __init__(self, x): self.val = x self.left = None self.right = N ...
- Python数据分析5-----数据规约
1.数据规约概念和目的 数据规约是产生更小且保留数据完整性的新数据集. 意义:降低无效错误数据的影响.更有效率.降低存储成本. 2.属性规约 (1)属性合并(降维):比如PCA (2)删除不相关属性 ...
- ubuntu上的arm-elf-tools -20040427.sh 下载及安装问题的解决
要完成uclinux在ARM上的移植,必须有这个工具. 下载地址:http://opensrc.sec.samsung.com/download.html 这个网站上还有许多其它资源可以下载.我选择 ...
- Spring学习总结(18)——Spring整合Mysql数据库一主多从、多主多从配置
一.新建jdbc.properties配置文件 master.jdbc.driverClassName=com.mysql.jdbc.Driver master.jdbc.url=jdbc:mysql ...
- el表达式中的比较和包含
相等( equal ) :eq 不相等( not equal ): ne / neq 大于( greater than ): gt 小于( less than ): lt 大于等于( great th ...
- Unhandled 'error' event
events.js: throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at errnoException (net.js ...
- 工具-putty使用
Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条 sudo apt-get install openssh-server 启动SSH服务: sudo /et ...
- MySQL DROP TABLE操作以及 DROP 大表时的注意事项
语法: 删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CA ...