|
|
|
|
@ -4,29 +4,37 @@ from djangoblog.plugin_manage.hook_constants import ARTICLE_CONTENT_HOOK_NAME
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ArticleCopyrightPlugin(BasePlugin):
|
|
|
|
|
PLUGIN_NAME = '文章结尾版权声明'
|
|
|
|
|
PLUGIN_DESCRIPTION = '一个在文章正文末尾添加版权声明的插件。'
|
|
|
|
|
PLUGIN_VERSION = '0.2.0'
|
|
|
|
|
PLUGIN_AUTHOR = 'liangliangyy'
|
|
|
|
|
# 插件基本信息定义
|
|
|
|
|
PLUGIN_NAME = '文章结尾版权声明' # 插件名称,用于在管理界面显示
|
|
|
|
|
PLUGIN_DESCRIPTION = '一个在文章正文末尾添加版权声明的插件。' # 插件功能描述
|
|
|
|
|
PLUGIN_VERSION = '0.2.0' # 插件版本号
|
|
|
|
|
PLUGIN_AUTHOR = 'liangliangyy' # 插件作者
|
|
|
|
|
|
|
|
|
|
# 2. 实现 register_hooks 方法,专门用于注册钩子
|
|
|
|
|
# 2. 实现钩子注册方法,用于将插件功能绑定到系统钩子
|
|
|
|
|
def register_hooks(self):
|
|
|
|
|
# 在这里将插件的方法注册到指定的钩子上
|
|
|
|
|
# 将当前插件的add_copyright_to_content方法注册到文章内容钩子
|
|
|
|
|
# 当系统触发ARTICLE_CONTENT_HOOK_NAME钩子时,会自动执行该方法
|
|
|
|
|
hooks.register(ARTICLE_CONTENT_HOOK_NAME, self.add_copyright_to_content)
|
|
|
|
|
|
|
|
|
|
def add_copyright_to_content(self, content, *args, **kwargs):
|
|
|
|
|
"""
|
|
|
|
|
这个方法会被注册到 'the_content' 过滤器钩子上。
|
|
|
|
|
它接收原始内容,并返回添加了版权信息的新内容。
|
|
|
|
|
具体的插件功能实现:在文章内容末尾添加版权声明
|
|
|
|
|
该方法会被注册到文章内容处理的钩子上,接收原始内容并返回处理后的内容
|
|
|
|
|
"""
|
|
|
|
|
# 从关键字参数中获取当前文章对象
|
|
|
|
|
article = kwargs.get('article')
|
|
|
|
|
# 如果没有文章对象(如非文章场景),直接返回原始内容
|
|
|
|
|
if not article:
|
|
|
|
|
return content
|
|
|
|
|
|
|
|
|
|
# 构造版权声明内容,包含文章作者信息
|
|
|
|
|
copyright_info = f"\n<hr><p>本文由 {article.author.username} 原创,转载请注明出处。</p>"
|
|
|
|
|
# 将版权声明追加到原始内容末尾并返回
|
|
|
|
|
return content + copyright_info
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 3. 实例化插件。
|
|
|
|
|
# 这会自动调用 BasePlugin.__init__,然后 BasePlugin.__init__ 会调用我们上面定义的 register_hooks 方法。
|
|
|
|
|
# 3. 实例化插件
|
|
|
|
|
# 实例化时会自动调用父类BasePlugin的__init__方法,
|
|
|
|
|
# 父类初始化过程中会调用当前类的register_hooks方法完成钩子注册,
|
|
|
|
|
# 从而使插件功能生效
|
|
|
|
|
plugin = ArticleCopyrightPlugin()
|
|
|
|
|
|