2009-06-15 7 views
1

Je construis un plugin, et je veux avoir une sous-table, afin que mes utilisateurs puissent cliquer sur les données de la vue d'ensemble, et afficher les données à partir de là.Piwik plugins

Après le code que j'ai pu glaner:

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; 
} 

Cependant, la sous-table montre jamais. Est-ce que je fais quelque chose de mal?

Répondre