Construção de um arquivo sitemap a partir de PHP

Vamos construir passo a passo um arquivo sitemap.xml a partir de PHP e uma base de dados MySQL.

Por Sara Alvarez Langa - Tradução de Celeste Veiga


Publicado em: 05/11/10
Valorize este artigo:
Continuando na linha de nosso manual sobre sitemaps vamos ver como se pode fazer um arquivo de sitemaps a partir de um script PHP e uma base de dados MySQL. Esta opção, obviamente, acaba sendo mais trabalhosa do que utilizar um programa para gerar o sitemap automaticamente, porém em certos casos pode ser bom, porque podemos manter um controle total sobre os conteúdos que incluímos dentro do arquivo de sitemap.

Partimos de uma hipótese , na que temos uma tabela onde se armazenam os artigos publicados em nossa web. Nessa tabela temos um identificador do artigo, um título, data de modificação ou criação e uma rota do mesmo. Além disso, na tabela pode haver outros dados, como o conteúdo ou corpo do próprio artigo, a classificação, etc, mas em principio esses dados não nos interessam para fazer o sitemap.

O primeiro que temos que fazer é obter uma lista de todos os artigos que possuímos realizando uma simples sentença sql:

$ssql="select * from artigos";

A seguir e antes de colocarmos um while para percorrer o resultado desta sentença, vamos criar o código do cabeçalho do arquivo .xml:

$codigo='<?xml version="1.0" encoding="UTF-8"?>
   <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

Nota: estas linhas com o cabeçalho do arquivo XML do sitemap estão explicadas no artigo Criação de um arquivo sitemaps de forma manual.

Una vez que tenhamos o código inicial em uma variável passamos a executar a sentença SQL para extrair os artigos e a percorrer os resultados da busca na base de dados, para ir salvando as rotas dos artigos.

$rs=mysql_query($ssql);
$total=mysql_num_rows($rs);
while($fila=mysql_fetch_object($rs)){
   $codigo .='<url>
   <loc>'. $fila->rota;
   $codigo .='</loc>
   <lastmod>'.$fila->data.'</lastmod>
   <changefreg>never </changefreg>
   <priority>0.7</priority>
   </url>';
}

Com isto já teríamos nossa lista de URL que mostram artigos. A sintaxe dos arquivos sitemaps já foi explicada no artigo Criação Manual de um arquivo sitemaps, o que não deve gerar dúvidas nesse sentido. Basicamente nesse código vamos percorrendo os resultados da sentença e acrescentando URLs de cada um dos artigos da base de dados, especificando a rota do arquivo, a data de modificação, a frequência de modificação e a prioridade de cada URL.

Por último, falta fechar o código do arquivo .xml com a seguinte linha:

$codigo .='</urlset> ';

Com isso teríamos nosso código terminado, nos faltaria criar o arquivo e dar-lhe as permissões necessárias, bem como localizá-lo na raiz de nossa web,

$path = "http://www.oquefor.com/sitemap.xml";
$modo = "w+";

if ($fp=fopen($path,$modo))
{
   fwrite ($fp,$codigo);
   echo "<p><b>Arquivo criado corretamente</b>";
}
else{
   echo "<p><b>Ocorreu um problema e o arquivo não foi aberto</b>";
}

Nota: Se você não entende o sistema de criação e abertura de um arquivo em PHP pode reler o artigo Escritura em arquivos de texto com PHP.

A seguir deixo o código completo que construiria um arquivo de texto em formato XML para gerar o sitemap de nosso site, que listaria todos os artigos da web.

<html>
<head>
   <title>Criacao de sitemaps para artigos</title>
</head>

<body>
<h1>Sitemaps</h1>
Aqui estamos criando um arquivo .xml para os sitemaps de artigos.

<?
//Sentenca que obtem todos os artigos que temos em nossa base de dados.
$ssql="select * from artigo";

//Criamos o cabecalho do .xml
$codigo='<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

$rs=mysql_query($ssql);
$total=mysql_num_rows($rs);
while($fila=mysql_fetch_object($rs)){
   $codigo .='<url>
    <loc>'.$fila->rota;
   $codigo .='</loc>
   <lastmod>'.$fila->data.'</lastmod>
   <changefreg>'.$fila->data.' </changefreg>
   <priority>0.7</priority>
   </url> ';
}
$codigo .='</urlset> ';

//Agora criamos o arquivo com o codigo necessario
$path = "http:www.oquefor.com/sitemap.xml";
$modo = "w+";

if ($fp=fopen($path,$modo))
{
   fwrite ($fp,$codigo);
   echo "<p><b>Arquivo sitemap criado corretamente</b>";
}
else{
   echo "<p><b>Ocorreu um problema e o arquivo nao foi criado corretamente</b>";
}

?>
<p>

</body>
</html>

Esperamos que estas notas tenham sido de interesse para poder esclarecer a realização, com programação PHP, do sitemap da web de vocês . Neste caso listamos apenas as páginas de artigos, mas claro que se a web tiver outras seções, além das de artigos, teríamos que gerar o sitemap para que também listara as páginas dessas outras seções, ou realizar vários arquivos sitemap.






Usuários :    login / registro

Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato