Archive

Posts Tagged ‘php’

PHP tutorial: Criar uma Tag Cloud

October 1st, 2008 Lounge22 No comments

Uma das formas de navegação introduzidas com o surgimento da Web 2.0 foi a navegação através de Tags.
Uma tag é nada mais nada menos que uma keyword que define algo. Se escrevo num site de informática sobre um processador, esse artigo pode ser marcado com uma keyword processadores, desta forma a pesquisa por artigos relacionados com processadores é simplificada.

Criar uma tag cloud não é um processo complexo. Básicamente precisas de ter uma fonte onde vais buscar as tags, normalmente é um vector onde são definidas e depois armazenadas em base de dados e a partir daí trabalhas o código. Vamos então começar.

< ?php
// cria a ligação á base de dados
$query = "SELECT coluna_da_bd AS tag, COUNT(id) AS quantity
FROM tabela
GROUP BY coluna_da_bd
ORDER BY coluna_da_bd ASC";
$result = mysql_query($query);

No código em cima vamos seleccionar qual é a coluna da base de dados que vamos usar para definir as tags.

while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}

$tags[$row['tag']] – vector $tag recebe as keywords da base de dados.
$row['quantity'] – devolve a quantidade de vezes que a keyword existe.

Exemplo

$tag[processadores] = 2; – A palavra processadores existe 2x na pesquisa efectuada.
A quantidade de vezes que a palavra existe é útil para definir o tamanho da tag.


$max_size = 300;
$min_size = 100;

Aqui defines o tamanho mínimo e máximo das fontes. Para que funcione bem com qualquer estilo definido no CSS prefiro interpretar os valores em percentagem (%) em vez de pixels ou qualquer outra medida.

$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));

Agora é preciso definir quais as keywords com os valores máximos e mínimos do vector $tags e saber qual é o alcance desses valores de forma a podermos calcular o tamanho da fonte.

$spread = $max_qty - $min_qty;
if (0 == $spread) {
$spread = 1;
}

Uma vez feito isso vamos agora determinar o tamanho da fonte.

$step = ($max_size - $min_size)/($spread);
foreach ($tags as $key => $value) {
// Vamos encontrar o $value superior a $min_qty
// multiplicamos esse valor pelo tamanho da fonte ($size)
// E adicionamos o $min_size definido anteriormente
$size = $min_size + (($value - $min_qty) * $step);
// Colocamos o valor em forma de poder ser calculado em percentagem (%)
$size = ceil($size);

// Adicionar link ás tags
echo '<a href="#" style="font-size: '.$size.'%"';
// ajustar o tooltip gerado pelo atributo title do link
echo ' title="'.$value.' ( '.$key.' )"';
echo '>'.$key.' ';
}
?>

E pronto se tudo correu bem deverás ter uma tag cloud. Para limitar os resultados mostrados na tagcloud basta definires o limite quando fazes a consulta á base de dados:

$query = "SELECT coluna_da_bd AS tag, COUNT(id) AS quantity LIMIT 25
Desta forma a tua tagcloud mostra 25 tags.

Categories: Tutoriais, Web Design Tags: ,

Tutorial PHP: Alexa Rank

August 5th, 2008 Lounge22 No comments

Embora muitos já usam o alexa rank para definir tops, estatutos, etc… mas pouca gente conhece o método de o usar sem ser através de aplicações já disponíveis na net.

Neste tutorial vou mostrar como criar um script que devolve o valor do Alexa Rank para um determinado site. O script pode ser facilmente adaptado para incorporar outras funções mais úteis.

< ?
class alexa {

    var $xml;
    var $values;
    var $alexa_address;

    function alexa($alexa_address,$domain) {
        $this->alexa_address = $alexa_address;
        $this->xml = $this->get_data($domain);
        $this->set();
    }

    function get_data($domain) {
        $url = $this->alexa_address.'http://'.$domain;
        $xml = simplexml_load_file($url) or die('Feed Indisponivel');
        return $xml;
    }

    function set() {
        $this->values['rank'] = ($this->xml->SD->POPULARITY['TEXT'] ? number_format($this->xml->SD->POPULARITY['TEXT']) : 0);
    }

    function get($value) {
        return (isset($this->values[$value]) ? $this->values[$value] : '"'.$value.'" n&atildeo existe.');
    }
}

$domain = "blue.muiomuio.net";
$alexa_connector = new alexa('http://alexa.com/xml/dad?url=',$domain);

// estilo 1
echo '
Alexa Rank: '.$alexa_connector->get('rank').' '.$domain.'
'; // estilo 2 echo '
'.$alexa_connector->get('rank').' alexa rank para '.$domain.'
'; ?>
Categories: Tutoriais Tags: ,