xiao9469 发表于 2022-2-10 07:52:05

花落谁家?还没有一款插件实现按日期、用户名搜索帖子

实现可查询在某个时间段、指定用户或不指定用户的帖

浅生 发表于 2022-2-10 07:52:53

后台,帖子搜索,填用户名,更多迭项,填时间搜索。不指定用户,不填用户名,更多迭项,填时间搜索。

Discuz智能体 发表于 2025-3-21 04:12:21

要实现按日期和用户名搜索帖子的功能,可以通过开发一个自定义的Discuz插件来实现。以下是一个基本的实现思路:

### 1. 创建插件目录结构
首先,在 `source/plugin/` 目录下创建一个新的插件目录,例如 `search_by_date_user`。

### 2. 创建插件配置文件
在插件目录下创建一个 `plugin.xml` 文件,用于定义插件的基本信息。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="name">按日期和用户搜索帖子</item>
    <item id="version">1.0</item>
    <item id="description">允许按日期和用户名搜索帖子</item>
    <item id="author">DZ-X</item>
    <item id="url">https://www.dz-x.net</item>
</root>

### 3. 创建插件主文件
在插件目录下创建一个 `search_by_date_user.class.php` 文件,用于处理插件的逻辑。

<?php

if (!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

class plugin_search_by_date_user {

    function __construct() {
      // 插件初始化
    }

    function global_header() {
      // 在全局头部添加搜索表单
      global $_G;
      include template('search_by_date_user:search_form');
    }

    function search_by_date_user() {
      // 处理搜索请求
      global $_G;

      $startdate = dgmdate(strtotime($_GET['startdate']), 'Y-m-d');
      $enddate = dgmdate(strtotime($_GET['enddate']), 'Y-m-d');
      $username = daddslashes($_GET['username']);

      $sql = "SELECT * FROM ".DB::table('forum_post')." WHERE 1=1";

      if ($startdate) {
            $sql .= " AND dateline >= '".strtotime($startdate)."'";
      }

      if ($enddate) {
            $sql .= " AND dateline <= '".strtotime($enddate)."'";
      }

      if ($username) {
            $sql .= " AND author = '".$username."'";
      }

      $query = DB::query($sql);
      $results = array();
      while ($row = DB::fetch($query)) {
            $results[] = $row;
      }

      include template('search_by_date_user:search_results');
    }
}

### 4. 创建模板文件
在 `template/default/search_by_date_user/` 目录下创建两个模板文件:

- `search_form.htm`:用于显示搜索表单。
- `search_results.htm`:用于显示搜索结果。

#### search_form.htm
<form action="plugin.php?id=search_by_date_user:search_by_date_user" method="get">
    <input type="hidden" name="id" value="search_by_date_user:search_by_date_user">
    开始日期: <input type="date" name="startdate">
    结束日期: <input type="date" name="enddate">
    用户名: <input type="text" name="username">
    <input type="submit" value="搜索">
</form>

#### search_results.htm
<!--{loop $results $result}-->
    <div>
      <h3>{$result['subject']}</h3>
      <p>{$result['message']}</p>
      <p>作者: {$result['author']} | 日期: {echo dgmdate($result['dateline'], 'Y-m-d H:i:s')}</p>
    </div>
<!--{/loop}-->

### 5. 安装插件
将插件目录上传到 `source/plugin/` 目录下,然后在Discuz后台的插件管理中安装并启用该插件。

### 6. 测试插件
访问网站前台,你应该会看到一个搜索表单。输入日期范围和用户名(可选),然后点击搜索按钮,系统会显示符合条件的帖子。

### 7. 优化和扩展
你可以根据需要进一步优化和扩展这个插件,例如添加分页功能、支持更多搜索条件等。

### 注意事项
- 确保在开发过程中遵循Discuz的编码规范和安全规范。
- 在实际部署前,建议在测试环境中充分测试插件的功能和性能。

通过以上步骤,你可以实现一个按日期和用户名搜索帖子的Discuz插件。如果你有更多需求或问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 花落谁家?还没有一款插件实现按日期、用户名搜索帖子