首页
   /       /   
Emlog通过标签名获取文章列表
11月
21
Emlog通过标签名获取文章列表
作者: 大彭Sir    分类: 随手笔记     正在检查是否收录...

在使用Emlog搭建博客时,通过标签名获取文章列表是常见的需求。以下是实现这一功能的详细方法和代码解析。

功能目标

通过标签名称获取对应的文章列表,并支持分页显示。


代码实现

我们将实现两个主要函数:

  1. tagSearchArticlesByName:通过标签名获取标签ID,并调用文章查询功能。
  2. tagSearchArticles:通过标签ID获取文章列表,并支持分页。

1. 通过标签名获取标签ID

function tagSearchArticlesByName($tag_name, $num_per_page) {
    $db = MySql::getInstance();

    // 防止 SQL 注入
    $tag_name = $db->escape_string($tag_name);

    // 获取标签 ID
    $sql_tag_id = "SELECT tid FROM " . DB_PREFIX . "tag WHERE tagname = '$tag_name'";
    $result_tag_id = $db->query($sql_tag_id);

    if (!$result_tag_id || !$db->num_rows($result_tag_id)) {
        echo '<p>标签不存在或无内容。</p>';
        return;
    }

    $row_tag_id = $db->fetch_array($result_tag_id);
    $tag_id = intval($row_tag_id['tid']);

    // 调用通过标签ID查询文章的函数
    tagSearchArticles($tag_id, $num_per_page);
}

2. 通过标签ID获取文章

function tagSearchArticles($tag_id, $num_per_page) {
    $db = MySql::getInstance();
    $page = isset($_GET['page']) && intval($_GET['page']) > 0 ? intval($_GET['page']) : 1;

    // 获取文章总数
    $sql_total = "SELECT COUNT(DISTINCT gid) as total FROM " . DB_PREFIX . "blog WHERE FIND_IN_SET('$tag_id', tags)";
    $result = $db->query($sql_total);
    $row_total = $db->fetch_array($result);
    $total_articles = $row_total['total'];

    // 计算分页
    $offset = ($page - 1) * $num_per_page;
    $total_pages = ceil($total_articles / $num_per_page);

    // 查询当前页文章 ID
    $sql_blog_ids = "SELECT DISTINCT gid FROM " . DB_PREFIX . "blog WHERE FIND_IN_SET('$tag_id', tags) LIMIT $offset, $num_per_page";
    $result_ids = $db->query($sql_blog_ids);

    $blog_ids = [];
    while ($row = $db->fetch_array($result_ids)) {
        $blog_ids[] = $row['gid'];
    }

    if (!empty($blog_ids)) {
        $ids_string = implode(',', $blog_ids);
        $sql_articles = "SELECT gid, title, date, cover, content, excerpt, views, comnum 
                         FROM " . DB_PREFIX . "blog 
                         WHERE gid IN ($ids_string) AND hide='n' ORDER BY `date` DESC";
        $result_articles = $db->query($sql_articles);

        while ($row = $db->fetch_array($result_articles)) {
            // 输出文章
            echo "<div>{$row['title']} - {$row['date']}</div>";
        }
    } else {
        echo '<p>没有找到相关文章。</p>';
    }

    // 输出分页
    for ($i = 1; $i <= $total_pages; $i++) {
        echo "<a href='?page=$i'>$i</a>";
    }
}

总结

通过以上代码,我们可以实现:

  • 按标签名检索:将标签名转换为ID。
  • 文章查询与分页:根据ID获取文章列表并支持分页。

希望这篇文章对您理解Emlog标签功能有所帮助!

本文标签: 标签: emlog 标签 Emlog博客系统
责任声明:本页信息由网友自行发布或来源于网络,真实性、合法性由发布人负责,请仔细甄别!本站只为传递信息,我们不做任何双方证明,也不承担任何法律责任。文章内容若侵犯你的权益,请联系本站删除!
转载声明:本文作者 大彭Sir,如需转载请保留文章出处!原文链接请自行复制!
收藏

评论

Theme By Brief 鄂ICP备19010459号

sitemap

首页

分类

友链