App_Form_Element_DateWithJdatepicker

Un Zend_Form_Element utilisant le datepicker de jQuery françisé :

  1. class App_Form_Element_DateWithJdatepicker extends Zend_Form_Element_Xhtml {
  2.  
  3. public function init() {
  4. $this->addValidator('Date')
  5. ->setAttrib('class', 'datepicker');
  6. }
  7.  
  8. }
  1. $(".datepicker").datepicker({
  2. clearText: 'Effacer', clearStatus: '', closeText: 'Fermer', closeStatus: 'Fermer sans modifier', prevText: '<Préc', prevStatus: 'Voir le mois précédent', nextText: 'Suiv>', nextStatus: 'Voir le mois suivant', currentText: 'Courant', currentStatus: 'Voir le mois courant', monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin', 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun', 'Jul','Aoû','Sep','Oct','Nov','Déc'], monthStatus: 'Voir un autre mois', yearStatus: 'Voir un autre année', weekHeader: 'Sm', weekStatus: '', dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'], dayStatus: 'Utiliser DD comme premier jour de la semaine', dateStatus: 'Choisir le DD d MM', dateFormat: 'dd/mm/yy', firstDay: 0, initStatus: 'Choisir la date', isRTL: false,
  3. dateFormat: "yy-mm-dd",
  4. firstDay: 1,
  5. showStatus: true,
  6. showOn: "both",
  7. buttonImage: "<?php echo $front->getBaseUrl() ?>/js/lib/jquery-ui-1.5.2/images/calendar.gif",
  8. buttonImageOnly: true
  9. }
  10. );

Un FlashMessenger personnalisé

...Pour inclure un type aux messages (typiquement une class css pour un affichage personnalisé pour les erreurs, les confirmations, les alertes...).

  1. class App_Controller_Action_Helper_FlashMessenger extends Zend_Controller_Action_Helper_FlashMessenger implements IteratorAggregate, Countable {
  2.  
  3. /**
  4.   * addMessage() - Add a message to flash message
  5.   *
  6.   * @param string $message
  7.   * @return Zend_Controller_Action_Helper_FlashMessenger Provides a fluent interface
  8.   */
  9. public function addMessage($message, $class)
  10. {
  11. $message = array(
  12. 'message' => $message,
  13. 'class' => $class);
  14.  
  15. if (self::$_messageAdded === false) {
  16. self::$_session->setExpirationHops(1, null, true);
  17. }
  18.  
  19. if (!is_array(self::$_session->{$this->_namespace})) {
  20. self::$_session->{$this->_namespace} = array();
  21. }
  22.  
  23. self::$_session->{$this->_namespace}[] = $message;
  24.  
  25. return $this;
  26. }
  27.  
  28. }
  29.  
  30. // Un Zend_Controller_Action personnalisé
  31.  
  32. class App_Controller_Action extends Zend_Controller_Action {
  33.  
  34.  
  35.  
  36. /**
  37. * FlashMessenger
  38. *
  39. * @var Zend_Controller_Action_Helper_FlashMessenger
  40. */
  41. protected $_flashMessenger = null;
  42.  
  43. /**
  44. * Class constructor
  45. *
  46. * @param Zend_Controller_Request_Abstract $request
  47. * @param Zend_Controller_Response_Abstract $response
  48. * @param array $invokeArgs Any additional invocation arguments
  49. * @return void
  50. */
  51. public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, array $invokeArgs = array()) {
  52. $this->setRequest($request)
  53. ->setResponse($response)
  54. ->_setInvokeArgs($invokeArgs);
  55. $this->_helper = new Zend_Controller_Action_HelperBroker($this);
  56.  
  57. //$this->_flashMessenger = $this->_helper->getHelper('FlashMessenger');
  58. $this->_flashMessenger = new App_Controller_Action_Helper_FlashMessenger();
  59. $this->view->flashMessenger = $this->_flashMessenger;
  60.  
  61. $this->init();
  62. }
  63.  
  64. }

Exemple d'utilisation :

  1. $this->_flashMessenger->addMessage('Les calculs ont été mis à jour.', 'notice');
  2. $this->_flashMessenger->addMessage('Impossible d\'effectuer l'opération demandée.', 'error');
  1. <!-- layout.phtml -->
  2. <div id="messenger">
  3. <?php
  4. if (is_object($this->flashMessenger)) :
  5. $messages = $this->flashMessenger->getMessages();
  6. foreach ($messages as $m) {
  7. if (is_array($m)) {
  8. echo "\t",'<p class="',$m['class'],'">',$m['message'],'</p>',"\n";
  9. } else {
  10. echo "\t",$m,"\n";
  11. }
  12. }
  13. endif;
  14. ?>
  15. </div>