Emlog Pro获取文章封面函数修改指南
Emlog Pro 程序后,官方引入了 Markdown 编辑器。由于 Markdown 编辑器的特殊性,数据库中存储的是 Markdown 语法而非 HTML 代码,这导致之前用于获取文章封面的函数无法正常工作。为了解决这个问题,我们需要对获取文章封面的函数进行更新,使其能够兼容 Markdown 语法。
以下是修改后的函数及调用方法,该函数能够智能地获取文章封面,具体逻辑如下:
- 如果文章设置了封面,则直接读取
cover
参数。 - 如果没有设置封面,则从正文内容中获取第一张图片作为封面。
- 如果前两者都没有,则返回一个随机封面。
修改步骤
1. 在模板的 module.php
文件中添加以下函数:
<?php
/**
* 获取指定文章的封面图
*
* @param int $gid 文章ID
* @return string 封面图片地址
*/
function getBlogCover($gid = null) {
// 缺省默认图,请根据实际情况更改地址
$imgUrl = TEMPLATE_URL . 'static/img/random/' . rand(0, 9) . '.jpg';
if (!empty($gid)) {
$db = Database::getInstance();
$sql = "SELECT content, cover FROM " . DB_PREFIX . "blog WHERE gid='$gid'";
$data = $db->once_fetch_array($sql);
if (!empty($data['cover'])) {
$imgUrl = ltrim($data['cover'], '.');
} else {
// Markdown 图片语法匹配正则表达式
$regExp_md = '|!\[(.*)\]\((.+)\)|i';
// HTML 图片标签匹配正则表达式
$regExp_html = '|<img[^>]+src=\"([^>\"]+)\"?[^>]*>|is';
preg_match($regExp_md, $data['content'], $mdMatches);
preg_match($regExp_html, $data['content'], $htmlMatches);
if (isset($mdMatches[2]) && isset($htmlMatches[1])) {
$mdPosition = strpos($data['content'], $mdMatches[2]);
$htmlPosition = strpos($data['content'], $htmlMatches[1]);
// 优先使用 Markdown 语法中的图片
if ($mdPosition < $htmlPosition) {
$imgUrl = $mdMatches[2];
} else {
$imgUrl = $htmlMatches[1];
}
} elseif (isset($mdMatches[2])) {
$imgUrl = $mdMatches[2];
} elseif (isset($htmlMatches[1])) {
$imgUrl = $htmlMatches[1];
} }
}
return $imgUrl;}
?>
2. 在需要显示封面的位置添加以下调用代码:
<img src="<?php echo getBlogCover($value['logid']); ?>" alt="Article Cover">
说明
- 默认封面:函数开始时定义了一个默认封面图片的 URL,如果文章没有设置封面且正文内容中也没有图片,则会使用这个默认封面。
- 正则表达式:使用正则表达式分别匹配 Markdown 语法中的图片和 HTML 标签中的图片。
- 优先级:如果文章中同时包含 Markdown 语法的图片和 HTML 标签的图片,函数会优先使用 Markdown 语法中的图片作为封面。
- 调用方式:在需要显示封面的位置,使用
getBlogCover
函数并传入文章的 ID(通常是通过循环中的$value['logid']
获取)。
通过以上修改,你的 Emlog Pro 模板将能够智能地获取并显示文章的封面图片,无论是通过 Markdown 编辑器还是传统的 HTML 方式添加的图片。
请登录后发表评论
注册
社交账号登录
停留在世界边缘,与之惜别