Ihre persönliche und günstige Webgestaltung und Programmierung in und um Freising

Blog

Hier erhalten Sie Neuigkeiten, Informationen und besondere Angebote

[ZF] Flash Messenger Implementierung

Soll zum Beispiel aus einer Datenbank ein Wert gelöscht, für diese zugehörige Action jedoch keine extra View angelegt werden, so bietet es sich an dem Endbenutzer über Flash Messenger eine Nachricht anzuzeigen. Dies ist optimal durch den Action-Helfer: FlashMessenger lösbar. Hierzu speichern wir uns als erstes in der preDispatch-Schleife den zugehörigen Actionhelfer ab:

$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
Als nächstes fügen wir dem Nachrichtenstack einen Text hinzu und übergeben das Objekt an die View/das Layout:
$this->view->messenger = $this->_flashMessenger
                              ->addMessage(array('message' => 'This is a simple test message!',
                                                 'status'  => 'info'));

Nun wäre es fast geschafft, doch fehlt noch das Rendering der Nachrichten. In unserem Layout können wir also:

echo $this->flashMessages();

eintragen und nun einen zugehörigen View-Helfer programmieren. Dieser könnte wie folgt aussehen:

/**
 * @category App
 * @package App_View_Helper
 */
class App_View_Helper_FlashMessages
    extends Zend_View_Helper_Abstract
{
    /**
     * The html string to return.
     *
     * @var string
     */
    private $_html = '';

    /**
     * @var string
     */
    private $_format = '<div class="%s"><ul>%s</ul></div>';

    /**
     * Format the flash messenger messages and return a string representation of it
     * with grouped messages for each status.
     *
     * @param Zend_Translate $translator [optional]
     *
     * @return string
     */
    public function flashMessages($translator = null)
    {
        $messages = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger')
                                                       ->getMessages();
        $statMessages = array();

        if (count($messages) > 0) {
            foreach ($messages as $message) {
                if (!array_key_exists($message['status'], $statMessages)) {
                    $statMessages[$message['status']] = array();
                }

                if ($translator != NULL && $translator instanceof Zend_Translate) {
                    array_push($statMessages[$message['status']], $translator->translate($message['message']));
                } else {
                    array_push($statMessages[$message['status']], $message['message']);
                }
            }

            foreach ($statMessages as $status => $messages) {
                $stack = '';
                foreach ($messages as $message) {
                    $stack .= '<li>' . $message . '</li>';
                }

                $this->_html .= sprintf($this->_format, $status, $stack);
            }
        }

        return $this->_html;
    }
}

Um den Quellcode so nutzen zu können, müsste natürlich vorher über die Applikationskonfiguration (Bsp.: _initView()) der Pfad zu den View-Helfern gesetzt werden.

0 Kommentar(e) zu “[ZF] Flash Messenger Implementierung”

Schreiben Sie einen Kommentar






Bitte warten...