1

我正在构建一个插件,并且我想要一个子表,以便我的用户可以单击概览数据,并从那里显示数据。

按照我已经能够收集到的代码:

public function getCompanyList($idSite, $period, $date )
{
    $dataTable = new Piwik_DataTable();

    $query = Piwik_Query("SELECT cl.id, cl.company_name name, sf.id sf_id FROM sitedb.company_lookup cl INNER JOIN sitedb.storefronts sf ON cl.id = sf.company_id");
    while ($row = $query->fetch()) {
        $piwik_row = new Piwik_DataTable_Row;
        $piwik_row->setSubTable( $this->getProductsForCompany($idSite, $period, $date, $row['id']) );
        $piwik_row->setColumns( array('id' => $row['id'], 'Company Name' => $row['name']) );
        $dataTable->addRow($piwik_row);

    }
    return $dataTable;
}

public function getProductsForCompany($idSite, $period, $date, $company_id )
{
    if (!defined('PIWIK_ENABLE_DISPATCH')) define('PIWIK_ENABLE_DISPATCH', false);
    if (!defined('PIWIK_ENABLE_ERROR_HANDLER')) define('PIWIK_ENABLE_ERROR_HANDLER', false);
    require_once PIWIK_INCLUDE_PATH . "/index.php";
    require_once PIWIK_INCLUDE_PATH . "/core/API/Request.php";
    Piwik_FrontController::getInstance()->init();
    $request = new Piwik_API_Request('
            method=Actions.getActions
            &idSite=' . $idSite . '
            &date=' . $date . '
            &period=' . $period . '
            &format=PHP
            &filter_column=label
            &filter_pattern=product.php
            &filter_sort_column=nb_visits
            &filter_sort_order=desc
            &token_auth=anonymous
            ');
    $result = $request->process();

    // contains an array of visits to storefront.php
    $result = unserialize($result);

    $query = Piwik_Query("SELECT sp.product_id id, sp.name, sp.storefront_id sf_id, cl.company_name FROM sitedb.storefront_products sp INNER JOIN sitedb.storefronts sf ON sp.storefront_id = sf.id INNER JOIN sitedb.company_lookup cl ON sf.company_id = cl.id WHERE cl.id = {$company_id}");
    $dataTable = new Piwik_DataTable();

    while ($row = $query->fetch()) {
        // piwik returns & escaped to & -- make sure that's what you use to search!
        $this->array_search_in_level("/product.php?id=" . $row['id'] . "&sf_id=" . $row['sf_id'], $result, 'label', $storefront_array, 1);

        if (is_array($storefront_array) && array_key_exists('nb_visits', $storefront_array)) {
            $piwik_row = new Piwik_DataTable_Row;
            $piwik_row->setColumns( array('id' => $row['id'], 'Product Name' => $row['name'], 'Page Views' => $storefront_array['nb_visits']) );
            $dataTable->addRow($piwik_row);
        }
    }
    return $dataTable;
}

但是,子表永远不会出现。难道我做错了什么?

4

1 回答 1

0

也许您需要在 API 请求中添加“expanded=1”参数?

http://piwik.org/docs/analytics-api/reference/#toc-optional-api-parameters

如果您正在寻找有关如何使用 piwik 框架在插件中绘制自定义数据的示例代码,看起来他们有一些文档:Piwik plugins docs

于 2011-01-12T02:10:00.383 回答