Typecho 评论用户 IP 真实地址显示插件

注意:这个插件接口是基于我昨天刚刚更新的插件钩子,请确保你的代码已经升级至最新的开发版。

此插件的IP库基于 IPIP(https://ipip.net) 的免费地址库。
关于这个钩子的具体信息,我把昨天在 Telegram 频道(https://t.me/typechodev)里发的消息再次复制一遍

新增了一个大的插件钩子,可以对所有widget的默认魔术方法进行替换或者扩展。使用方法举例:

Typecho_Plugin::factory('Widget_Archive')->callSlug = array('Example_Plugin', 'slug');

当这样写的时候,你在模版里调用 $this->slug() 语句的时候,就不会执行系统的默认输出,而是使用你自定义的方法了。注意,这种替换仅限于替换系统的默认输出,对于一些系统已经实现的方法,比如文章的 $this->title() 方法并无效果,不过这类方法往往内部带有插件钩子,你去单个实现就好了。

这个钩子的作用不仅局限于替换现有的输出函数,还可以用来扩展没有实现的字段输出,比如我想检测用户评论时UA字段里的操作系统,在输出评论时让显示一个相应的操作系统 Logo ,以往的做法往往是单独实现一个函数,让用户在模版里调用 echo my_plugin_function($comments->agent); 这样的代码。

这样的方式显得非常不原生,而且对代码基础不好的用户来说也不好理解。现在你可以用上述的钩子来扩展一个不存在的方法,比如显示logo的这个需求

Typecho_Plugin::factory('Widget_Comments_Archive')->callFlag = array('Example_Plugin', 'flag');

用户在模版里调用 $comments->flag() 就可以了。这个接口有两个参数

  1. 第一个参数是当前 widget 的实例
  2. 第二个参数是调用这个方法是的参数数组,比如模版里调用 $comments->flag(1, 2, 3), 你的第二个参数就会收到 [1, 2, 3] 这个数组

使用方法很简单,上传附件中的插件至相应目录并激活后,不需要做任何事,进入评论管理页就会看到在评论用户ip地址下方显示了他所对应的地址

IMG_3407.JPG

除此之外,你也可以在前台模版里显示这个地址,调用的语句是

<?php $comments->location(); ?>

这个插件实际上是个抛砖引玉,有了这个钩子可以大大加强 Typecho 的扩展性,延伸出跟多好玩的应用。
下载地址在此https://joyqi.com/usr/uploads/IPLocation.zip

已有 4 条评论

  1. dcc dcc

    插件下载链接好像打不开

    1. joyqi joyqi

      不好意思,拼写错误。。。尴尬

  2. okgo okgo

    最近跟新挺频繁的,辛苦啦。

  3. 飞翔的企鹅 飞翔的企鹅

    上墙啦~