dedecms 首页调用单页文章内容和图片 – DeDecms


avatar
pcwnas 2023-04-21 220

原文来自:https://www.zixuephp.com

dedecms 首页调用单页文章内容和图片

这两天在修改dedeeims网站的时候,阿头要求在首页调用栏目为单页内容的栏目,由于单页栏目没有具体标签,因此通过{dede:sql}这个标签来调用,如果没有修改的话,单页内容栏目的数据存在数据库dede_arctype这个表里面,所以可以这样调用:

  1. {dede:sqlsql="select*fromdede_arctypewhereid=69"}
  2. [field:typename/]<!–这个是栏目名称–>
  3. [field:contentfunction=cn_substr(Html2Text(@me),80)/]<!–截取部分文字作为简介–>
  4. {/dede:sql}

关于调用这部分,网上有不少相关的内容,但是问题来了,在排版上要求要配上缩略图,但是单页内容没有缩略图啊,偶的神啊,继续钻研去,先在网上搜了一下,找到一些方法,其中有一个方法来自百度空间星火视频教程里面的,具体内容不说,他的方法是自己构建一个函数来获得文章的第一张图片,函数如下:

  1. functionfirstimg($str)
  2. {
  3. $str1=str_replace('"','',$str);
  4. preg_match('/<img[^>]*>/i',$str1,$str2);
  5. $str3=array_shift($str2);
  6. $str4=str_replace('<img','',$str3);
  7. $str5='<imgclass=pic'.$str4;
  8. $str6=str_replace('alt=','',$str5);
  9. return$str6;
  10. }

在dedeeims的安装目录include下面新建一个extend.func.php,这个是dedeeims留给用户开发的自定义函数接口,在common.func.php最后有相关的两行代码,建好文件后,把上面的代码复制进去,然后在需要的地方用.

[field:body function=firstimg('@me')/]

调用(单页的时候,body改为content),上面的代码可以拿到图片,但是有一个问题,它还会把所有的img标签里面的所有图片属性都一起拿到,dedeeims的fck可视化编辑器编辑内容时会有很多额外的标签,尤其是不懂html代码的网络编辑编过的内容,更是惨不忍睹,图片调用出来后,整个首页版面都变了,而且不好写css样式,我去,继续改,后来想了一想,我把它改成了这样,算是完成了,代码贴出如下,如果有什么不对的地方,请指教:

  1. //获取单页文章内容第一张图片
  2. functionfirstimg($str)
  3. {
  4. $str1=str_replace('"','',$str);//获得文章所有内容,去掉所有的双引号(""),因为dede核心不允许双引号
  5. preg_match('/<img[^>]*>/i',$str1,$str2);//获得所有的图片,保存到$str2
  6. $str3=array_shift($str2);//利用array_shift()获得文章内容第一张图片
  7. preg_match_all('#src\s*=\s*["\&;]?([^\s"\&;]*)#i',$str3,$TheSrc);//由于dede的fck编辑器会带上很多属性,为了方便控制样式,只获取图片的src地址
  8. //通过pint_r($TheSrc)打印得到下面一个二维数组,区别在于一个前面有src=,一个没有。取没有src的:$TheSrc[1][0]
  9. //Array
  10. //(
  11. //[0]=>Array([0]=>src=…/uploads/allimg/120721/4_120721152925_1.jpg)
  12. //[1]=>Array([0]=>…/uploads/allimg/120721/4_120721152925_1.jpg)
  13. //)
  14. return$TheSrc[1][0];
  15. //返回src地址,前面调用可以用[filed:filednamefunction=firstimg(@me)]调用具体为<imgsrc="[filed:filednamefunction=firstimg(@me)]"/>可随意控制样式
  16. }