- 1
[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
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
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
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
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
[Opened] Affichage de messages via une classe métier
[Opened] Affichage de messages via une classe métier
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 !
- 1