FlashMessanger est à la base un action helper, donc confiné au contrôleur. Celui-ci permet de passer un message d’une page à l’autre via le mécanisme des sessions . Après un formulaire on doit souvent ajouter un message de confirmation, on peux par exemple utilisé le FlashMessenger pour le faire et ainsi au ré-affichage suivant  afficher ce message!  C’est tellement pratique qu’il est dommage de ne pas pouvoir l’utiliser a travers les vue (view) de manière automatique…

Je vous propose donc de l’utiliser via un view helper!

L’aide de vue

Voici l’aide de vue (view helper) FlashMessenger (du même nom que l’action helper). Il est à placer dans application/views/helpers/FlashMessenger.php

<?php
 
/**
 * @see Zend_Controller_Action_Helper_FlashMessenger
 */
require_once 'Zend/Controller/Action/Helper/FlashMessenger.php';
 
/**
 * @author grummfy
 */
class Zend_View_Helper_FlashMessenger extends Zend_View_Helper_Abstract implements IteratorAggregate, Countable
{
	protected $_fm;
 
	public function __construct()
	{
		$this->_fm = new Zend_Controller_Action_Helper_FlashMessenger();
	}
 
	public function flashMessenger($cur = false)
	{
		if ($cur)
			return $this;
		else
			return $this->getMessages();
	}
 
	/**
	 * Return currents FlashMessegenr object
	 * @return Zend_Controller_Action_Helper_FlashMessenger
	 */
	public function getFlasMessenger()
	{
		return $this->_fm;
	}
 
	/**
	 * Return previous emmited messages
	 * @return array
	 */
	public function getMessages()
	{
		return $this->_fm->getMessages();
	}
 
	/**
	 * Renvoi le nombre de messages passé
	 * @return int
	 */
	public function hasMessages()
	{
		return count($this->_fm);		
	}
 
	public function getIterator()
	{
		return $this->_fm->getIterator();
	}
 
	public function count()
	{
		return $this->_fm->count();
	}
}
 
# EOF

Utilisation

Pour l’utiliser rien de plus simple, par exemple dans le layout :

	<?php
		// flashmessage
		if ($this->flashMessenger(true)->hasMessages()):
	?>
	<div id="flashMessengers">
		<?php
			foreach($this->flashMessenger() as $msg)
			{
				echo '<div class="flashMessenger">';
				if (is_array($msg))
					echo implode('<br />', $msg);
				else
					echo $msg;
				echo '</div>';
			}
		?>
	</div>
	<?php
		endif; // fin flashmessage
	?>

Ceci peut très bien être utilisé dans votre vue (view) avec exactement le même code!

Pour envoyer le message il vous suffit de simplement faire, dans votre contrôleur :

			$this->_helper->flashMessenger('Mise à jour du truc effectuées avec succès!');

Et c’est tout!

Similar Posts:

  • Delicious
  • Technorati Favorites
  • Twitter
  • Facebook
  • Google Bookmarks
  • Netvibes Share
  • Share/Bookmark

Tags : , , , ,

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">