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("<br />", $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’ą.