,{dede:field name='body' function='GetAttValue(@me,0)'/},
“,,3. 保存文件并重新生成文章页面,即可在页面中看到第一个图片的URL地址。,,解释:以上代码使用了dede:field标签来获取文章内容,并通过GetAttValue函数获取第一个图片的URL地址。@me表示当前文章对象,0表示获取第一个匹配的元素。在DEDECMS中,提取文章中第一张图片的URL地址可以通过多种方法实现,以下是一些具体的方法:
使用正则表达式提取图片URL
1、直接在文章内容模板中使用正则表达式:
在文章内容页模板中,可以使用以下代码来提取第一张图片的URL:
“`php
{dede:field.body runphp=’yes’}
preg_match(‘/<img.+src="?(.+.(jpg|gif|bmp|bnp|png))"?.+>/i’,@me,$match);
@me=$match[0];
{/dede:field.body}
“`
这段代码会在文章内容中查找第一张图片的标签,并提取其src
属性的值作为图片URL。
2、通过自定义函数提取图片URL:
可以在include/extend.func.php
文件中添加一个自定义函数来提取文章正文中的第一张图片URL:
“`php
/
* 文章内容提取第一张图片
* @access public
* @param string $id 文档id
* @param string $addField 字段名
* @return string
*/
if(!function_exists(‘getBodyonepic’))
{
function getBodyonepic($id, $addField=’body’)
{
global $dsql;
$row = $dsql>GetOne("SELECT a.litpic,c.addtable FROM #@__archives AS a LEFT JOIN #@__channeltype AS c ON a.channel=c.id where a.id=’$id’");
$addtable = trim($row[‘addtable’]);
if($row[‘litpic’] == ” || $row[‘litpic’] == ”)
{
$litpic = $GLOBALS[‘cfg_cmspath’].’/images/defaultpic.gif’;
}
$row = $dsql>GetOne("SELECT $addField FROM$addtable
WHERE aid=$id");
$body = $row["$addField"];
preg_match_all("/<img([^>]*)s*src=(‘|")([^’"]+)(‘|")/",$body,$matches);
$imgsrc_arr = array_unique($matches[3]);
$result = $imgsrc_arr[0] ? $imgsrc_arr[0] : $litpic;
return $result;
}
}
“`
在首页或列表页模板中,可以使用以下代码来调用该自定义函数并输出第一张图片的URL:
“`php
[field:id function=getBodyonepic(@me)/]
“`
3、针对图集模型提取图片URL:
如果是针对图集模型,可以通过处理附加表dede_addonimages
中的imgurls
字段来获取第一张大图的URL。
示例代码:
“`php
function get_firstbigimg($arcid){
$dsql = new DedeSql(false);
$row = $dsql>GetOne("Select imgurls From dede_addonimages where aid=’$arcid’");
preg_match_all("|{dede:img ddimg='(.*)’ text=(.*)|Uis",$row[‘imgurls’],$imgurls);
$get_firestimg = $imgurls[1][0];
return $get_firestimg;
}
“`
在频道首页模板里调用:
“`php
{dede:arclist row=3 orderby=pubdate typeid=’17’ type=’image.’ titlelen=’60’}
<div class="pic">
<a href="[field:arcurl/]" target="_blank"><img src="[field:first_imgurl/]" /><br />[field:title/]</a>
</div>
{/dede:arclist}
“`
常见问题解答(FAQs)
1、如何修改函数以提取第二张图片的URL?
要提取第二张图片的URL,只需将自定义函数中的$imgsrc_arr[0]
改为$imgsrc_arr[1]
即可,这会返回数组中的第二个元素,即第二张图片的URL。
2、如果文章内容中没有图片,如何处理?
如果文章内容中没有图片,可以设置一个默认的图片URL,在自定义函数中,如果$imgsrc_arr[0]
为空,则返回一个默认的图片URL,如$litpic
。
3、如何在首页或列表页上显示提取到的图片URL?
在首页或列表页上,可以使用[field:id function=getBodyonepic(@me)/]
标签来调用自定义函数并输出文章的第一张图片URL,这将确保每篇文章的第一张图片都能正确显示。
通过上述方法,你可以轻松地在DEDECMS中提取文章中第一张图片的URL地址,并在需要的地方进行显示,无论是直接使用正则表达式还是通过自定义函数,都能有效地满足你的需求。
在DedeCMS中提取文章中第一个图片的URL地址,可以通过以下步骤进行:
步骤一:获取文章内容
你需要获取到文章的HTML内容,在DedeCMS中,可以通过以下方式获取:
$articleId = 123; // 文章ID $article = $dsql>GetOne("SELECT content FROM dede_arctype WHERE id='$articleId'");
这里假设你已经有了文章的ID,并且使用DedeCMS的数据库操作函数$dsql>GetOne
来获取文章内容。
步骤二:解析HTML内容
你需要解析HTML内容以找到第一个图片的标签,可以使用正则表达式来实现:
$pattern = '/<img.*?src="(.*?)".*?>/i'; preg_match($pattern, $article['content'], $matches);
这里$pattern
是一个正则表达式,用于匹配包含<img>
标签的HTML代码,并捕获src
属性中的URL。
步骤三:获取图片URL
从匹配结果中提取第一个图片的URL地址:
$firstImageURL = $matches[1] ?? '';
这里$matches[1]
将包含第一个匹配的图片URL,如果没有任何匹配,$matches[1]
将是null
,所以使用??
操作符来提供一个空字符串作为默认值。
完整代码示例
以下是整合上述步骤的完整PHP代码示例:
<?php $articleId = 123; // 替换为你的文章ID $dsql = new DedeSql(false); // 初始化DedeCMS数据库操作对象 // 获取文章内容 $article = $dsql>GetOne("SELECT content FROM dede_arctype WHERE id='$articleId'"); // 解析HTML内容,获取第一个图片的URL $pattern = '/<img.*?src="(.*?)".*?>/i'; preg_match($pattern, $article['content'], $matches); // 获取图片URL $firstImageURL = $matches[1] ?? ''; // 输出结果 echo "第一个图片的URL地址是:" . $firstImageURL; ?>
这段代码将输出文章中第一个图片的URL地址,请确保在运行此代码之前,你已经正确设置了DedeCMS的环境和数据库连接。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1134538.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复