Página anterior | Voltar ao início do trabalho | Página seguinte |
Para instalar o Shortstat, edite o arquivo configuration.php colocando nas variáveis:
<?php
$SI_db['server']="servidor_do_mysql";
$SI_db['username']="username_do_mysql";
$SI_db['password']="senha_do_mysql";
$SI_db['database']="nome_do_banco_de_dados";
$tz_offset=seu_fuso_horario;
$shortstat=true;
?>
E rode o script de instalação (_install.php) no seu browser. Ele irá criar as tabelas no seu banco de dados. Daí basta acrescentar:
<?php @include_once("diretorio_do_shortstat/inc.stats.php"); ?>
... no início de cada arquivo que você quer que sejam contadas as estatísticas.
Antes de instalar o ip-to-country, eu criei uma coluna chamada codigopais no banco de dados MySql e modifiquei o arquivo functions.php criando uma função chamada verCodigoPais:
<?php
function verCodigoPais($ip) {
if (!SI_isIPtoCountryInstalled()) return '';
global $SI_tables;
$ip = sprintf("%u",ip2long($ip));
$query="SELECT country_code2 AS codigo FROM $SI_tables[countries] WHERE ip_from <= $ip AND ip_to >= $ip";
if ($result=mysql_query($query)) {
if ($r = mysql_fetch_array($result)) {
return $r['codigo'];
}
}
}
?>
No arquivo inc.stats.php, depois de atribuir um valor para a variável $ip, coloquei:
<?php
$cd = verCodigoPais($ip);
?>
... e depois de colocar valor em todas as variáveis alterei a $query para:
<?php
$query = "INSERT INTO $SI_tables[stats] (remote_ip, country, codigopais,
domain, referer, resource, user_agent, platform, browser, version, dt)
VALUES ('$ip', '$cntry', '$cd', '$domain', '$ref', '$res', '$ua', '$br[platform]',
'$br[browser]', '$br[version]', $dt)";
?>
(a única mudança foi a adição da variável cd - que contém o código do país - no campo codigopais do banco de dados)
Agora basta imprimir a bandeira do país... Para isso, no arquivo functions.php alterei a função SI_getCountries:
<?php
function SI_getCountries() {
global $SI_tables,$_SERVER;
$query = "SELECT country, codigopais, COUNT(distinct(remote_ip)) AS 'total'
FROM $SI_tables[stats]
WHERE country!=''
GROUP BY country
ORDER BY total DESC";
if ($result = mysql_query($query)) {
$ul = "<table cellpadding="0" cellspacing="0" border="0">n";
$ul .= "t<tr><th>Country</th><th class="last">Visits</th></tr>n";
$i=0;
while ($r = mysql_fetch_array($result)) {
if ($i < 36) {
$url = parse_url($r[referer]);
$ul .= "t<tr><td><img src="http://ip-to-country.webhosting.info/flag/?type=3&cc2=$r[codigopais]" alt="$r[codigopais]" /> $r[country]</td><td class="last">$r[total]</td></tr>n";
$i++;
}
}
$ul .= "</table>";
}
return $ul;
}
?>
(note que a imagem é buscada direto do servidor do ip-to-country)
Então, agora é só instalar o ip-to-country, mas o arquivo de instalação só está servindo para colocar o nome do país no banco de dados (não o código). Basta modificar o arquivo _ip-to-country.php, alterando:
<?php
echo "<p>Mapping existing IPs to countries.</p>";
// Match existing ips to countries
$query = "SELECT id,remote_ip FROM $SI_tables[stats] WHERE country=''";
if ($result = mysql_query($query)) {
while ($r = mysql_fetch_array($result)) {
$country = SI_determineCountry($r[remote_ip]);
$query = "UPDATE $SI_tables[stats] SET country='$country' WHERE id=$r[id]";
mysql_query($query);
}
}
?>
... para...
<?php
echo "<p>Mapping existing IPs to countries.</p>";
// Match existing ips to countries
$query = "SELECT id,remote_ip FROM $SI_tables[stats] WHERE country=''";
if ($result = mysql_query($query)) {
while ($r = mysql_fetch_array($result)) {
$country = SI_determineCountry($r[remote_ip]);
$cd = verCodigoPais($r[remote_ip]);
$query = "UPDATE $SI_tables[stats] SET country='$country' AND codigopais='$cd' WHERE id=$r[id]";
mysql_query($query);
}
}
?>
Daí é só rodar o arquivo _ip-to-country.php e o ip-to-country estará funcionando junto com o shortstat com bandeira do lado do país!
Eu alterei a função SI_getPlatforms por:
<?php
function SI_getPlatforms() {
global $SI_tables;
$th = SI_getUniqueHits();
$query = "SELECT platform, COUNT(distinct(remote_ip)) AS 'total'
FROM $SI_tables[stats]
GROUP BY platform
ORDER BY total DESC";
if ($result = mysql_query($query)) {
$ul = "<table cellpadding="0" cellspacing="0" border="0">n";
$ul .= "t<tr><th>Platform</th><th class="last">%</th></tr>n";
while ($r = mysql_fetch_array($result)) {
$ul .= "t<tr><td>$r[platform]</td><td class="last">".number_format(($r[total]/$th)*100)."%</td></tr>n";
}
$ul .= "</table>";
}
return $ul;
}
?>
A mudança foi o count usar distinct(remote_ip) e o $th ter o valor dos hits únicos (daí a porcentagem é contada a partir deles). A mudança na função SI_getBrowsers é semelhante:
<?php
function SI_getBrowsers() {
global $SI_tables;
$th = SI_getUniqueHits();
$query = "SELECT browser, version, COUNT(distinct(remote_ip)) AS 'total'
FROM $SI_tables[stats]
WHERE browser != 'Indeterminable'
GROUP BY browser, version
ORDER BY total DESC";
if ($result = mysql_query($query)) {
$ul = "<table cellpadding="0" cellspacing="0" border="0">n";
$ul .= "t<tr><th>Browser</th><th>Version</th><th class="last">%</th></tr>n";
while ($r = mysql_fetch_array($result)) {
$p = number_format(($r[total]/$th)*100);
// $p = ($p==0)?"<1":$p;
if ($p>=1) {
$ul .= "t<tr><td>$r[browser]</td><td>$r[version]</td><td class="last">$p%</td></tr>n";
}
}
$ul .= "</table>";
}
return $ul;
}
?>
Assim temos um Shortstat configurado para as minhas necessidades. Eu gosto assim, mas por ser um sistema de código bastante simples em PHP você pode configurar mais o que quiser. Eu traduzi (é só modificar as coisas no index.php) também (não tem uma grande utilidade, mas não custa...)
Tiago Madeira - tmadeira[arroba]gmail.com
Página anterior | Voltar ao início do trabalho | Página seguinte |
|
|