2010-08-12 16 views
1

Je reçois une erreur PHP fatale en essayant d'exécuter mon script: Using $this when not in object context Le script collecte des données de Google Analytics via l'API, puis les affiche sur une page.

Ci-dessous le morceau de code où le script meurt:

$records = $this->getAnalyticRecords (date ('Y-m-d', $startTime), date ('Y-m-d', $endEnd), 'ga:date', 'ga:visitors,ga:newVisits,ga:visits,ga:pageviews,ga:timeOnPage,ga:bounces,ga:entrances,ga:exits'); 

getAnalyticsRecords est défini par:

function getAnalyticRecords($startDate, $endDate, $dimensions, $metrics, $sort = '', $maxResults = '') { 

    $url = 'https://www.google.com/analytics/feeds/data'; 
    $url .= "?ids=" . $this->profile; 
    $url .= "&start-date=" . $startDate; 
    $url .= "&end-date=" . $endDate; 
    $url .= "&dimensions=" . $dimensions; 
    $url .= "&metrics=" . $metrics; 
    if (! empty ($sort)) { 
     $url .= "&sort=" . $sort; 
    } 
    if (! empty ($maxResults)) { 
     $url .= "&max-results=" . $maxResults; 
    } 
    if (($feedData = $this->fetchFeed ($url)) === FALSE) { 
     return array(); 
    } 
    $doc = new DOMDocument (); 
    $doc->loadXML ($feedData); 
    $results = array(); 

    $aggregates = $doc->getElementsByTagName ('aggregates'); 
    foreach ($aggregates as $aggregate) { 
     $metrics = $aggregate->getElementsByTagName ('metric'); 
     foreach ($metrics as $metric) { 
      $results ['aggregates'] ['metric'] [$metric->getAttribute ('name')] = $metric->getAttribute ('value'); 
     } 
    } 

    $entries = $doc->getElementsByTagName ('entry'); 
    foreach ($entries as $entry) { 
     $record = array(); 
     $record ["title"] = $entry->getElementsByTagName ('title')->item (0)->nodeValue; 
     $dimensions = $entry->getElementsByTagName ('dimension'); 
     foreach ($dimensions as $dimension) { 
      $record ['dimension'] [$dimension->getAttribute ('name')] = $dimension->getAttribute ('value'); 
     } 
     $metrics = $entry->getElementsByTagName ('metric'); 
     foreach ($metrics as $metric) { 
      $record ['metric'] [$metric->getAttribute ('name')] = $metric->getAttribute ('value'); 
     } 
     $results ['entry'] [] = $record; 
    } 
    return $results; 
} 

Répondre

2

Vous devriez écouter l'erreur. Vous utilisez $this lorsque vous n'êtes pas dans une classe. Essayez d'inclure votre code dans une classe ou d'omettre le code $this->. Utilisez global à la place.

+0

Étant donné que le second code donné est dans une classe, comment puis-je réintroduire cette classe? Peut-être '$ xfplugin = new googleAnalyticsPlugin;' – bear

+0

@ ct2k7 si getAnalyticRecords() est une méthode d'une classe appelée googleAnalyticsPlugin, alors oui. '$ xfplugin = new googleAnalyticsPlugin; $ records = $ xfplugin-> getAnalyticRecords (...); ' – timdev

+0

Merci timdiv et Borealid :) – bear