- 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

