Manejo de XForms

» XForms define una variación de los webforms tradicionales los cuales permiten ser usados en una gran variedad de plataformas y navegadores o inclusive en medios no tradicionales como los documentos PDF.

La primera diferencia clave con XForms es la forma en que los formularios son enviados al cliente. » XForms for HTML Authors contiene una descripción detallada de como crear XForms, para el fin de este tutorial únicamente veremos un ejemplo simple.

Ejemplo #1 Un formulario simple de búsqueda con XForms

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Search</h:title>
 <model>
  <submission action="http://example.com/search"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Find</label></input>
  <submit submission="s"><label>Go</label></submit>
 </h:p>
</h:body>
</h:html>

El formulario anterior muestra una caja de texto (llamada q), y un botón submit. Cuando el botón submit es presionado, el formulario será enviado a la página referenciada por action.

Aquí es donde comienza a verse diferente desde el punto de vista de la aplicación web. En un formulario normal HTML, los datos serían enviados como application/x-www-form-urlencoded, en el mundo XForms, esta información es enviada como datos formateados enXML.

Si se ha elegido trabajar con XForms, entonces probablemente se quiera esos datos como XML, en ese caso, ver en $HTTP_RAW_POST_DATA donde se puede encontrar el XML generado por el navegador el cual se puede pasar en el motor XSLT favorito o parseador.

Si no se esta interesado en formatear y solo se desea que la data sea cargada en la variable tradicional $_POST, se puede instruir al navegador del cliente para enviarlos como application/x-www-form-urlencoded cambiando el atributo method a urlencoded-post.

Ejemplo #2 Usando un Xform para rellenar $_POST

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Busqueda</h:title>
 <model>
  <submission action="http://example.com/search"
              method="urlencoded-post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Buscar</label></input>
  <submit submission="s"><label>Ir</label></submit>
 </h:p>
</h:body>
</h:html>

Nota: Así como esta escrito, muchos navegadores no soportan Xforms. Compruebe la versión de su navegador si el ejemplo falla.

add a note add a note

User Contributed Notes 3 notes

up
4
lphuberdeau at phpquebec dot org
10 years ago
Since HTTP_RAW_POST_DATA requires a configuration to be generated and is not enabled as a default value, you will probably have to use the PHP STDIN stream to get the raw data. It's probably better to use this method as the raw data will not be generated every time, even when not needed.

<?php
$fp
= fopen( "php://stdin", "r" );
$data = '';
while( !
feof( $fp ) )
   
$data .= fgets( $fp );
fclose( $fp );
?>
up
1
OrionI
9 years ago
FireFox has an XForms plugin that works with the latest nightly builds. Check out http://www.mozilla.org/projects/xforms/ for more info. For IE support, there's an ActiveX control from Novell (http://developer.novell.com/xforms/) and one from x-port.net (http://www.formsplayer.com/).

There's also a JavaScript-based one coming out called FormFaces which looks very promising, especially since there are no plugins required and it works in IE, FF, and Opera: http://www.formfaces.com/
up
-1
Darkener Daemon EX
8 years ago
"php://stdin" doesn't exist in my PHP version. I use the following code block instead :
<?php
if (!isset($HTTP_RAW_POST_DATA))
   
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
?>
To Top