繁体   English   中英

pyrocms扩展核心插件

[英]pyrocms extending core plugin

我将扩展分析插件。我想要获得最受欢迎的页面。 我阅读了Google api文档。 很棒的事情是,已经有一个PHP库可以从Google Analytics(分析)API中获取数据(太好了!),而且在pyro核心文件中也有一个不错的插件。 我的意思是Plugin_Integration。

现在,我要向此插件添加新方法。 同样,编辑核心文件也不是一个好主意。 因此,有两种方法:

1-将插件重新实现为共享插件(复制已经存在的代码)2-扩展核心插件。

但不幸的是,我不知道如何扩展核心插件。 :(

核心中的粘贴如下所示:

<?php defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * Integration Plugin
 *
 * Attaches a Google Analytics tracking piece of code.
 *
 * @author      PyroCMS Dev Team
 * @package     PyroCMS\Core\Plugins
 */
class Plugin_Integration extends Plugin
{

    /**
     * Partial
     *
     * Loads Google Analytic
     *
     * Usage:
     *   {{ integration:analytics }}
     *
     * @return string The analytics partial view.
     */
    function analytics()
    {
        return $this->load->view('fragments/google_analytics', NULL, TRUE);
    }

    /**
     * Visitors
     *
     * Uses Google Analytics data to show page views 
     * and visitors for a given time period
     *
     * Usage:
     *   {{ integration:visitors }}
     *
     * @return array The number of page views and visitors.
     */
    public function visitors()
    {
        $data       = array('visits' => 0, 'views' => 0);
        $start      = $this->attribute('start', '2010-01-01');
        $end        = $this->attribute('end', date('Y-m-d'));
        $refresh    = $this->attribute('refresh', 24); // refresh the cache every n hours

        if (Settings::get('ga_email') and Settings::get('ga_password') and Settings::get('ga_profile'))
        {
            // do we have it? Return it
            if ($cached_response = $this->pyrocache->get('analytics_plugin'))
            {
                return $cached_response;
            }

            else
            {
                try
                {
                    $this->load->library('analytics', array(
                        'username' => Settings::get('ga_email'),
                        'password' => Settings::get('ga_password')
                    ));

                    // Set by GA Profile ID if provided, else try and use the current domain
                    $this->analytics->setProfileById('ga:'.Settings::get('ga_profile'));

                    $this->analytics->setDateRange($start, $end);

                    $visits = $this->analytics->getVisitors();
                    $views  = $this->analytics->getPageviews();

                    if ($visits)
                    {
                        foreach ($visits as $visit)
                        {
                            if ($visit > 0) $data['visits'] += $visit;
                        }
                    }

                    if ($views)
                    {
                        foreach ($views as $view) 
                        {
                            if ($view > 0) $data['views'] += $view;
                        }
                    }

                    // Call the model or library with the method provided and the same arguments
                    $this->pyrocache->write($data, 'analytics_plugin', 60 * 60 * (int) $refresh); // 24 hours
                }

                catch (Exception $e)
                {
                    log_message('error', 'Could not connect to Google Analytics. Called from the analytics plugin');
                }
            }

            return $data;
        }
    }
}

我需要添加这样的方法,但是要在单独的插件中进行扩展

public function most_viewed()
{//the logic}

任何人都可以给个建议吗?

PyroCMS没有扩展内核中任何内容的功能,当然,复制代码不是最好的主意。 因此,这就是我要做的:创建您自己的库,但扩展前一个库。

因此,您需要在类定义之前包含旧库的文件,然后执行

class My_lib extends The_lib

不完美,但我猜是最好的选择。

PS:如果您对lib的扩展充满信心,为什么不将其提交到PyroCMS存储库?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM