我是用DZ做的论坛,如何实现来路网址的最近三个的显示?

查看 203|回复 19
青萌   
2楼详细啊
胖子   
难度有点大哦 跟着ai试试看吧
初见   
现在有问题就问ai吧
嘿你好   
不懂不懂
建站营销推广   
难度有点大
康智   
用插件啊
ziyun   
Ai  年代  试一试吧  AI 真的可以
天才少年
OP
  

没有一个可以的啊
流量飞起来   
一、获取来路网址
     使用 `HTTP_REFERER` 服务器变量
1. 在 Discuz! 的全局初始化文件中(如 `source/class/class_core.php` 之后的逻辑),通过 `$_SERVER['HTTP_REFERER']` 获取来路网址。
2. 过滤无效值:
   ```php
   $referer = isset($_SERVER['HTTP_REFERER']) ? dhtmlspecialchars($_SERVER['HTTP_REFERER']) : '';
   if ($referer && strpos($referer, $_G['siteurl']) === false) {
       // 非站内跳转时记录
       update_referer_history($referer);
   }
   ```
二、存储最近三条记录
方案A:使用数据库存储
1. **新建数据表** (SQL示例):
   ```sql
   CREATE TABLE pre_referer_history (
       id INT PRIMARY KEY AUTO_INCREMENT,
       referer_url VARCHAR(512) NOT NULL,
       visit_time INT NOT NULL
   ) ENGINE=MyISAM;
   ```
2. 更新记录的PHP函数:
   ```php
   function update_referer_history($referer) {
       global $_G;
       C::t('referer_history')->insert(array(
           'referer_url' => $referer,
           'visit_time' => TIMESTAMP
       ));
       // 只保留最新3条,删除旧的
       C::t('referer_history')->delete_old(3);
   }
   ```
   在表类中实现 `delete_old` 方法:
   ```php
   class C::t('referer_history') extends discuz_table {
       public function delete_old($keep) {
           $ids = DB::fetch_all("SELECT id FROM ".DB::table('referer_history')." ORDER BY id DESC LIMIT $keep,1");
           if ($ids) {
               DB::delete('referer_history', "id  $referer, 'time' => TIMESTAMP));
       $history = array_slice($history, -3, 3); // 保留最后3条
       memory('set', 'referer_history', $history);
   }
三、在页面中显示
1. 获取数据
- **数据库查询**:
  ```php
  $referer_list = C::t('referer_history')->fetch_all(3);
  ```
- **缓存读取**:
  ```php
  $referer_list = memory('get', 'referer_history');
  ```
2. 模板中输出
在 `template/default/forum/discuz.htm` 适当位置添加:
```html
最近来路:

   
  • [url=]{$ref['url']}[/url]

    ```
    四、完整插件化步骤(推荐)
    1. 创建插件目录:`source/plugin/refererhistory/`。
    2. 编写插件主文件 `plugin.xml`**:
       ```xml
       
       
          
           来路网址记录
           1.0
           显示最近三个来路网址
          
               
                   update_referer_history();
               
          
       
       
    3. 在插件中实现逻辑这个有点难了
    通过上述步骤,你的 Discuz! 论坛将能够在页脚或侧边栏动态显示最近三个外部来路网址。
  • 阿狸先森   
    学习一下
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部