Wo ist die Portal Message?

| abgelegt unter: , , ,
Möchte man in Plone ein Formular als Popup gestalten, steht man vor dem Problem, dass die Portal Messages nicht angezeigt werden, wenn das Formular geschlossen wird.

Des Rätsel Lösung war für mich, eine Funktion an den afterpost-hook im Aufruf des Overlays zu hängen.

$('a.reply_form_link').prepOverlay({
    subtype:'ajax',
    [...]
    noform: function(el) {return noformerrorshow(el, 'close' )},
    afterpost: getSuccessMessage 
});

Die Funktion noformerrorshow habe ich aus dem Plone-eigenen jQuery-tools. Zu finden im Omelette-Ordner Products/CMFPlone/skins/plone_ecmascripts/. Da ich die Seite nicht neu laden möchte, sondern nur die Informationen einfügen, habe ich den close-Selektor gewählt.

Mit einigen wenigen Zeilen JS-Code kann man nun schnell die benötigten Elemente aus der Antwort ziehen:

// get the success message from the comment form 
// and display it on form close
function getSuccessMessage(el) {
    var o = $(el);
    var msg =  o.find('dl.portalMessage');
    var m = "";

    msg.each( function(i,e) {
        // skip dummy info message
        if (i > 0) {
            m += '<dl class="portalMessage info"';
            m += 'style="display:none">'+$(e).html()+'</dl>';
    }});
    $('dl.portalMessage').replaceWith(m);
    // optional, but nice
    $('dl.portalMessage').fadeIn("slow");
}

Und voila, fertig ist die Plone-Form im Overlay mit Rückmeldung. Hier ist die relevante Datei von dieser Seite.