FlashMessenger – Wiadomości typu info i error wyświetlane z poziomu layout

Dodanie wiadomości z poziomu kontrolera:

$this->_helper->flashMessenger->addMessage('Zapisano zmiany');//info
$this->_helper->flashMessenger->addMessage(
    array('error' => 'But error ccured')//error
);

Wersja skrócona:

$this->_helper->FlashMessenger('Zapisano zmiany');

Kod z poziomu layout-u:

Pobranie wywołań bez wymogu przekierowania

<?php
$flashMessanger = Zend_Controller_Action_HelperBroker::getStaticHelper('FlashMessenger');
$messages = array_merge(
    $flashMessanger->getMessages(),
    $flashMessanger->getCurrentMessages()
);
$flashMessanger->clearCurrentMessages();    
?>

Wyświetlenie wiadomości o danym typie z wykorzystaniem CSS jQuery UI

<?php foreach($messages as $data): ?>
<?php
    $data = (array) $data;
    $type = (string) key($data);
    $message = current($data);
 
    switch ($type){
        case 'error':
            $ui_state = 'error';
            $ui_icon = 'info';
            break;
 
        default:
            $ui_state = 'highlight';
            $ui_icon = 'info';
            break;
    }
?>
<div class="msg ui-state-<?php print $ui_state?> ui-corner-all">
    <p><span class="ui-icon ui-icon-<?php print $ui_icon?>"></span>
    <strong></strong><?php print $message?></p>
</div>
<?php endforeach; ?>

Nginx, php-fpm, mariadb | OSX Brew

Instalacja:

brew install nginx
brew install mariadb
brew install php --with-fpm --with-intl --with-mariadb

Start usług:

/usr/local/sbin/php-fpm&
/usr/local/sbin/nginx
/usr/local/bin/mysql.server start

Zatrzymanie usług:

killall -c php-fpm
/usr/local/sbin/nginx -s stop
/usr/local/bin/mysql.server stop

Menu rozwijane po kliknięciu w przycisk

Sumulacja menu rozwijanego zawierającego przyciski.

Wymaga jQuery UI (button)

JS:

onEventShowMenu = function(event) {
    var menuId = event.data ? event.data.id : null;
    var elBtn = jQuery(this);
    var elMenu = menuId ? jQuery('#' + menuId) : elBtn.next('ul');
 
    if (elMenu.is(':visible')) {
        elMenu.hide();
        return false;
    }
 
    if(!elMenu.data('inited')){
        elMenu.css('min-width', elBtn.width())
        elMenu.data('inited', true);
    }
 
    elMenu.show().position({
        my: "left top",  at: "left bottom", of: elBtn
    });
 
    jQuery(document).one("click", function() {
        elMenu.hide();
    });
    return false;
}
 
jQuery(function() {
    jQuery( ".action.close" )
    .button({
        icons: {
                primary: "ui-icon-power",
                secondary: "ui-icon-triangle-1-s"
        }
    })
    .click(onEventShowMenu)
    ;
});

Html:

<button class="action close" style="">Zamknij</button>
<ul class="button-menu" style="display:none;">
    <li><button class="action-trash">Do kosza</button></li>
    <li><button class="action sZweryfikowany">Zweryfikowano pozytywnie</button></li>
    <li><button class="action sDuplikat">Duplikat</button></li>
    <li><button class="action sOdrzucony">Odrzucono z przyczyn formalnych</button></li>
    <li><button class="action sRezygnacja">Rezygnacja Użytkownika</button></li>
</ul>

Css:

.button-menu {position:absolute; padding:0; list-style-type:none; background-color:white; border:1px solid #f0f0f0; padding:0 1px;}
.button-menu button {width:100%; text-align:left; margin:0}
.button-menu li {padding:1px 0; margin:0;}