上次在给一个朋友解决一个织梦建站问题,他的需求是织梦列表list调用文章内容图片多个展示在列表,好久不玩好折腾了一阵子,现在直入主题。
1、在后台核心频道里面对内容模型进行修改,并给加一个字段body,如图:
2、在arclist或者list调用的时候,必须增加字段addfields="body",代码如下:
{dede:arclist addfields="body" channelid='1' }
{/dede:arclist}
{dede:list addfields="body"}
{/dede:list}
3、实际应用中必须配置调用文章内容自定义正则函数,这段代码要放在/include/extend.func.php里面,这里写上:
/**
* 文章内容提取图片(多张)自定义输出
*
* @access public
* @param string $string 文档内容
* @param string $num 输出几张
* @return string
*/
if(!function_exists('getBodypics'))
{
function getBodypics($string, $num)
{
preg_match_all("/<img([^>]*)\s*src=('|\")([^'\"]+)('|\")/",$string,$matches);
$imgsrc_arr = array_unique($matches[3]);
$count = count($imgsrc_arr);
$i = 0;
foreach($imgsrc_arr as $imgsrc)
{
if($i == $num) break;
$result .= "<li><img src=\"$imgsrc\"/></li>";
$i++;
}
return $result;
}
}
4、织梦arclist列表调用内容图片,代码:
{dede:arclist addfields="body" channelid="1"}
[field:body function="getBodypics(@me, 3)" /] //表示调用3张图片
{/dede:arclist}
5、文章列表list调用多张内容图片,首先要获取内容图片数量,然后根据数量决定显示图片以及调用的样式,这段代码要放在/include/extend.func.php里面,代码:
/**
* 获取图集图片数量
* @access public
* @param string $aid 文章id
* @return string
*/
function BodyImgNum($aid)
{
global $dsql;
$sql = "select aid,body from dede_addonarticle where aid='$aid' ";
$arcRow = $dsql->GetOne($sql);
$body = $arcRow['body'];
$img_array = array();
$patte="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/i";
preg_match_all($patte,$body,$img_array);
$img_array = array_unique($img_array[1]);
$num = count($img_array);
return $num;
}
6、在织梦list列表显示一张或者多张图片,代码:
{dede:list addfields="body"}
[field:array runphp="yes"]
$num = BodyImgNum(@me['id']);
$litpic = @me['litpic'];
$title = cn_substr(@me['title'],80);
$click = @me['click'];
$date = MyDate('Y-m-d',@me['pubdate']);
$pics = getBodypics(@me['body'],2);
$pics2 = getBodypics2(@me['body'],3);
$arcurl = getMobileArcUrl(@me['arcurl']);
@me = $num;
if($num == 2){
@me = "<div class='con2 mat15'>
<div class='conn'>
<div class='title2'><a href='{$arcurl}' title='{$title}'>$title</a></div>
<div class='mat10'>
<a href='{$arcurl}'>$pics</a>
</div>
<div class='clearfix'></div>
<div class='bottom2'><i class='fa fa-clock-o' aria-hidden='true'></i> $date <i class='fa fa-thumbs-o-up' aria-hidden='true' style='margin-left:7%;'></i> $click </div>
</div>
</div>";
}
elseif($num == 3){
@me = "<div class='con2 mat15'>
<div class='conn'>
<div class='title2'><a href='{$arcurl}' title='{$title}'>$title</a></div>
<div class='mat10'>
<a href='{$arcurl}'>$pics2</a>
</div>
<div class='clearfix'></div>
<div class='bottom2'><i class='fa fa-clock-o' aria-hidden='true'></i> $date <i class='fa fa-thumbs-o-up' aria-hidden='true' style='margin-left:7%;'></i> $click</div>
</div>
</div>";
}else{
@me = "<div class='con mat15'>
<div class='left'><a href='{$arcurl}'><img src='{$litpic}' alt='{$title}'></a></div>
<div class='right'>
<div class='title'><a href='{$arcurl}' title='{$title}'>$title</a></div>
<div class='mat10 bottom'><i class='fa fa-clock-o' aria-hidden='true'></i> $date <i class='fa fa-thumbs-o-up' aria-hidden='true' style='margin-left:7%;'></i> $click</div>
</div>
</div>";
}
[/field:array]
{/dede:list}
这里已经够详细了,如果需求不同可以自己扩展,转载请注明出处。