<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
 
 

<Construir um sistema de MessageBoxes ⁄ >




clicks: 10639 10639 2008-04-25 2008-04-25 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This



A comunicação com o utilizador do nosso site/ serviço deverá ser tomada em linha de atenção, uma mensagem mal transmitida/ pouco perceptivel poderá trazer alguns problemas, tanto a nós como a quem acede aos nossos serviços. As mensagens tanto podem ir desde um agradecimento por ter assinado a newsletter, até à informação de que alguns campos não foram correctamente preenchidos, etc, etc

Este snippet vai demonstrar uma possivel forma de construção dessas caixas de texto. É facilmente customizável, pois é baseado no CSS, ou seja, poderá ser alterado o CSS mediante as nossas necessidades e/ou bom gosto ^_^'', que essas alterações ficarão activas, após um refresh.

Não é dificil implementar este sistema (inclusivé facilmente o poderemos recorrer ao extends, para customizações mais especificas, como será possivel ver mais abaixo) poderá ser um pouco extenso, mas é de fácil compreensão e adaptável a outras situações.





- style.css, como tinha dito anteriormente, aqui serão feitas as customizações necessárias para a camada apresentacional (UI) da nossa MessageBox, neste exemplo foram criadas 4 tipos de MessageBoxes: mensagem de ok, mensagem de erro, mensagem de acesso protegido e mensagem de informação;
  1. *{margin: 0;padding: 0;}
  2.  
  3. body{
  4. font-family: Tahoma, Verdana, Arial, sans-serif;font-size: 11px;
  5. color: #000;background: #fff;text-align: left;}
  6.  
  7. table.message_box{
  8. border: solid #235B74;
  9. border-width: 0 1px 1px 1px;
  10. width: 400px;
  11. text-align: justify;
  12. height: 120px;
  13. margin: 2px auto;
  14. }
  15. table.message_box th{
  16. height: 24px;
  17. background: url( "../images/bg.gif" ) repeat-x top left;
  18. text-align: center;
  19. color: #fff;
  20. font-size: 13px;
  21. }
  22. table.message_box td{vertical-align: middle;}
  23. table.message_box td.msg{padding: 4px 8px;}
  24.  
  25. table.message_box td.msg span.timestamp{
  26. color: #666; text-decoration: underline; font-weight: 700;
  27. }
  28. table.message_box td.msg span.title{font-weight: 700; color: #666;}
  29.  
  30. table.message_box td.error{
  31. width: 80px;
  32. background: url( "../images/msg/error.png" ) no-repeat center center;
  33. }
  34. table.message_box td.ok{
  35. width: 80px;
  36. background: url( "../images/msg/ok.png" ) no-repeat center center;
  37. }
  38. table.message_box td.info{
  39. width: 80px;
  40. background: url( "../images/msg/info.png" ) no-repeat center center;
  41. }
  42. table.message_box td.protected{
  43. width: 80px;
  44. background: url( "../images/msg/protected.png" ) no-repeat center center;
  45. }
  46.  





- AutoLoad.inc, para evitar andar a fazer sempre includes (neste caso não seriam muitos, mas num projecto seria mais demorado), vamos implementar uma magic function do php - __autoload, assim que fôr necessário usar uma class, automaticamente esta função é chamada e irá fazer o include a esse ficheiro;
  1. <?php
  2. //class para automaticamente fazer o load das classes
  3. if(function_exists("__autoload")) return;{
  4. function __autoload($class){
  5. include_once("class.$class.php");
  6. }
  7. }
  8. ?>




- class.MyServerTime.php, a finalidade desta class será unicamente porque vamos ter a opção de usar um timestamp, para que por ex. seja possivel exibir a que horas a mensagem foi exibida, esta class foi retirada do snippet Mostrar Data/ Hora do Servidor
  1. <?php
  2.  
  3. class MyServerTime{
  4. private $_format; //formatação DateTime
  5.  
  6. /**
  7. * Método construtor
  8. *
  9. * @param String $format
  10. */
  11. public function __construct($format){$this->Format($format);}
  12.  
  13. /**
  14. * Getter/ Setter TimeFormat
  15. *
  16. * @param String $value
  17. * @return String
  18. */
  19. public function Format($value=""){
  20. if($value){$this->_format=$value;}
  21. else{return $this->_format;}
  22. }
  23.  
  24. /**
  25. * Obter Data formatada
  26. *
  27. * @return DateTime
  28. */
  29. function GetDate(){return gmdate($this->Format());}
  30.  
  31. }
  32. ?>




- class.MessageBoxType.php, esta class será a responsável por mapear as classes do CSS para o tipo da MessageBox, a nossa MessageBox vai ter 4 tipos de imagens (ver style.css), logo no caso de alterarmos/ adicionarmos alguma informação no CSS, teremos de actualizar esta Class, para que o nosso sistema consiga apresentar correctamente a informação;
  1. <?php
  2.  
  3. /**
  4. * Mapear tipos de erro para correspondente CSS
  5. *
  6. */
  7. class MessageBoxType {
  8.  
  9. private static $arrCss = array ("info" => "info", "error" => "error", "ok" => "ok", "protected" => "protected" );
  10.  
  11. public static function Error() {return self::$arrCss["error"];}
  12.  
  13. public static function Ok() {return self::$arrCss["ok"];}
  14.  
  15. public static function Info() {return self::$arrCss["info"];}
  16.  
  17. public static function Protect() {return self::$arrCss["protected"];}
  18.  
  19. }
  20.  
  21. ?>
  22.  




- class.MessageBoxText.php, será a responsável pelo armazenamento das mensagens, ou seja podemos ir dividindo as mensagens por tópicos, ou então pura e simplesmente apenas exibir uma mensagem, esta class vai-nos pemitir essa flexibilidade:
  1. <?php
  2.  
  3. /**
  4. * Class que vai armazenar as mensagens
  5. *
  6. */
  7. class MessageBoxText {
  8.  
  9. private $_arr;
  10.  
  11. /**
  12. * Método construtor
  13. *
  14. * @param String Texto da mensagem
  15. * @param String Titulo da mensagem
  16. */
  17. public function __construct($text="",$title="") {
  18. $this->_arr = array ();
  19. $this->AddMessage ($text, $title);
  20. }
  21.  
  22. /**
  23. * Adicionar mensagem
  24. *
  25. * @param String Texto da mensagem
  26. * @param String Titulo da mensagem
  27. */
  28. public function AddMessage($text,$title=""){
  29. if($text){array_push ($this->_arr, array ($title => $text));}
  30. }
  31.  
  32. /**
  33. * Obter mensagem
  34. *
  35. * @param Int Posição da mensagem
  36. * @return Array
  37. */
  38. public function GetMessage($pos){return $this->_arr[$pos];}
  39.  
  40. /**
  41. * Obter todas as Mensagens
  42. *
  43. * @param Int $pos
  44. * @return Array
  45. */
  46. public function GetAllMessages(){return $this->_arr;}
  47.  
  48. /**
  49. * Obter número de mensagens
  50. *
  51. * @return Int
  52. */
  53. public function Count() {return sizeof ( $this->_arr );}
  54.  
  55.  
  56. /**
  57. * Remover todas as mensagens
  58. *
  59. */
  60. public function Clear() {$this->_arr = array ();}
  61.  
  62. }
  63.  
  64. ?>
  65.  




- class.MessageBox.php, será esta a class responsável pelo tratamento das várias informações e apresentar ao utilizador a mensagem customizada:
  1. <?php
  2.  
  3. /**
  4. * Class que permite exibir uma
  5. * mensagem customizável ao utilizador
  6. *
  7. */
  8. class MessageBox {
  9. private $_msg;
  10. private $_msg_type;
  11. private $_title;
  12. private $_timestamp_format;
  13.  
  14. /**
  15. * Método construtor
  16. *
  17. * @param MessageBoxText Mensagens
  18. * @param MessageBoxType Tipo
  19. * @param String Titulo
  20. * @param String Formato Timestamp
  21. */
  22. public function __construct($msgs, $msg_type, $title, $timestamp_format = "Y-m-d H:m:s") {
  23. $this->SetMessages($msgs);
  24. $this->SetMessageType($msg_type);
  25. $this->SetTitle($title);
  26. $this->SetTimestampFormat($timestamp_format);
  27. }
  28.  
  29. /**
  30. * Construir Mensagem
  31. *
  32. * @return String
  33. */
  34. public function Show(){
  35. //construir header, se activo
  36. if ($this->_title) {$row_header="<tr><th colspan='2'>{$this->_title}</th></tr>";}
  37.  
  38. //construir timestamp, se activo
  39. if($this->_timestamp_format){
  40. $timestamp=new MyServerTime($this->_timestamp_format);
  41. $timestamp="<span class='timestamp'>{$timestamp->GetDate()}</span><br/><br/>";
  42. }
  43.  
  44. //construir mensagens
  45. $count=$this->_msg->Count();
  46. for ($i=0;$i<$count;$i++){
  47. $auxArr=$this->_msg->GetMessage($i);
  48. foreach ($auxArr as $key => $value) {
  49. if($key) $messages.="<span class='title'>$key:</span>&nbsp;";
  50. $messages.="$value<br/><br/>";
  51. }
  52. }
  53.  
  54. return "
  55. <table class='message_box' cellspacing='0' cellpadding='0'>
  56. $row_header
  57. <tr>
  58. <td class='$this->_msg_type'></td>
  59. <td class='msg'>$timestamp$messages</td>
  60. </tr>
  61. </table>
  62. ";
  63. }
  64.  
  65. /**
  66. * Atribuir tipo de Mensagem
  67. *
  68. * @param MessageBoxType
  69. */
  70. public function SetMessageType($msg_type){$this->_msg_type=$msg_type;}
  71.  
  72. /**
  73. * Atribuir formato ao timestamp
  74. *
  75. * @param String
  76. */
  77. public function SetTimestampFormat($timestamp_format){$this->_timestamp_format=$timestamp_format;}
  78.  
  79. /**
  80. * Atribuir titulo
  81. *
  82. * @param String
  83. */
  84. public function SetTitle($title){$this->_title=$title;}
  85.  
  86. /**
  87. * Atribuir mensagens
  88. *
  89. * @param MessageBoxText
  90. */
  91. public function SetMessages($msgs){
  92. if (!($msgs instanceof MessageBoxText)) {
  93. throw new Exception ( "MessageBoxTextExpected" );
  94. }
  95. $this->_msg=$msgs;
  96. }
  97.  
  98. }
  99.  
  100. ?>
  101.  




- class.MessageBoxVerbose.php, esta class vai estender a class principal, este é um possivel exemplo de como poderemos usar o extends neste snippet, basicamente o que vamos fazer nesta class é preparar logo um conjunto de informações para a formatação das mensagens;
  1. <?php
  2.  
  3. class MessageBoxVerbose extends MessageBox {
  4.  
  5. public function __construct($intro,$title,$msg_type,$line,$file,$caller_function,$error_description=""){
  6. $msgs=new MessageBoxText();
  7. $msgs->AddMessage($intro);
  8. $msgs->AddMessage($line,"Linha");
  9. $msgs->AddMessage($file,"Ficheiro");
  10. $msgs->AddMessage($caller_function,"Função");
  11. $msgs->AddMessage($error_description,"Erro");
  12.  
  13. parent::__construct($msgs,$msg_type,$title);
  14.  
  15. return $this->Show();
  16. }
  17.  
  18. }
  19.  
  20. ?>
  21.  








- index.php, exemplos de utilização da nossa MessageBox (mais abaixo estão os screenshots respectivos);
  1. <?php
  2. include_once ("Classes/AutoLoad.inc");
  3. ?>
  4.  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  7. <head>
  8. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  9. <title>MessageBox</title>
  10. <link rel="stylesheet" type="text/css" href="css/style.css" media="all" />
  11. </head>
  12. <body>
  13. <?php
  14.  
  15. /**
  16. * 1º exemplo
  17. */
  18. $msgs = new MessageBoxText();
  19. $msgs->AddMessage ("Isto é um teste simples à MessageBox" );
  20. $box = new MessageBox ($msgs, MessageBoxType::Info(), "A testar a MessageBox","");
  21. echo $box->Show ();
  22.  
  23. /**
  24. * 2º exemplo
  25. */
  26. $box->SetMessageType(MessageBoxType::Ok());
  27. $box->SetTimestampFormat("H:m:s");
  28. $box->SetTitle("MessageBox com Timestamp");
  29. echo $box->Show();
  30.  
  31. /**
  32. * 3º exemplo
  33. */
  34. //limpar mensagens de texto
  35. $msgs->Clear();
  36. $msgs->AddMessage("As credenciais fornecidas não correspondem a uma conta válida","Erro Credenciais");
  37. $box->SetMessageType(MessageBoxType::Protect());
  38. echo $box->Show();
  39.  
  40.  
  41. /**
  42. * 4º/ 5º exemplo
  43. */
  44. GerarErrosMySQL();
  45. function GerarErrosMySQL(){
  46. $link=@mysql_connect("localhost","username","password");
  47. if(!$link){
  48. die(MySQLVerbose("Erro na ligação ao MySQL","Conexão MySQL",mysql_error(),__LINE__,__FILE__,__FUNCTION__));
  49. }
  50.  
  51. $db=@mysql_select_db("my_database",$link);
  52. if(!$db){
  53. die(MySQLVerbose("Erro na selecção da BD","BD inválida",mysql_error(),__LINE__,__FILE__,__FUNCTION__));
  54. }
  55.  
  56. }
  57.  
  58. /**
  59. * Função auxiliar para apresentar erros MySQL
  60. *
  61. * @param String Mensagem de introdução
  62. * @param String Titulo
  63. * @param String Descrição do erro
  64. * @return String
  65. */
  66. function MySQLVerbose($intro,$title,$error_description,$line,$file,$function){
  67. $verbose_box=new MessageBoxVerbose($intro,$title,MessageBoxType::Error(),$line,$file,$function,$error_description);
  68. return $verbose_box->Show();
  69. }
  70.  
  71. ?>
  72. </body>
  73. </html>





Exemplos: 1, 2 e 3 respectivamente



Exemplo: 4



Exemplo: 5




Qualquer erro/ dúvida é só dizer!









clicks: 10639 10639 2008-04-25 2008-04-25 goto mySnippets mySnippets php  Download  Bookmark This Bookmark This