Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] Affichage de messages via une classe métier

Posted by Mindiell on 04/27/2012 15:16

Voilà,

Mon module est susceptible de vouloir afficher des messages.

J'ai donc créé une classe Messages qui contient un memebre privé qui est un tableau. Cette classe possède deux méthodes : addMessage et getMessages. Le problème, c'est que l'affichage se fait dans une zone, je fait donc appel une deuxième fois à jClasses::getService('Messages') et le tableau est vide...

J'ai essayé de mettre le tableau en static, et de passer mon instance de Message par paramètre à ma zone qui est chargée d'afficher les messages. Dans tous les cas, le tableau est bien rempli (vérification à partir de count($m_messages)), mais apparait vide lors de l'affichage, au niveau de la zone.

Une idée ? :)


Mindiell

  [Opened] Affichage de messages via une classe métier

Reply #1 Posted by laurentj on 04/27/2012 19:06

Bonjour,

aucune idée.. il faudrait voir du code..

Cette zone est bien utilisée pendant la même action qui fait les addMessage etc ? (il n'y a pas de redirection entre son remplissage et l'affichage par exemple ?)

  [Opened] Affichage de messages via une classe métier

Reply #2 Posted by Mindiell on 04/27/2012 21:15

A priori, non.

Voici la classe :

class Messages {
   private $m_messages = array();

   /**
    * constructor;
    * empty
    */
   function __construct (){
   }

   function addMessage($message)
   {
echo $message . '<br />';
echo count($m_messages) . '<br />';
      if ($message!='')
      {
         $m_messages[] = $message;
      }
echo count($m_messages) . '<br />';
   }

   function getMessages()
   {
echo count($m_messages) . '<br />';
      $result = '';
      foreach ($m_messages as $message)
      {
         $result = $message . '<br />';
      }
      return $result;
   }

}

le default.classic.php :

   function index() {
      $rep = $this->getResponse('html');

      $keyPressed = $this->param('keyPressed');
      if ($keyPressed!='')
      {
         $Messages = jClasses::getService('Messages');
         $Messages->addMessage('Key pressed : ' . chr($keyPressed) . ' (' . $keyPressed . ')');
      }

      $rep->body->assignZone('VIEW', 'view');
      $rep->body->assignZone('CHARACTER', 'character');
      $rep->body->assignZone('INFORMATIONS', 'informations');
      $rep->body->assignZone('MESSAGES', 'messages');

      return $rep;
   }

Et la zone :

class messagesZone extends jZone {
   protected $_tplname='messages';

   protected function _prepareTpl() {
      $Messages = jClasses::getService('Messages');
      $this->_tpl->assign('messages',$Messages->getMessages());
   }

}

Mindiell

  [Opened] Affichage de messages via une classe métier

Reply #3 Posted by csk on 04/28/2012 18:23

Bonjour Mindiell,

est-ce que le problème n'est-il pas dans la classe Messages?

Lorsque tu utilises l'attribut $m_messages dans tes méthodes, PHP ne l'interprète-t-il pas comme une variable locale?

As-tu essayé d'utiliser la "variable" $this ?

class Messages {
   private $m_messages = array();

   /**
    * constructor;
    * empty
    */
   function __construct (){
   }

   function addMessage($message)
   {
echo $message . '<br />';
echo count($this->m_messages) . '<br />';
      if ($message!='')
      {
         $this->m_messages[] = $message;
      }
echo count($this->m_messages) . '<br />';
   }

   function getMessages()
   {
echo count($this->m_messages) . '<br />';
      $result = '';
      foreach ($this->m_messages as $message)
      {
         $result = $message . '<br />';
      }
      return $result;
   }

}

  [Opened] Affichage de messages via une classe métier

Reply #4 Posted by Mindiell on 04/29/2012 23:13

Hum... Ok, j'avoue j'ai vraiment honte...

Mais merci beaucoup ! J'étais bien coincé et j'ai même pas vu ça ! :D

Bon, reste plus qu'à la mettre en session et ça sera nickel !


Mindiell

  [Opened] Affichage de messages via une classe métier

Reply #5 Posted by laurentj on 05/03/2012 09:26

Mindiell : note que tu as déjà une classe de ce type, et qui en plus fonctionne d'une action à une autre : jMessage ;-)

  [Opened] Affichage de messages via une classe métier

Reply #6 Posted by Mindiell on 05/03/2012 10:40

Ah, je vais regarder cela alors, merci !


Mindiell

  [Opened] Affichage de messages via une classe métier

Reply #7 Posted by foxmask on 05/03/2012 11:27

et qui s'utilise aussi dans les templates via {jmessage}


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

 
Page
  1. Affichage de messages via une classe métier