做织梦系统的MIP开发改造时,需要实现获取当前列表页和内容页的链接,在网上找了一会,看有没有成品代码可抄,找来找去,都是不如意的,还有一些也实现不了。
花一会功夫,还是自己写一个吧,找代码比写代码用时还长呢。
把代码加到 /include/helpers/extend.helper.php
文件最后。
经实际应用的项目是全站静态页面的环境,其它环境(如果动态页面,或者是伪静态页面)未测试,使用时请注意观察。如果有问题需要帮助的话,可以联系我。 Continue reading
做织梦系统的MIP开发改造时,需要实现获取当前列表页和内容页的链接,在网上找了一会,看有没有成品代码可抄,找来找去,都是不如意的,还有一些也实现不了。
花一会功夫,还是自己写一个吧,找代码比写代码用时还长呢。
把代码加到 /include/helpers/extend.helper.php
文件最后。
经实际应用的项目是全站静态页面的环境,其它环境(如果动态页面,或者是伪静态页面)未测试,使用时请注意观察。如果有问题需要帮助的话,可以联系我。 Continue reading
织梦二次开发,织梦采集到HTML实体后出现乱码保存不全,主要是因为这个字符“&”造成的。
解决办法就是把HTML实体转为字符,使用html_entity_decode()
函数。
想再转为HTML实体,那使用PHP的htmlentities()
函数。
修改方法如下:
1、找到文件:/include/dedecollection.class.php
2、搜索addslashes($v['title'])
,替换为addslashes(html_entity_decode($v['title']))
注:一共有2处,在1035行(上下)和1118行(上下)
织梦采集https时出错,织梦二次开发,织梦采集https协议时却生成了http协议请求
需要修改脚本
1、找到文件 /include/dedehtml2.class.php,增加变量 $Scheme,如下图: Continue reading
在文件 include/taglib/channelartlist.lib.php第67行左右,
查找:
0 |
$tpsql = " reid=0 AND ispart<>2 AND ishidden<>1 AND channeltype>0 "; |
修改为:
0 |
$tpsql = " reid=0 AND ishidden<>1 AND channeltype>0 "; |
即删除 AND ispart<>2
完成。
栏目为外部链接时默认使用新窗口打开,其它栏目使用当前窗口打开的修改方法。
查找:
0 |
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); |
在代码的下一行增加:
0 1 2 |
if($typeids[$i]['ispart'] == 2){ $pv->Fields['typeurl'] = $pv->Fields['typeurl'].'" target="_blank'; } |
这样,在输出的链接后就自动增加了新窗口打开的代码了。 blank
文件位置:/include/taglib/channelartlist.lib.php
查找:
0 |
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]); |
上面代码大约在100行左右,在其下方增加代码:
0 1 2 3 4 |
if($typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['id'] || $typeids[$i]['id'] == $refObj->TypeLink->TypeInfos['topid'] ){ $pv->Fields['currentstyle'] = $currentstyle ? $currentstyle : 'active'; }else{ $pv->Fields['currentstyle'] = ''; } |
保存。
使用示例: Continue reading
5.6之后DEDE加入了文章按权重排序的功能,但很多童鞋调整权重数值,并在arclist标签里加上orderby=’weight’,却发现无任何效果,原因是系统默认是不开启该功能的。
正确的使用方法如下:
{dede:arclist titlelen='38' flag='h' noflag='a' isweight='y' orderby='weight'}
{/dede:arclist}
红色部分就是开启 weight排序,再加上orderby=’weight’,就OK了
——————————————————————————–
另外使用arclist标签时,想按照权重越大越靠前来排序,则需要小动一下arclist.lib.php文件,方法如下:
打开\include\taglib\arclist.lib.php
大概在572行
$orderWeight = list_sort_by($orderWeight, ‘weight’, ‘asc’);
修改为(红色部分)
$orderWeight = list_sort_by($orderWeight, ‘weight’, ‘desc‘);
打开include/arc.searchview.class.php
查找:
0 1 |
require_once(DEDEINC."/taglib/hotwords.lib.php"); require_once(DEDEINC."/taglib/channel.lib.php"); |
在下面加入:
0 1 |
require_once(DEDEINC."/taglib/arclist.lib.php"); require_once(DEDEINC."/taglib/channelartlist.lib.php"); |
找到:
0 1 2 3 |
else if($tagname=="hotwords") { $this->dtp->Assign($tagid,lib_hotwords($ctag,$this)); } |
在下面插入:
0 1 2 3 4 5 6 7 |
else if($tagname=="arclist") { $this->dtp->Assign($tagid,lib_arclist($ctag,$this)); } else if($tagname=="channelartlist") { $this->dtp->Assign($tagid,lib_channelartlist($ctag,$this)); } |
这样就可在dedecms织梦搜索页面使用arclist和channelartlist标签调用数据了。
说它是自动识别,其实只是用了字符串切割的方法,如果勾选提取第一个图片萎缩路人图的话,文章的缩略图和第一张图片只多了一个“-lp”的字符串,
用php的“str_replace”函数切割一下就行了。方法如下:
打开 /include/common.func.php在最后面加入如下代码:
0 1 2 3 4 |
function firstpic($str_pic) { $str_sub=str_replace("-lp","","$str_pic"); //删除缩略图中的"-lp"。 return $str_sub; } |
标签中调用:
0 |
[field:litpic function=firstpic('@me')/] |
直接调用:
0 |
{dede:field name='litpic' function="firstpic(@me)"/} |
通过比较明显第二种方法比较好。但是如果自己上传缩略图的话,第二种就用不了了,这时候就要再用另一种方法:
打开 /include/helpers/archive.helper.php 在最后面加入如下代码
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * 调用缩略图的原始图片 * * @param string aid * @return string */ if(!function_exists('getImgs')) { function getImgs($aid) { global $dsql; $query = "SELECT channel FROM `#@__archives` WHERE id='$aid'"; $row = $dsql->GetOne($query); $row = GetChannelTable($row['channel']); $query = "select body FROM `{$row['addtable']}` where aid='$aid'"; $row = $dsql->GetOne($query); preg_match('/<img[^>]*src[=\"\'\s]+([^\.]*\.[^\"\'>]*)[\"\']?[^>]*>/',$row['body'],$arr); return $arr[1]; } } |
或者,可以简化一些:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * 调用缩略图的原始图片 * * @param string aid * @return string */ if(!function_exists('getImgs')) { function getImgs($aid) { $query = "select body FROM `#@__addonarticle` where aid='$aid'"; $row = $dsql->GetOne($query); preg_match('/<img[^>]*src[=\"\'\s]+([^\.]*\.[^\"\'>]*)[\"\']?[^>]*>/',$row['body'],$arr); return $arr[1]; } } |
标签中调用:
0 |
[field:id function=getImgs(@me)/] |
具体怎么实现功能,还要看自己网站的实际情况了。
织梦二次开发,一是让系统更适合自己,为我所用;二是没有绝对完美的东西,修改它的BUG。
织梦图集模型增加数据类型为“HTML文本”的自定义字段 发布着色内容出错,表面上看是这样的,但实现上是在打开修改图集内容页时的返回值出错,再准确一点说,是HTML文本在修改查看时被过滤了一次而出错(把原来的<span style…替换成了<span x=”">yle…)。
因为在发布完图集内容后,我查看数据表dede_addonimages数据内容,是正常并正确的。所以问题就不是出在发布的环节,也没必要研究/dede/album_add.php这个文件了(之前我走了弯路)。
(到这一步之前也走了一些弯路)那么现在就来研究/dede/album_edit.php这个文件,发现是$addRow=XSSClean($addRow);这句在作怪,注释掉,OK!
整个56行$arcRow=XSSClean($arcRow);$addRow=XSSClean($addRow);
都可以注释掉。之所以说这行都可以注释掉是因为在文章模型的修改文档文件(/dede/archives_edit.php)中就没有这各方法过滤,根本就没有出现XSSClean()方法。
其它,那个过滤规则最终是指向\include\helpers\filter.helper.php的RemoveXSS方法的,没去细研究。
天亮了,睡了……