A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Weblinks com checagem

Sab

18

Out

2008


00:00

(2 votos, média 5.00 de 5) 


Maluco beleza Cuidado! Este é um tutorial maluco beleza!

O componente WebLinks do Joomla é instalado por default. Legalzinho, mas não é nada daquelas coisas. Um dos inconvenientes que mais me incomodavam era a apresentação de links "bichados", que não levavam a lugar algum. Como não tem como correr atrás para verificar constantemente se os links que disponibilizei ainda estão ativos ou não, resolvi criar um mecanismo de controle para informar os visitantes. Se este também é um problema que anda te atazanando, então este tutorial deve ajudar.

A idéia

Sei que não é uma solução muito elegante, mas não vi outra saída. Se quisermos testar se um determinado endereço na web está disponível, não tem outro jeito: precisamos tentar acessar o endereço para verificar se está "vivo". Isto pode levar alguns segundos e, se tivermos uma lista enorme de endereços, os segundos vão se somando e tomam um tempo que nem sempre está de acordo com a expectativa do internauta.

Mesmo assim, pensei... o que é pior, esperar um pouco mais até que a página de links carregue ou ficar se frustrando com links que estejam "bichados"? Resolvi optar pela primeira opção, esperar um pouco mais para a página carregar.

Decisão tomada, faltava encontrar um mecanismo para testar links e depois inserir um pouco de código no componente WebLinks do Joomla para que ele fizesse o que eu pretendia. Vai aqui a receita.

Alterando a tabela de dados weblinks

Para não penalizar demais os usuários da Aldeia e as páginas que precisam ser checadas, resolvi fazer uma conferência apenas uma vez por semana. Para poder verificar o prazo da validade do link é preciso criar um campo para guardar datas e também será preciso um campo para indicar se o link é válido ou não.

Se você não estiver familiarizado com bancos de dados, é melhor NÃO fazer esta alteração - você pode acabar detonando sua base de dados. Outro impedimento é se você não tem acesso à base de dados. Nestes dois casos, o melhor a fazer é desistir desta empreitada.

Fazendo as alterações na unha

Todas as tabelas do Joomla possuem um prefixo. Como cada usuário pode escolher o prefixo que quiser, vou indicá-lo por xxx.

ALTER TABLE xxx_weblinks ADD COLUMN check_date DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'; ALTER TABLE xxx_weblinks ADD COLUMN status TINYINT(1) NOT NULL DEFAULT 0;

Você também pode fazer estas alterações usando, por exemplo, o phpMyAdmin. Bem, tabela pronta, vamos ao código.

Onde inserir o código

Apesar de vir como componente default na instalação do Joomla 1.5, o componente Weblinks não é um autêntico MVC (Model-View-Controller). Mesmo assim é possível identificar quais arquivos fazem o que. Existem três pontos nos quais poderíamos acrescentar código: em /models/category.php, em /views/category/view.html.php e /views/category/tmpl/default_items.php, todos no diretório /components/com_weblinks.

Nos dois primeiros, todos os links da tabela precisariam passar pelo mecanismo de checagem. Já imaginaram se a tabela de links possuir um zilhão de registros? O usuário que quisesse acessar uma página que mostra apenas meia dúzia de links teria que ficar a vida inteira esperando até que todos os links da tabela fossem validados :blush: Não dá! Foi exatamente o que pensei e, neste caso, só sobrou o arquivo default_items.php porque neste arquivo só são processados os links de uma página.

Antes de dar uma espiada no código que inseri, é bom conhecer um pouco das principais funções utilizadas.

Apelando para funções do PHP

As principais funções do PHP que permitem fazer uma conexão com um endereço da web são as seguintes:

  • parse_url: dado um endereço, a função parse_url devolve as partes do endereço num array nominado.
  • fsockopen: inicia uma conexão socket com o hospedeiro indicado.
  • fclose: fecha uma conexão socket.
  • fputs: é sinônimo da função fwrite e serve para enviar uma string para o arquivo apontado pelo socket.
  • stream_set_timeout: para indicar o tempo máximo de conexão.
  • socket_get_status: para verificar o estado da conexão.

Modificações no arquivo default_items.php

A primeira coisa a fazer é acertar o cabeçalho, onde colocaremos uma coluna a mais para mostrar o status dos links. Logo depois da linha 34, onde está o seguinte trecho de código

lists['order_Dir'], $this->lists['order'] ); ?>

defina a nova coluna com:

Status

Depois deste trecho há um loop que cria todas a linhas da tabela necessárias para mostrar os links. É exatamente neste loop que colocaremos uma chamada para a função que irá testar a validade de cada um dos links se o prazo estiver vencido. Logo depois da linha 56 (que agora ocupa esta posição depois que inserimos o código acima), onde está

hits; ?>

vamos fazer a chamada para a função que denominei de check:

Informações adicionais