• 技术文章 >php教程 >php手册

    PHP问题汇总(一)

    2016-06-06 19:40:17原创488

    1 typecho插件Digg 搭建typecho时,在官网下载了一个插件Digg是一个顶踩插件,安装好后在后台可以激活并配置,但是前台没变化。这是怎么回事? 开始以为时自己配置不对,反反复复了插件使用教程没搞明白怎么回事,于是怀疑代码有 问题 ,去看了插件编写教程

    1 typecho插件Digg

    搭建typecho时,在官网下载了一个插件Digg是一个顶踩插件,安装好后在后台可以激活并配置,但是前台没变化。这是怎么回事?

    开始以为时自己配置不对,反反复复了插件使用教程没搞明白怎么回事,于是怀疑代码有问题,去看了插件编写教程,HelloWord。详细在这里。

    1. 插件分析
    插件功能,是为了实现用户登录后,在后台菜单导航栏输出欢迎话语,所以我们要做的,就是找找后台菜单文件,是否有提供到此类功能的插件接口。一般来说,用哪个接口来实现功能,是要看我们要写的插件,用到哪一方面的功能,或者实现哪些效果来判断,再到对应的文件去寻找。很幸运,我们在 /admin/menu.php 中找到了以下接口,大概在第7行左右:
    
    navBar(); ?>
    这就是我们要在激活插件里要写入的接口代码。插件接口,常以下面的两种方式出现:
    
    Typecho_Plugin::factory()->function();
    $this->pluginHandle()->function();
    我们找好接口代码后,下面便开始编写我们的插件代码。
    
    2. 编写代码
    平常编写代码的顺序,基本按照默认办法出现的顺序来编写。所以,我们先开始写激活接口代码:
    
    public static function activate()
    {
        Typecho_Plugin::factory('admin/menu.php')->navBar = array('HelloWorld_Plugin', 'render');
    }

    在插件得activate函数里会让程序得一个插件函数调用自己插件里得函数render。


    但是Digg插件里得activate函数除了操作数据库外没有其他得代码,这怎么影响到前台的显示了。继续看代码。Digg里有一个output函数

        /**
         * 输出方法
         * 
         * @access public
         * @return void or array
         */
        public static function output($return = false, $dump = false)
        {
            //防止未激活插件输出错误信息,可注释掉
            $all = Typecho_Plugin::export();
            if (!array_key_exists('Digg', $all['activated'])) {		
    		return;
    	}
            //获取相关设置
            $setting = Helper::options()->plugin('Digg');
    
            $items = explode('|', $setting->items);
            $items_echo = explode('|', $setting->items_echo);
            if (count($items) != count($items_echo) || empty($items[0])) {
                echo "插件项目配置错误";
                return;
            }
            //digg 提交地址
            $post_url = Typecho_Common::url('action/Digg', Helper::options()->index);
            //digg 表情地址
            $img_url = Helper::options()->pluginUrl . '/Digg/img/';
    
            //获取日志digg数据
            $db = Typecho_Db::get();
            $cid = Typecho_Widget::widget('Widget_Archive')->cid;
            $rows = $db->fetchAll($db->select('item', 'count')->from('table.digg')->where('cid = ?', $cid));
    
            $result = array();
            $result['items'] = @array_combine($items, $items_echo);
            $result['imgurl'] = $img_url;
            $result['cid'] = $cid;
            $result['count'] = 0;
            foreach ($rows as $k => $v) {
                if (isset($result['items'][$v['item']])) {
                $result['count'] += $v['count'];
                $result[0][$v['item']] = $v;
                }
            }
            //print_r($result);
            unset($rows);
    
            //输出js及css
            echo $setting->src;
    
            /* 用法1        按插件自定义格式输出 也可自己修改输出格式*/
            if (!$return) {
                echo "';
                return;
            }
    
            /* 用法2    将digg数据以数组形式返回,自定义html结构  可外加参数true查看返回数据*/
            if ($dump) var_dump($result);   //var_dump
            return $result;
        }

    里面注释了用法1和用法2。这才明白过来,使用用法1
    放到前台得模板页面里,如下图


    这样前台首页的每个文章就有顶踩功能了

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    上一篇:CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• mysql 数据备份类代码• PHP类中的魔术方法(Magic Method)简明总结,magicmethod• 解析用PHP实现var_export的详细介绍• Xgcalendar 新增Php demo• 用PHP向数据库中实现简单的增删改查(纯代码,待完善),php增删
    1/1

    PHP中文网