Liferay – Mostrar otro Web Form al enviar el primero


Liferay incluye un portlet para hacer formularios de una forma muy sencilla y con bastante personalización, son los Web Forms.

Una de las opciones que permite es redireccionar a una URL cualquiera una vez enviado el formulario con éxito. Con esta idea de base, se puede enviar a páginas de resultado (success) personalizadas, enviar a áreas privadas, a otros recursos que antes no estaban disponibles o como veremos a continuación, encadenar un formulario diferente.

Nuestro objetivo entonces será poder redirigir de un formulario a otro que queremos mostrar únicamente si se ha completado el primero, y queremos utilizar el mismo espacio destinado al primero.

Para conseguir la dirección de forma correcta se debe poner la URL única del segundo formulario en el campo Redirect URL on Success del primero.

Pero, ¿como podemos obtener la URL única del formulario? Única ya que queremos la URL propia del componente, no la de la página con el theme, layout, etc.

1) Como incrustar un Web Form en un Web Content, Asset Publisher, etc?

1.1) Crear el Web Form en una página diferente a la que lo incluiremos, puede ser una página oculta (hidden). Comprobar que esta página tenga los mismos permisos (Config->Permissions) que la página donde queremos incluir el componente.

1.2) Activar “Permitir compartir el componente” y Guardar como se ve en la siguiente imagen.

1.3) Entonces, dependiendo del tipo de contenedor que queramos, incluir el código del widget del Web Form como código fuente. Esto se puede hacer desde el editor de un template, des de la opción source de un contenido web, etc

<script src="http://intranet.server.org/html/js/liferay/widget.js" type="text/javascript"></script><script type="text/javascript">
    Liferay.Widget({ url: 'http://intranet.server.org/en/widget/group/public/forms/-/1_WAR_webformportlet_INSTANCE_ySrPL3uYb3bt', height: '580px'});
</script>

2) ¿Cómo redirigir de un Web Form a otro?

2.1) Creamos el segundo formulario en la misma página que el primero [1.1]

2.2) Repetimos el punto [1.2] para el segundo formulario

2.3) Cogemos la URL del widged del punto anterior que será parecida a la siguiente:

http://intranet.server.org/en/widget/group/public/forms/-/1_WAR_webformportlet_INSTANCE_r14q3YPOB6f4

2.4) Ponemos la URL anterior en el campo Redirect URL on Success del primer formulario

Con esto ya tenemos la dirección entre Web Forms de Liferay. ¡Esperamos que os sea de utilidad! Icon

¿Cómo añadir el mensaje de éxito en el envío del primer formulario cuando se carga el segundo?Poner el mensaje de éxito que se quiere mostrar como descripción (campo description) del segundo formulario.Incluir el siguiente código (modificando la url del src) a continuación del script que incluye el primer formulario [1.3]. 

var srcURL = 'http://intranet.server.org/$langcode/widget/web/guest/form/-/1_WAR_webformportlet_INSTANCE_r14q3YPOB6f4';
$("iframe[src^="+srcURL+"]").on("load", function () {
    var iframeObj = $(this);
    if(iframeObj.contents().find(".description").html()!='') {
        iframeObj.contents().find(".description").addClass("portlet-msg-success");
    }
});

El código es jQuery, pero podría traducirse a javascript u otros frameworks con un código parecido.


Leave a Reply

Your email address will not be published. Required fields are marked *