菜鸟站长
个人博客主题模板、应用插件、功能开发技术资源聚合分享网站

Typecho判断插件是否激活

发布者:菜鸟站长-投稿  发布日期:2024-08-13  更新日期:2024-08-25  人气指数:145

做Typecho主题的时候有些地方可能需要用到特定的插件。调用插件前肯定是先判断一下插件是否激活,不然就会导致中断输出了。

过程式写法

<?php $all = Typecho_Plugin::export();?>
<?php if (array_key_exists('插件名称', $all['activated'])) : ?>
这里写调用插件的方法
<?php endif; ?>

面向对象写法

这种调用方式比较粗狂,不方便检查错误,我的建议是弄成一个工具类专门调用,但是吧,有时候我又不想重复写那么多函数,怎么办呢?还好,PHP有魔术方法__get

class XiampNetUtils extends Typecho_Widget
{
    private $_pluginsActivated;

    /**
     * 构造函数
     */
    public function __construct($request, $response, $params = null)
    {
        parent::__construct($request, $response, $params);
        $this->_pluginsActivated = Plugin::export()['activated'];
    }

    /**
     * 成员变量拦截
     *
     * @param $name
     * @return bool|mixed|string|null
     */
    public function __get($name)
    {
        if (strpos($name, 'is') === 0 && substr($name, -7) === 'Enabled') {
            // 支持 isXXXEnabled, XXX 代指插件名
            $plugin = substr($name, 2, -7);
            return $this->isPluginEnabled($plugin);
        } else {
            return parent::__get($name);
        }
    }

    public function isPluginEnabled($plugin): bool
    {
        return array_key_exists($plugin, $this->_pluginsActivated);
    }
}

怎么调用呢,在Typecho中调用是很简单的,把AAEditor换成你想判断的插件就行。

<?php
    if (Typecho_Widget::widget('XiampNetUtils')->isAAEditorEnabled) {
        // blah blah blah
    }

如果你想利用IDE自身的纠错,每用到一个插件,就跟着上边的注释添加就行。

如果是 Typecho1.2,还是以这么调用

<?php
    if (XiampNetUtils::alloc()->isAAEditorEnabled) {
        // blah blah blah
    }

得益于 Typecho 的设计,这么调用是单例模式,和上边过程写法的性能几乎是一致的。这么写也有好处,添加一次@property属性,IDE能自动补全啊。

本文检索关键词:功能代码 , typecho教程 , 主题开发

菜鸟站长推荐教程



添加新评论 »

icon_mrgreen.pngicon_neutral.pngicon_twisted.pngicon_arrow.pngicon_eek.pngicon_smile.pngicon_confused.pngicon_cool.pngicon_evil.pngicon_biggrin.pngicon_idea.pngicon_redface.pngicon_razz.pngicon_rolleyes.pngicon_wink.pngicon_cry.pngicon_surprised.pngicon_lol.pngicon_mad.pngicon_sad.pngicon_exclaim.pngicon_question.png