<pedrocorreia.net ⁄>
corner
<mySearch ⁄> <mySearch ⁄>

corner
 
corner
<mySnippets order="rand" ⁄> <mySnippets order="rand" ⁄>

corner
 
corner
<myContacts ⁄> <myContacts ⁄>

<email ⁄>


pc@pedrocorreia.net

<windows live messenger ⁄>


pedrojacorreia@hotmail.com

<myCurriculum type="pdf" ⁄>


Download
corner
 
corner
<myBlog show="last" ⁄> <myBlog show="last" ⁄>

corner
 
corner
<myNews show="rand" ⁄> <myNews show="rand" ⁄>

corner
 
corner
<myNews type="cat" ⁄> <myNews type="cat" ⁄>

corner
 
corner
<myQuote order="random" ⁄> <myQuote order="random" ⁄>

corner
 
corner
<myPhoto order="random" ⁄> <myPhoto order="random" ⁄>

<pedrocorreia.net ⁄>
corner
 
corner
<myAdSense ⁄> <myAdSense ⁄>

corner
 
corner
<myVisitorsMap ⁄> <myVisitorsMap ⁄>

corner
 
 

<Exemplo de como gerar ficheiros XML on-the-fly ⁄ >




clicks: 15401 15401 2006-10-07 2006-10-07 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This



Welcome to my 1st snippet! :)

Irei tentar explicar brevemente como gerar ficheiros xml on-the-fly (este é tão somente um mero exemplo feito por mim e como tal não deverá ser levado em conta como uma verdade absoluta :), certamente que existirão melhores soluções).

Neste exemplo vai ser gerado um ficheiro xml com informações respectivas a imagens, os atributos das imagens serão: descrição, url, largura e altura. As classes poderão servir de base para outros exemplos os atributos pretendidos poderão ser facilmente customizáveis editando os ficheiros. Chega de parlapié, vamos ao que interessa!

nota: neste exemplo é usado o PHP5, caso pretendam a versão em PHP4 podem enviar-me um e-mail que eu enviarei o código.

Vamos começar pela BD, não há muito a escrever aqui, a BD usada é o mySQL. Como poderão fácilmente constatar a BD chama-se "dados_imagens" e tem 3 campos: pk_imagem (chave primária do tipo unsigned tinyint, ou seja, permite até 255 registos, para este exemplo é mais que suficiente); descricao (poderá servir para dar uma breve descrição à imagem até 255 chars); url (caminho para a imagem).
Como facilmente podem reparar não existem aqui os atributes largura nem altura, tal será visto mais à frente, porém poderão também criar os campos altura e largura.
  1. # Table "dados_imagens" DDL
  2.  
  3. CREATE TABLE `dados_imagens` (
  4. `pk_imagem` tinyint(4) UNSIGNED NOT NULL AUTO_INCREMENT,
  5. `descricao` varchar(255) NOT NULL DEFAULT '',
  6. `url` varchar(255) NOT NULL DEFAULT '',
  7. PRIMARY KEY (`pk_imagem`)
  8. ) ENGINE=MyISAM



De seguida iremos criar uma class que vai comunicar com a BD, ficando a seu cargo a ligação e querys à BD. Este é um simples exemplo para este snippet, logo é bastante incompleto, tem só as funções básicas, mas para este exemplo não será necessário complicar.
class.DB.php
  1. <?php
  2. class DB{
  3. private $host="localhost";
  4. private $username="root";
  5. private $password="";
  6. private $database="pc_net";
  7.  
  8. /**
  9. * Criar a ligação à BD
  10. *
  11. * @return identificador
  12. */
  13. private function DB_connect(){
  14. $db = mysql_connect($this->host,$this->username,$this->password);
  15. mysql_select_db($this->database,$db) or die("erro na bd!");
  16. return $db;
  17. }
  18.  
  19. /**
  20. * Executar uma consulta à base de dados
  21. * nota: não é feita nenhuma verificação da validade do SQL
  22. *
  23. * @param String - instrução sql válida
  24. * @return resource
  25. */
  26. public function DB_query($iSQL){
  27. $db=$this->DB_connect();
  28. $myResource=mysql_query($iSQL,$db) or die(mysql_error());
  29. mysql_close($db);
  30. return $myResource;
  31. }
  32. }
  33. ?>



A class que vai criar as instruções SQL necessárias para efectuar consultas à BD. Este é um simples exemplo para este snippet, logo é bastante incompleto, tem só as funções básicas, mas para este exemplo não será necessário complicar.
class.SQL.php
  1. <?php
  2. /**
  3. * Class de suporte à criação de instruções SQL simples
  4. *
  5. * nota: esta class é um simples exemplo, as instruções
  6. * criadas são simples e como tal esta class deverá ser
  7. * muito mais elaborada, mal tal n é o propósito deste
  8. * exemplo :)
  9. *
  10. */
  11. class SQL{
  12. private $select;
  13. private $from;
  14. private $where;
  15.  
  16. /**
  17. * Método construtor
  18. *
  19. * @param String - campos a selecionar
  20. * @param String - qual a tabela
  21. * @param String - condição (opcional)
  22. */
  23. public function SQL($select, $from,$where=""){
  24. $this->select=$select;
  25. $this->from=$from;
  26. $this->where=$where;
  27. }
  28.  
  29. /**
  30. * Obter a instrução SQL
  31. *
  32. * @return String - instrução SQL
  33. */
  34. public function DoSQL(){
  35. $iSQL="Select $this->select ";
  36. $iSQL.="From $this->from ";
  37. if($this->where) $iSQL.="Where $this->where ";
  38.  
  39. return $iSQL;
  40. }
  41. }
  42. ?>



Até agora tivemos só a ver a criação/ comunicação com a BD, vamos passar agora ao que realmente pretende falar este snippet, a class XML, como diria "Jack, O Estripador" vamos por partes.






Esta class tem 2 atributos, o nome do cliente e nome do trabalho, estes dois atributos não são necessários, são apenas uma maneira para uma melhor estruturação do xml, para podermos identificar com qual cliente estamos a trabalhar e no que estamos a trabalhar, porém se os removerem, terão de alterar o código do método DoXML(), para tal basta remover as variáveis $initTag* e $closeTag*, mas sugiro que deixem estar como o código se encontra.
O encoding escolhido para este ficheiro será o UTF-8 como poderão ver no codigo, poderão ser usados outros encodings, porém recomendo usarem este.
class.XML.php
  1. <?php
  2. /**
  3. * Class de suporte à criação do ficheiro XML on-the-fly
  4. * nota: apenas por uma questão de estruturação decidi colocar
  5. * 2 tags identificadoras antes do xml que é pretendido gerar, mas tal
  6. * poderá ser modificado facilmente.
  7. *
  8. *
  9. */
  10. class XML{
  11. private $xmlNomeDoCliente="pedrocorreia.net";
  12. private $xmlNomeDoWork="xml_teste";
  13.  
  14. /**
  15. * Método construtor
  16. *
  17. * @param String Nome do Cliente
  18. * @param String Nome do Work
  19. */
  20. public function XML($xmlNomeDoCliente="",$xmlNomeDoWork=""){
  21. if($xmlNomeDoCliente) $this->xmlNomeDoCliente=$nomeDoCliente;
  22. if($xmlNomeDoWork) $this->xmlNomeDoWork=$xmlNomeDoWork;
  23. }
  24.  
  25. /**
  26. * Gerar o ficheiro XML
  27. *
  28. * nota: neste exemplo uso o UTF-8,
  29. * mas poderão alterar para o que pretenderem
  30. *
  31. *
  32. * @param String - xml statments
  33. */
  34. public function DoXML($xml){
  35. $initTagCliente=$this->DoInitXMLTag($this->xmlNomeDoCliente);
  36. $initTagWork=$this->DoInitXMLTag($this->xmlNomeDoWork);
  37. $closeTagCliente=$this->DoCloseXMLTag($this->xmlNomeDoCliente);
  38. $closeTagWork=$this->DoCloseXMLTag($this->xmlNomeDoWork);
  39.  
  40. $xml=utf8_encode($xml);
  41.  
  42. header("Content-type: text/xml; charset=UTF-8");
  43. echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
  44. $initTagCliente
  45. $initTagWork
  46. $xml
  47. $closeTagWork
  48. $closeTagCliente
  49. ";
  50. }
  51.  
  52. /**
  53. * Construir a tag de 'abertura'
  54. *
  55. * @param String
  56. * @return String
  57. */
  58. private function DoInitXMLTag($string){return "<$string>";}
  59.  
  60. /**
  61. * Construir a tag de 'fecho'
  62. *
  63. * @param String
  64. * @return String
  65. */
  66. private function DoCloseXMLTag($string){return "</$string>";}
  67. }
  68.  
  69.  
  70. ?>



Chegou a altura de colar as peças todas.
Este será o ficheiro que a vossa aplicação irá chamar e que irá enviar para o output o código xml pretendido (esperemos nós:)). Voltando uns passos atrás à criação da BD, como tinha feito menção, não criei os campos largura e altura, mas no xml (width, height) essa informação é enviada, poderão existir duas abordagens neste caso, ou criamos 2 campos adicionais na tabela e ao adicionarmos o ficheiro obtemos as suas dimensões e inserimos logo (caso tenham uma aplicação de suporte poderão facilmente efectuar esta operação aquando do upload do ficheiro); ou por outro lado poderemos verificar sempre o tamanho do ficheiro aquando do pedido do xml. Pessoalmente recomendo a 1ª hipótese, ou seja, caso tenha uma aplicação de suporte, ao efectuar o upload da imagem verifiquem as suas dimensões e preencham os campos largura e altura, mas como este exemplo partia do principio de que não haveria uma aplicação de suporte, optei pelo 2ª hipótese.
xml.php
  1. <?php
  2. include_once("class.XML.php");
  3. include_once("class.SQL.php");
  4. include_once("class.DB.php");
  5.  
  6. $db=new DB(); //criação do objecto que vai permitir interagir com a base de dados
  7. $iSQL=new SQL("pk_imagem, url, descricao","dados_imagens"); //criar a instrução SQL
  8.  
  9. $myResource=$db->DB_query($iSQL->DoSQL()); //fazer query à bd e obter o resource
  10. while($myRow=mysql_fetch_array($myResource)){
  11. $descricao=htmlspecialchars($myRow["descricao"]);
  12. list($w, $h)=@getimagesize($myRow["url"]); //obter as dimensões da imagem
  13. $xmlStatments.="<imagem descricao='$descricao' url='$myRow[url]' width='$w' height='$h' />\r\n"; //criar o statment
  14. }
  15.  
  16. $xml=new XML(); //criar o objecto XML
  17. $xml->DoXML($xmlStatments); //fazer o output do xml
  18. ?>



Qualquer dúvida/ erro no código estejam à vontade para entrar em contacto comigo.









clicks: 15401 15401 2006-10-07 2006-10-07 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This