2016-03-08 10 views
2

Чтобы написать собственный Piwik плагин Я следую учебник: http://piwik.org/blog/2014/09/create-widget-introducing-piwik-platform/Расширение Piwik для доступа ко всем данным запроса

Как я могу получить доступ к данным запроса, Piwik получает в плагине?

Sample виджет сверху ссылка:

class Widgets extends \Piwik\Plugin\Widgets 
{ 
    /** 
    * Here you can define the category the widget belongs to. You can reuse any existing widget category or define your own category. 
    * @var string 
    */ 
    protected $category = 'ExampleCompany'; 

    /** 
    * Here you can add one or multiple widgets. You can add a widget by calling the method "addWidget()" and pass the name of the widget as well as a method name that should be called to render the widget. The method can be defined either directly here in this widget class or in the controller in case you want to reuse the same action for instance in the menu etc. 
    */ 
    protected function init() 
    { 
     $this->addWidget('Example Widget Name', $method = 'myExampleWidget'); 
     $this->addWidget('Example Widget 2', $method = 'myExampleWidget', $params = array('myparam' => 'myvalue')); 
    } 

    /** 
    * This method renders a widget as defined in "init()". It's on you how to generate the content of the widget. As long as you return a string everything is fine. You can use for instance a "Piwik\View" to render a twig template. In such a case don't forget to create a twig template (eg. myViewTemplate.twig) in the "templates" directory of your plugin. 
    * 
    * @return string 
    */ 
    public function myExampleWidget() 
    { 
     $view = new View('@MyWidgetPlugin/myViewTemplate'); 
     return $view->render(); 
    } 
} 

Как получить доступ в плагине к Piwik данных получает для каждого запроса посетителя, такие как поля заголовка запроса?

ответ

0

Доступ к переменной с именем 'ImageID':

$imageId = Common::getRequestVar('imageId');

О заголовках: Piwik предоставляет список методов заголовков через ProxyHeaders класса. На данный момент есть только два общественных статические методы, которые могут быть потенциально интересны для вас: ProxyHeaders::getProxyClientHeaders, работая с

'HTTP_CF_CONNECTING_IP', 
'HTTP_CLIENT_IP', 
'HTTP_X_FORWARDED_FOR', 

и ProxyHeaders::getProxyHostHeaders для

'HTTP_X_FORWARDED_HOST' 

Оба эти методы называют еще один, который частный:

/** 
* Get headers present in the HTTP request 
* 
* @param array $recognizedHeaders 
* @return array HTTP headers 
*/ 
private static function getHeaders($recognizedHeaders) 
{ 
    $headers = array(); 

    foreach ($recognizedHeaders as $header) { 
     if (isset($_SERVER[$header])) { 
      $headers[] = $header; 
     } 
    } 

    return $headers; 
} 

Поскольку метод getHeaders является частным и он фактически не делает то, что вы хотите, возможно, самым простым способом было бы просто читать заголовки непосредственно с $_SERVER.

Она будет работать следующим образом: если у вас есть заголовок с именем "мой-тест-заголовка" и значением "123":

$_SERVER['HTTP_MY_TEST_HEADER'] // returns "123" 

=> «приложение "Content-Type"/ х-WWW -форма-urlencoded»

$_SERVER['HTTP_CONTENT_TYPE'] // returns "application/x-www-form-urlencoded" 

т.д.

одно замечание о веб-серверах, будь то Apache или Nginx или любой другой, конфигурация действительно имеет значение здесь, особенно для HTTP_X_FORWARDED_FOR заголовка.

+0

код, который вы отправили, нужно ли его содержать внутри плагина? –

+0

@ blue-sky метод в моем сообщении - единственный метод, который работает с заголовками, но поскольку он не решает вашу задачу, вы можете получить доступ к заголовкам непосредственно из плагина через этот вызов '$ _SERVER ['HTTP_MY_TEST_HEADER'] ' – Axalix

+0

код, который вы опубликовали, может быть запущен за пределами плагина? –