A language is only as good as its developer is.

ZF FlashMessenger title

Prieš keletą dienų susidūriau su problema, kad naudojant Zend Framework’o (ZF) komponentą FlashMessenger, reikėjo jam perduoti ir pavadinimą (title).

Pagal nutylėjimą – ZF FlashMessenger tokios funkcijos neturi, tad buvau nusprendęs rašyti savo Action Helper’į, bet berašydamas pasigilinau į esantį komponentą ir sugalvojau sprendimą.

Kadangi ZF FlashMessenger palaiko namespace’us kuriuose yra saugomos žinutės ir tų namespace’ų gali būti keli, tad nusprendžiau viename namespace’e saugoti žinutes, o kitam pavadinimus (teoriškai pavadinimas gali būti tik vienas, bet praktiškai visko būna) :)

Žinutės perdavimą apsirašiau paveldėtoje (extend) Zend_Controller_Action (mano atveju – Core_Controller_Action) klasėje.

/**
* add flash message
*
* @param string $message   message to output
* @param string $title     message title
* @return void
* @author aur1mas
*/
protected function _addMessage($message, $title = null)
{
$flashMessenger = $this->getHelper('FlashMessenger');
$flashMessenger->setNamespace('default');
$flashMessenger->addMessage($message);

if (!is_null($title)) {
$flashMessenger->setNamespace('title');
$flashMessenger->addMessage($title);
}
}

Layout.phtml failo kodas, kadangi teko daryti kartu su jQuery plugin’u dialog – tai su juo kartu ir pateikiu.

<?$flashMessenger = 
Zend_Controller_Action_HelperBroker::hasHelper('FlashMessenger') ?
Zend_Controller_Action_HelperBroker::getExistingHelper('FlashMessenger') : 
new Zend_Controller_Action_Helper_FlashMessenger()?>
<?if ($flashMessenger->hasMessages()):?>
  <? $flashMessenger->setNamespace('default');
     $message = implode("&ltbr />", $flashMessenger->getMessages());
     $flashMessenger->setNamespace('title');
     $title = implode(" ", $flashMessenger->getMessages());
   ?>
   <script type="text/javascript">
   $(document).ready(function()
   {
     $('#flash-messenger').dialog({ minHeight: 100, minWidth: 450 });
   });
   </script>
   <div id="flash-messenger" style="display: none;" title="<?=$title?>">
    <?=$message?>
   </div>
<?endif?>

Kam nepatogu skaityti kodą – tai sukėliau snippet’ą į Github’o gist’ą.