注意:这个插件接口是基于我昨天刚刚更新的插件钩子,请确保你的代码已经升级至最新的开发版。
此插件的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() 就可以了。这个接口有两个参数
- 第一个参数是当前 widget 的实例
- 第二个参数是调用这个方法是的参数数组,比如模版里调用
$comments->flag(1, 2, 3)
, 你的第二个参数就会收到[1, 2, 3]
这个数组
使用方法很简单,上传附件中的插件至相应目录并激活后,不需要做任何事,进入评论管理页就会看到在评论用户ip地址下方显示了他所对应的地址
除此之外,你也可以在前台模版里显示这个地址,调用的语句是
<?php $comments->location(); ?>
这个插件实际上是个抛砖引玉,有了这个钩子可以大大加强 Typecho 的扩展性,延伸出跟多好玩的应用。
下载地址:https://github.com/joyqi/typecho-plugins/releases/download/latest/IPLocation.zip
插件下载链接好像打不开
不好意思,拼写错误。。。尴尬
最近跟新挺频繁的,辛苦啦。
上墙啦~
hehe
已经下载使用,很不错啊
这个魔术钩子还能自行判断输出,避免了以往模版引用插件方法不加判断就会在禁用插件时报错的麻烦,真是方便!:D
大佬,我想问下1.1正式版怎么改才能正常使用呀?正式版装了不显示,请多多指教。
前台调用<?php $comments->location(); ?>后访问网站,报错Call to a member function location() on null
您好,在ipv6地址有如下错误:
Warning: array_unique() expects parameter 1 to be array, string given in /www/wwwroot/blog.uniartisan.com/usr/plugins/IPLocation/Plugin.php on line 68
Warning: implode(): Invalid arguments passed in /www/wwwroot/blog.uniartisan.com/usr/plugins/IPLocation/Plugin.php on line 69
谢谢分享,mark之。
真不愧是个大佬,太有先见之明了,你可曾想你17年的想法,在2022年走遍了中国互联网?现在国家要求各平台都要显示归属地,灵感不会是来自你吧(牛🐮)
2017年研究出的功能,2022年被互联网全面应用,这是多么震惊的事呀,连作者当初都没有想到,自己一时开发的东西,会被互联网而接纳,有头脑的人改变世界,麻木的人被世界而改变。